Skip to content

Search

POST /v1/search is the discovery endpoint. Use it to find stays matching any combination of location, dates, prices, capacities, and host attributes.

A second endpoint, POST /v1/search/with-details, runs the same search and immediately fans out a detail lookup on every result — see below.

Request body

type SearchRequest = {
// Location — exactly one of these two is required
location?: string; // free-text query, e.g. "Lisbon, Portugal"
locationQueries?: string[]; // multi-city in one call
// Optional: pin to an Airbnb search-results URL instead of free-text
searchUrls?: string[]; // airbnb.com/s/... URLs (NOT /rooms URLs)
// Dates — both optional; defaults explained below
checkIn?: string; // ISO date (YYYY-MM-DD)
checkOut?: string; // ISO date
// Capacity
adults?: number;
children?: number;
infants?: number;
pets?: number; // count of pets, not boolean
// Price + room filters
priceMin?: number;
priceMax?: number;
minBeds?: number;
minBedrooms?: number;
minBathrooms?: number;
// Locale
currency?: string; // ISO code, default "USD"
locale?: string; // e.g. "en", "pt"
// Paging
maxItems?: number; // ≤240 sync, larger goes async
nextPageToken?: string; // from a prior response's meta.next_page_token
fields?: string; // projection, e.g. "id,title,pricing.price"
};

Example — text query

Terminal window
curl -X POST https://api.stayingapi.com/v1/search \
-H "Authorization: Bearer sk_live_..." \
-H "content-type: application/json" \
-d '{
"location": "Lisbon, Portugal",
"checkIn": "2026-07-01",
"checkOut": "2026-07-06",
"minBeds": 2,
"priceMax": 250,
"maxItems": 25
}'

Example — multi-city

Terminal window
curl -X POST https://api.stayingapi.com/v1/search \
-H "Authorization: Bearer sk_live_..." \
-d '{ "locationQueries": ["Lisbon, Portugal", "Porto, Portugal"], "maxItems": 50 }'

Response shape

{
"data": [ /* Array<Stay> */ ],
"meta": {
"count": 50,
"limit": 50,
"has_more": true,
"next_page_token": "eyJ..."
},
"request_id": "req_..."
}

To fetch the next page, resend the same body with nextPageToken set to the value from meta.next_page_token.

Dates

checkIn and checkOut are optional. If you omit them we run the search against a 2-night window starting 14 days from today so you still get useful results. Pass both fields when you need pricing and availability for a specific date range — the response’s pricing.breakdown is then computed for those exact dates.

POST /v1/search/with-details

Same request body as /v1/search. Instead of the lightweight discovery rows, each result is enriched with a full /v1/stays/{id} lookup (reviews, availability, description, amenities). One search credit + one detail credit per row.

Terminal window
curl -X POST https://api.stayingapi.com/v1/search/with-details \
-H "Authorization: Bearer sk_live_..." \
-d '{ "location": "Lisbon, Portugal", "maxItems": 10 }'

Notes on completeness

/v1/search results carry every field the discovery surface exposes — title, photos, host, rating, pricing. Some fields (full reviews, availability calendar, full description, complete amenities) require a follow-up /v1/stays/{id} lookup or use /v1/search/with-details. See the search-then-detail recipe.

Hard caps

maxItems is clamped to 250 server-side. For larger result sets, walk pages via nextPageToken (see Pagination).

Next