{"info":{"_postman_id":"b6f1c0de-5a1e-4c7a-9d2e-0a7b3c4d5e61","name":"Booking COM","description":"**Get your API key:** subscribe on RapidAPI at [https://rapidapi.com/DataCrawlLabs/api/booking-com30](https://rapidapi.com/DataCrawlLabs/api/booking-com30). Your key is shown there as `X-RapidAPI-Key`.\n\nSend your key in the `X-RapidAPI-Key` header. Outside this page, RapidAPI also needs `X-RapidAPI-Host: booking-com30.p.rapidapi.com`.","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"item":[{"name":"Common","item":[{"name":"Supported languages for the languageCode parameter of every module (languageCode, English name, native name). Static list; does not use monthly quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/common/languages","host":["{{baseUrl}}"],"path":["common","languages"],"variable":[],"query":[]},"auth":{"type":"noauth"},"description":"Supported languages for the languageCode parameter of every module (languageCode, English name, native name). Static list; does not use monthly quota"}},{"name":"Exchange rates of every currency against one base currency (how many units of each currency one unit of the base buys). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/common/exchange-rates","host":["{{baseUrl}}"],"path":["common","exchange-rates"],"variable":[],"query":[{"key":"baseCurrency","value":"INR","disabled":false,"description":"The base currency, a 3-letter code (see GET /common/currencies). Default USD"}]},"auth":{"type":"noauth"},"description":"Booking.com's own rates, 189 currencies for any base (the 145 of GET /common/currencies plus older ones such as VEB or ITL; `usableAsCurrencyCode` says which). `exchangeRateBuy` is units of that currency per 1 base unit: with base USD, INR is about 94.95 and EUR 0.8887. `date` is the day the rates are from (normally yesterday, `ageDays` 1). Booking.com now and then answers from a server with rates about six days old; then the request is repeated up to 3 more times and the freshest answer is returned, with `attempts` (calls made) and `stale` (still older than 2 days). No date or currency filter exists, so the whole list comes back."}},{"name":"Supported currencies for the currencyCode parameter (currencyCode, English name, and whether flights accept it). Static list; does not use monthly quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/common/currencies","host":["{{baseUrl}}"],"path":["common","currencies"],"variable":[],"query":[]},"auth":{"type":"noauth"},"description":"Every other endpoint takes any of these as `currencyCode`. GET /flights/search takes only the ones with `flights: true` (34 of them)."}}]},{"name":"Stays","item":[{"name":"Destination autocomplete. Results come back in the language of the search text (type in Hindi, Arabic or Chinese to get results in that language).","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/autocomplete","host":["{{baseUrl}}"],"path":["stays","autocomplete"],"variable":[],"query":[{"key":"query","value":"Mum","disabled":false,"description":"Search text, 1 to 200 characters. Write it in Hindi, Arabic, Chinese etc. to get results in that language"}]},"auth":{"type":"noauth"},"description":"Destination autocomplete. Results come back in the language of the search text (type in Hindi, Arabic or Chinese to get results in that language)."}},{"name":"Popular destination suggestions, grouped into themed clusters (e.g. \"Hill stations and mountains\")","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/suggestions","host":["{{baseUrl}}"],"path":["stays","suggestions"],"variable":[],"query":[{"key":"limit","value":"6","disabled":true,"description":"Destinations per cluster. Min 1, max 10 (the provider returns at most 10), default 6"},{"key":"languageCode","value":"hi","disabled":false,"description":"Language code from GET /common/languages (45 supported, e.g. hi, en-gb). Not case-sensitive. Default en-us"}]},"auth":{"type":"noauth"},"description":"Popular destination suggestions, grouped into themed clusters (e.g. \"Hill stations and mountains\")"}},{"name":"The map pins that are not properties (cities, districts, landmarks, airports, beaches, ski resorts) inside a map area, with the destination token for search. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/map-markers","host":["{{baseUrl}}"],"path":["stays","map-markers"],"variable":[],"query":[{"key":"northEast","value":"40.92,-73.70","disabled":false,"description":"North-east corner, `latitude,longitude`"},{"key":"southWest","value":"40.55,-74.30","disabled":false,"description":"South-west corner, `latitude,longitude`"},{"key":"types","value":"airports,landmarks","disabled":false,"description":"Comma-separated: cities, districts, landmarks, airports, beaches, ski. Default all six"},{"key":"limit","value":"20","disabled":true,"description":"Markers per type, 1 to 100. Default 20"},{"key":"languageCode","value":"en-us","disabled":true,"description":"A code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Send the two corners of the visible map. Each pin has `id`, `name`, `latitude`, `longitude`, `photoUrls` and `destination` (`city:20088325`, `district:10728`, `landmark:11045`, `airport:39`: the same ids as /stays/autocomplete, usable as `destination` in /stays/search and /stays/map; null for beaches and ski resorts). Airports add `iata`, districts `polygon[]`, beaches `review` and `details`, ski resorts `lifts[]`. `limit` is per type (1 to 100). An area with nothing returns status false."}},{"name":"The public booking.com page link and SEO text (title, description, keywords, image) of a hotel, city, district, airport, landmark, region or country. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/page-metadata","host":["{{baseUrl}}"],"path":["stays","page-metadata"],"variable":[],"query":[{"key":"destination","value":"city:20088325","disabled":false,"description":"`<type>:<id>` from a GET /stays/autocomplete suggestion's own `destination` field. Not latlong"},{"key":"languageCode","value":"en-gb","disabled":false,"description":"A code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Pass a `destination` token from /stays/autocomplete (`hotel:<id>`, `city:<id>`, `district:`, `airport:`, `landmark:`, `region:`, `country:`). `languageCode` decides the language of the texts and of the link (`en-gb` -> `...en-gb.html`). An unknown id answers status false. The `description` is a short teaser; the full property text is in /stays/description, and the property link is also `property.url` in /stays/property-details."}},{"name":"Search stays (hotels, apartments, ...) for a destination and dates. 20 results per page, readable property details, prices in your currency","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/search","host":["{{baseUrl}}"],"path":["stays","search"],"variable":[],"query":[{"key":"destination","value":"city:-2092174","disabled":false,"description":"Copy this straight from a GET /stays/autocomplete suggestion's own `destination` field. Format \"<type>:<id>\" (e.g. \"city:-2092174\") or, for a map point, \"latlong:<latitude>,<longitude>\""},{"key":"checkin","value":"2026-11-21","disabled":false,"description":"Check-in date, YYYY-MM-DD. Required unless flexible dates are used. Not in the past, at most 500 days from today"},{"key":"checkout","value":"2026-11-22","disabled":false,"description":"Check-out date, YYYY-MM-DD. Required unless flexible dates are used. After check-in; the stay is at most 90 nights"},{"key":"flexibleMonths","value":"2026-11,2026-12","disabled":false,"description":"Flexible dates: the months to look in, YYYY-MM, comma-separated, at most 3. The current month is the earliest, at most 500 days ahead. Send together with flexibleNights and flexibleStartWeekday, and not with checkin/checkout"},{"key":"flexibleNights","value":"2","disabled":false,"description":"Flexible dates: the stay length, 1 to 90 nights"},{"key":"flexibleStartWeekday","value":"friday","disabled":false,"description":"Flexible dates: the weekday the stay starts on, monday ... sunday (or 1 = Monday ... 7 = Sunday)"},{"key":"flexibleDays","value":"0","disabled":true,"description":"Plus/minus days around checkin/checkout (the app's Calendar tab): 0 (exact, default), 1, 2, 3 or 7. Every property then shows its cheapest window within that many days either side, for the same number of nights, in `stay`. Not together with the flexible months parameters"},{"key":"adults","value":"2","disabled":true,"description":"Number of guests, 1 to 30. Default 2"},{"key":"rooms","value":"1","disabled":true,"description":"Number of rooms, 1 to 30, and not more than adults (every room needs a guest). Default 1"},{"key":"childrenAges","value":"0,3","disabled":false,"description":"Comma-separated age of each child at check-out, 0 to 17 (0 = under 1 year old), at most 10 children. Not counted in adults. Omit for no children"},{"key":"pets","value":"false","disabled":true,"description":"Travelling with pets. Default false"},{"key":"filters","value":"free_cancellation::1,class::4,class::5","disabled":false,"description":"Comma-separated provider filters, each key::value (e.g. class::5,free_cancellation::1). To find valid keys/values for a given search, call GET /stays/search-filters with the same destination/checkin/checkout/adults/rooms first (with no filters applied) - its response lists every usable key::value pair with live counts for that exact search"},{"key":"currencyCode","value":"INR","disabled":false,"description":"Price currency, an ISO code from GET /common/currencies (145 supported, e.g. INR, EUR). Not case-sensitive. Default USD"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the results, a code from GET /common/languages (45 supported, e.g. hi, de). Not case-sensitive. Default en-us"},{"key":"page","value":"1","disabled":true,"description":"Page number, 1 to 50. 20 properties per page. Default 1"},{"key":"sortBy","value":"popularity","disabled":false,"description":"Sort order. Known friendly names: popularity, homesAndApartmentsFirst, distance, classDescending, classAscending, reviewScore, price, priceDescending. Not a closed list - GET /stays/search-sort-options can return a providerValue we have no friendly name for yet (e.g. closest_beach_distance); pass that string directly and it goes straight to the provider. Default popularity"}]},"auth":{"type":"noauth"},"description":"Take `destination` straight from an autocomplete suggestion's own `destination` field. Results come back in the language you ask for. `pagination.totalResults` is only returned on page 1; at most 1,000 results (page 50) can be paged through. Prices cover the whole stay for all rooms; `price.taxesIncluded` says whether taxes are already in `price.amount`. FLEXIBLE DATES (the app's \"I'm flexible\" tab): leave checkin/checkout out and send flexibleMonths (up to 3, YYYY-MM), flexibleNights (1-90) and flexibleStartWeekday together; every property then shows its own cheapest matching window in `stay` {checkin, checkout, nights, label} and a price for exactly that window. `search.mode` is `flexibleMonths` and `search.checkin`/`checkout` are null. PLUS/MINUS DAYS: send checkin/checkout and flexibleDays (0, 1, 2, 3 or 7); `search.mode` is `plusMinusDays`. /stays/search-filters and /stays/search-sort-options need an ordinary date range."}},{"name":"Properties on the map: a destination or the visible map area (two corners), up to 100 per call, with coordinates, price, review, own stay dates and room offers. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/map","host":["{{baseUrl}}"],"path":["stays","map"],"variable":[],"query":[{"key":"destination","value":"city:20088325","disabled":false,"description":"`<type>:<id>` (city, region, district, landmark, airport, hotel, country) from /stays/autocomplete, /stays/suggestions or a /stays/map-markers pin. Use either this or the map area, not both"},{"key":"northEast","value":"40.8327,-73.9109","disabled":false,"description":"North-east corner of the map area, `latitude,longitude` (larger latitude and longitude than southWest). With southWest; not with destination"},{"key":"southWest","value":"40.6433,-74.0245","disabled":false,"description":"South-west corner of the map area, `latitude,longitude`"},{"key":"checkin","value":"2026-11-21","disabled":false,"description":"Check-in date YYYY-MM-DD. Required unless the flexible months parameters are used"},{"key":"checkout","value":"2026-11-22","disabled":false,"description":"Check-out date YYYY-MM-DD"},{"key":"flexibleMonths","value":"2026-11,2026-12","disabled":false,"description":"Flexible months mode: up to 3 months YYYY-MM, with flexibleNights and flexibleStartWeekday, instead of checkin/checkout"},{"key":"flexibleNights","value":"","disabled":true,"description":"Flexible months mode: 1 to 90 nights"},{"key":"flexibleStartWeekday","value":"friday","disabled":false,"description":"Flexible months mode: monday ... sunday (or 1 to 7)"},{"key":"flexibleDays","value":"0","disabled":true,"description":"Plus/minus days around checkin/checkout: 0, 1, 2, 3 or 7"},{"key":"adults","value":"2","disabled":true,"description":"Guests, 1 to 30. Default 2"},{"key":"rooms","value":"1","disabled":true,"description":"Rooms, 1 to 30, not more than adults. Default 1"},{"key":"childrenAges","value":"0,3","disabled":false,"description":"Comma-separated ages at check-out, 0 to 17"},{"key":"pets","value":"false","disabled":true,"description":"Travelling with pets. Default false"},{"key":"filters","value":"class::4","disabled":false,"description":"Comma-separated key::value filters as in /stays/search"},{"key":"sortBy","value":"popularity","disabled":true,"description":"Same names as /stays/search: popularity, price, priceDescending, distance, classAscending, classDescending, reviewScore, homesAndApartmentsFirst. Default popularity"},{"key":"limit","value":"20","disabled":true,"description":"Properties per page, 1 to 100. Default 20"},{"key":"page","value":"1","disabled":true,"description":"Page, 1 to 50; offset = (page - 1) * limit. Default 1"},{"key":"currencyCode","value":"USD","disabled":true,"description":"A code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"A code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"The same search as /stays/search (identical properties, order and prices for the same destination, dates and guests) plus a search by MAP AREA (`northEast` and `southWest`, each `latitude,longitude`) and up to 100 properties per call (`limit`, `page`). Dates (exact, `flexibleDays` plus/minus days, or the flexible months mode), guests, filters, sorting, currency and language work as in search. Each property has its coordinates and address (`location`), its own `stay` dates (`isOwnWindow` true in a flexible search), `price`, `review`, `badges`, `rooms[]` (room-level offers; `originalPrice` is in the property's own currency), `units`, `soldOut`, `genius`, times and images. `sortOptions` and `filterGroups` come with the page. `hasNextPage` is true when the page was full; there is no total. The pins that are not properties are in /stays/map-markers."}},{"name":"The live, per-search filter list with real counts (what the app's \"Filter by\" screen shows) - facility, property type, star class, meals, review score, price range, and more, each with how many properties match. A real provider call: uses quota like /stays/search","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/search-filters","host":["{{baseUrl}}"],"path":["stays","search-filters"],"variable":[],"query":[{"key":"destination","value":"city:-2092174","disabled":false,"description":"Copy this straight from a GET /stays/autocomplete suggestion's own `destination` field, e.g. \"city:-2092174\". A map-point (\"latlong:...\") destination is not supported here"},{"key":"checkin","value":"2026-11-21","disabled":false,"description":"Check-in date, YYYY-MM-DD. Not in the past, at most 500 days from today"},{"key":"checkout","value":"2026-11-22","disabled":false,"description":"Check-out date, YYYY-MM-DD. After check-in; the stay is at most 90 nights"},{"key":"adults","value":"2","disabled":true,"description":"Number of guests, 1 to 30. Default 2"},{"key":"rooms","value":"1","disabled":true,"description":"Number of rooms, 1 to 30, and not more than adults. Default 1"},{"key":"childrenAges","value":"0,3","disabled":false,"description":"Comma-separated age of each child at check-out, 0 to 17 (0 = under 1 year old), at most 10 children. Omit for no children"},{"key":"pets","value":"false","disabled":true,"description":"Travelling with pets. Default false"},{"key":"filters","value":"class::5","disabled":false,"description":"Filters already applied, each key::value (e.g. class::5,free_cancellation::1), to get the narrowed list for the next round. Omit for the full, unfiltered list"},{"key":"currencyCode","value":"INR","disabled":false,"description":"Currency for the price filter, an ISO code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the filter labels, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Same destination/dates/guests as /stays/search, minus `page` (not paginated) and `latlong` (this provider call has no coordinate form, so a map-point search cannot use it). Call once with no `filters` for the full unfiltered list (this also doubles as the way to discover every valid `filters` key::value for /stays/search); pass whatever the caller has already picked (same `key::value` format as /stays/search's own `filters`) to get the next, narrowed list - each option's `count` is recalculated against the others already applied, and a currently-applied option comes back with `selected:true`."}},{"name":"The live, per-search sort option list (what the app's \"Sort by\" screen shows) - also the way to discover every valid sortBy value for /stays/search. A real provider call: uses quota like /stays/search","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/search-sort-options","host":["{{baseUrl}}"],"path":["stays","search-sort-options"],"variable":[],"query":[{"key":"destination","value":"city:-2092174","disabled":false,"description":"Copy this straight from a GET /stays/autocomplete suggestion's own `destination` field, e.g. \"city:-2092174\". A map-point (\"latlong:...\") destination is not supported here"},{"key":"checkin","value":"2026-11-21","disabled":false,"description":"Check-in date, YYYY-MM-DD. Not in the past, at most 500 days from today"},{"key":"checkout","value":"2026-11-22","disabled":false,"description":"Check-out date, YYYY-MM-DD. After check-in; the stay is at most 90 nights"},{"key":"adults","value":"2","disabled":true,"description":"Number of guests, 1 to 30. Default 2"},{"key":"rooms","value":"1","disabled":true,"description":"Number of rooms, 1 to 30, and not more than adults. Default 1"},{"key":"childrenAges","value":"0,3","disabled":false,"description":"Comma-separated age of each child at check-out, 0 to 17 (0 = under 1 year old), at most 10 children. Omit for no children"},{"key":"pets","value":"false","disabled":true,"description":"Travelling with pets. Default false"},{"key":"filters","value":"class::5","disabled":false,"description":"Filters already applied, each key::value. Not confirmed to affect which sort options are offered, but accepted for consistency with /stays/search"},{"key":"currencyCode","value":"INR","disabled":false,"description":"ISO code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the option labels, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Same required fields as /stays/search-filters (same provider request shape; no `page`, latlong not supported). The option set and even a caption can depend on the search itself - e.g. a beach destination can offer an extra \"Distance from closest beach\" option, and `popularity`'s caption changes to \"Top picks for families\" when `childrenAges` is non-empty (both confirmed live) - which a fixed list could not reflect. Each option's `value` is what to pass to /stays/search's `sortBy`; `value` is null for an option the provider has added since we last mapped one (still listed, with its raw `providerValue`, rather than dropped)."}},{"name":"The property detail page: name, address, coordinates, facilities, every room and every rate (price breakdown, cancellation and prepayment terms, meal plan) for the dates and guests. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/property-details","host":["{{baseUrl}}"],"path":["stays","property-details"],"variable":[],"query":[{"key":"hotelId","value":"237786","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"checkin","value":"2026-12-01","disabled":false,"description":"Check-in date, YYYY-MM-DD. Optional, but send it (with checkout) if you want the rooms, rates, prices or availability: left out, tomorrow is used and availability.datesAreDefault is true"},{"key":"checkout","value":"2026-12-03","disabled":false,"description":"Check-out date, YYYY-MM-DD, after checkin. Given together with checkin, or both left out"},{"key":"adults","value":"2","disabled":true,"description":"Adults, 1-30 (default 2)"},{"key":"rooms","value":"1","disabled":true,"description":"Rooms, 1-30, not more than adults (default 1)"},{"key":"childrenAges","value":"0,3","disabled":false,"description":"Comma-separated ages of the children, 0 = under 1 year, e.g. 0,3"},{"key":"currencyCode","value":"USD","disabled":false,"description":"Currency of every price, a code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"The stay detail - take a property from /stays/search and pass its `id` as `hotelId`; add the same dates and guests. **Dates are optional, but they matter.** The property itself (name, type, address, coordinates, policies, facilities, reviews) is the same whatever the dates. The `rooms`, `rates`, `pricing`, `recommendation` and `availability` are for the given dates and guests only (tested: hotel 6966158 had 0 rooms for tomorrow and 1 room and rate on later dates, with different prices). Booking.com itself requires dates, so when you leave them out we use tomorrow and the day after and set `availability.datesAreDefault` to true: then rooms, rates, prices and availability are for that one night and may say \"sold out\" for a hotel that is bookable on other dates. If you want rooms, prices or availability, send `checkin` and `checkout` (both or neither). See docs/api/dates-and-guests.md. Rules as /stays/search: not in the past, 1-90 nights. Groups: `property` (name, type, flags, host details for homes), `location` (full address, coordinates, district, distance to the centre), `reviews` (review count, breakfast and WiFi scores), `facilities`, `availability` (sold out?, scarcity messages, stay-length limits), `pricing` (price breakdown for the recommended rooms), `policies` (important information, payment), `recommendation`, plus `rooms[]` (description, size, beds, facilities, photos, child policy) and `rates[]` (each bookable rate with its price breakdown, cancellation and prepayment terms, meal plan). A property with nothing available for the dates still returns its name, address and facilities, with `availability.soldOut` true and empty `rooms`/`rates`. The property description text is not part of this response. Maps the provider keys by id are returned as lists. The facility catalog, Q&A ids and photo tags are in /stays/property-facilities."}},{"name":"Every room type and every rate of a property for given dates and guests: sizes, beds, facilities, photos, price breakdowns, meal plans, cancellation and prepayment terms. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/rooms","host":["{{baseUrl}}"],"path":["stays","rooms"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"checkin","value":"2026-12-01","disabled":false,"description":"YYYY-MM-DD. Same rules as /stays/search"},{"key":"checkout","value":"2026-12-03","disabled":false,"description":"YYYY-MM-DD, after checkin"},{"key":"adults","value":"2","disabled":true,"description":"1-30, default 2"},{"key":"rooms","value":"1","disabled":true,"description":"1-30, default 1, not more than adults"},{"key":"childrenAges","value":"","disabled":true,"description":"Comma-separated ages, 0 = under 1 year, e.g. 0,3"},{"key":"currencyCode","value":"USD","disabled":true,"description":"Currency of the prices, a code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Take a property from /stays/search and pass its `id` as `hotelId` with the same dates and guests. /stays/property-details answers with only the 1-2 rooms and rates the app recommends for your guests; this returns all of them (hotel 6966158, 4 adults + 2 children in 2 rooms: 2 rates there, 50 rates in 7 rooms here). Output: `rooms[]` (roomId, name, size, beds, facilities, highlights, photos, blockIds of the rates that fit), `rates[]` (blockId, roomId, price breakdown, meal plan, paymentterms with cancellation and prepayment timelines, bundleExtras, children and extra-bed rules), `policies.cancellation` / `prepayment` per rate, and `recommendation`. `recommendation.selection` is the app's ready summary for your guests (\"2 rooms for 4 adults, 2 children\"): each recommended room with its name, rate and price, and the `total` of those rooms (grossAmount = price shown, excludedAmount = taxes and charges paid at the property, allInclusiveAmount = both). A blockId reads `roomId_terms_guests_breakfast_packageId_bundleId`. Where every ID comes from and goes to is in docs/api/ids.md. Same input rules as /stays/property-details except that the dates are required (the rooms, rates and prices depend on them completely); rooms cannot exceed adults; `languageCode` translates rate names, policies and facilities; an unknown property returns status false."}},{"name":"Every room type of a property for given dates and guests, each marked available or sold out (with the cheapest price when available). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/room-types","host":["{{baseUrl}}"],"path":["stays","room-types"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"checkin","value":"2026-12-01","disabled":false,"description":"YYYY-MM-DD. Same rules as /stays/search"},{"key":"checkout","value":"2026-12-03","disabled":false,"description":"YYYY-MM-DD, after checkin"},{"key":"adults","value":"2","disabled":true,"description":"1-30, default 2"},{"key":"rooms","value":"1","disabled":true,"description":"1-30, default 1, not more than adults"},{"key":"childrenAges","value":"","disabled":true,"description":"Comma-separated ages, 0 = under 1 year, e.g. 0,3"},{"key":"currencyCode","value":"USD","disabled":true,"description":"Currency of the prices, a code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Take a property from /stays/search and pass its `id` as `hotelId` with the dates and guests. /stays/rooms returns only the room types that can be booked; this lists ALL the property's room types (Suite, Deluxe, Special Deluxe ...) and marks each `isAvailable` true or false, so a sold-out type can still be shown. Bookable types come first (cheapest first), then the sold-out ones. Every type carries all its photos (`photos[]`, three sizes each; `photoCount` is their number). Available types carry `availability` {rateCount, cheapestPrice {allInclusiveAmount, grossAmount, currency}, leftMessage, sizeM2}; the cheapest price is for the whole stay and all rooms searched. `id` is the `roomId` of /stays/rooms. Sold out means \"not bookable for this search\": Booking.com does not say whether a type is sold out or just does not fit the guests. How many individual rooms each type has is not available. Dates are required."}},{"name":"The description text of a property: \"About this property\" and the check-in / important-information text, in any language. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/description","host":["{{baseUrl}}"],"path":["stays","description"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Take a property from /stays/search and pass its `id` as `hotelId`. This is the text /stays/property-details leaves empty. `description` is the property description (Booking.com type 6) and `importantInformation` the check-in rules and fine print (type 7); both are also in `descriptions[]` with their `typeId`, language and, where the property has one, `extraLines.importantInfo` (a longer important-information text). Live testing (2026-10-19, 24+ properties): only types 6 and 7 exist and every property has both; the text is plain with line breaks; `languageCode` translates it (en, de, fr, es, ja, hi, ar, zh tested; an unknown code falls back to English). Dates and everything else changed nothing, so nothing else is accepted. An unknown property returns status false."}},{"name":"The property description (translated) plus a sectioned overview with headings such as Prime Location, Comfortable Accommodations and Dining Options. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/description-sections","host":["{{baseUrl}}"],"path":["stays","description-sections"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of `description`, a code from GET /common/languages. The overview stays English. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. `description` is the property text in `languageCode` (the same text as /stays/description). `markupDescription` is a different, shorter overview written as HTML with `<h2>` headings, English only, and exists for only about a third of the properties (`hasOverview` says whether); `sections[]` is that overview split at the headings into `{title, text}`."}},{"name":"Every photo of a property - the main gallery plus each room's own photos, with tags and 3 image sizes. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/photos","host":["{{baseUrl}}"],"path":["stays","photos"],"variable":[],"query":[{"key":"hotelId","value":"183564","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of alt texts, tag and room names, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`, same as /stays/highlights and /stays/property-details. No dates/guests/currency: live testing (2026-10-18) found none of them changes the result. Always returns the whole gallery (no paging or limit). `languageCode` translates photo alt texts, tag names and room names."}},{"name":"A compact list of a property's photos with the aspect ratio, the rooms each photo shows, the tags and six image sizes. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/photo-list","host":["{{baseUrl}}"],"path":["stays","photo-list"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the tag names, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. Same photos as /stays/photos (checked on 15 hotels), in a light form, plus the one thing that list lacks: `ratio` (width divided by height, so a gallery can reserve the space before the image loads). `roomIds` are the rooms a photo shows (the `roomId` of /stays/rooms; empty for a general photo), `filters` is Booking.com's own list behind it (`room:<id>`), `tags` are `{id, tag}` (translated by `languageCode`) and `images` has full URLs for square60, square90, max300, max500, max1024 and max1280. Dates and guests change nothing. The AI tags and alt texts are only in /stays/photos."}},{"name":"Property highlights - only the feature badges at the top of a property page (e.g. \"Pet friendly\", \"Breakfast\", \"Parking\"). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/highlights","host":["{{baseUrl}}"],"path":["stays","highlights"],"variable":[],"query":[{"key":"hotelId","value":"59304","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the category/facility names, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. No checkin/checkout/adults/rooms/childrenAges/currencyCode: live testing (2026-10-18) dropped each in turn and found every one of them has zero effect on this response, so none are accepted as input. Only `hotelId` (which property) and `languageCode` (translates the category/facility names) do anything."}},{"name":"The facility list of a property. Same facilities and groups as /stays/property-facilities, plus restaurant opening hours, pool details, sub-facilities and the ten most popular facilities. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/facilities","host":["{{baseUrl}}"],"path":["stays","facilities"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"excludeGroupIds","value":"37,38,39,40,41","disabled":false,"description":"Comma-separated facility group ids to leave out of facilities[]. Left out: 37,38,39,40,41 (Booking.com's own default). Empty (`excludeGroupIds=`): exclude nothing, so facilities[] has facilitiesCount entries"},{"key":"includeCommonAmenities","value":"true","disabled":true,"description":"false drops the common amenities from facilities[] (55 to 36 on the test property). Default true"},{"key":"topFacilitiesLimit","value":"5","disabled":true,"description":"How many entries accommodationHighlights (the top facilities for the trip) has, 1 to 100. Default 5 (the app uses 5 or 10)"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of every title and group name, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. Field names are Booking.com's own, under `data.propertyDetails`. `facilitiesCount` is the property's total; `facilities[]` is what is returned after `excludeGroupIds` (default 37-41, the old health and safety groups, so fewer than the total) and `includeCommonAmenities`. Each facility has its `groupId` and `groupTitle` (the same ids as `facilityGroups[]`, and as /stays/property-facilities), and `instances[]` with `attributes` (restaurant `name`, `scheduleEntry[]` opening hours per `dayOfWeek`, `closureScheduleDuringStay[]`, `paymentInfo.chargeMode` FREE/PAID/UNKNOWN_CHARGE_MODE, pool details in `extendedAttributes`). `accommodationHighlights` are the top facilities for the trip as the app shows them; `highlights.entities[]` are the ten most popular facilities (`type` Meal has no other field). Prices are not part of this call. Dates, guests and currency change nothing here."}},{"name":"Facility groups and facilities with prices where charged (use this for prices; restaurant hours and pool details are in /stays/facilities), room amenity ids, spoken languages, the Booking Homes flag, Q&A question ids and photo tags. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/property-facilities","host":["{{baseUrl}}"],"path":["stays","property-facilities"],"variable":[],"query":[{"key":"hotelId","value":"59304","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"facilityGroupIds","value":"12,7,13,15","disabled":false,"description":"Comma-separated facility group ids to narrow facilityGroups/facilities. Omit for every group"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of every title/name, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"This is what /stays/property-details returned before it became the property detail page. `facilityGroupIds` (comma-separated) narrows the groups; omit it for every group and facility. `status` says whether the property resolved, not whether groups came back. Room names, sizes and descriptions are in /stays/property-details. The text of the Q&A ids is in /stays/questions."}},{"name":"Breakfast and other meals (offer, price, style, menu, opening time, food score), the restaurants (name, cuisine, atmosphere, buffet or a la carte) and the food facilities of a property. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/food-and-drink","host":["{{baseUrl}}"],"path":["stays","food-and-drink"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"currencyCode","value":"USD","disabled":false,"description":"Currency of the meal prices, a code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the names: `data.languages[].languageCode` of GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. Field names are Booking.com's own, under `data.propertyDetails`. `meals[]`: `mealType` (BREAKFAST, LUNCH, DINNER, BRUNCH), `offer` (INCLUDED, BOTH = included or paid, OPTIONAL_PAID, NOT_OFFERED), `price` as text in the `currencyCode` asked, and `attributes` {style, foodMenu, cuisine, dietary, drinks, openingTime, foodScore {score, nReviews}, photo, photoUrl}. `restaurants[].instances[]`: the name and `extendedAttributes` {ambiances, cuisines, mealTypes, openForMeals, isBuffet, isAlacarte}. `foodFacilities` and `foodAmenities` are facilities with ids and slugs; `accommodationType` is HOTEL, APARTMENT, ... A property without meal data returns empty lists. Dates and guests change nothing."}},{"name":"Check-in and check-out time windows and the accepted payment methods (credit cards) of a property. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/house-rules","host":["{{baseUrl}}"],"path":["stays","house-rules"],"variable":[],"query":[{"key":"hotelId","value":"1150083","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"A code from GET /common/languages. Only the *Formatted times change with it (en-us: 12-hour). Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. Field names are Booking.com's own, under `data.houseRules`. `checkinCheckoutTimes.checkinTimeRange` and `checkoutTimeRange` have `from` and `until` (24-hour \"15:00\") and `fromFormatted`/`untilFormatted` (the same time as the app shows it: with languageCode en-us \"3:00 PM\", otherwise 24-hour). A side that is not limited is null (check-in from 15:00 with no end) and `00:00` also means no limit. `paymentMethods.acceptedCreditCards[]` are the cards the property takes (`id`, `name`, `nameEn`); some properties list none and have `isExclusive` true; `isPropertyBookingManagedPayAtProperty` says whether Booking.com manages payment at the property. Dates, guests and currency change nothing here."}},{"name":"A property's policies - children and cot/extra-bed rules with prices, group bookings, internet, parking, pets, minimum check-in age, curfew, payment note. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/policies","host":["{{baseUrl}}"],"path":["stays","policies"],"variable":[],"query":[{"key":"hotelId","value":"183564","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the policy texts, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. Returns one policy group (the rate-plan label is always \"General\") whose `policies[]` each have a `key` (children, hotelGroups, hotelInternet, hotelParking, hotelPets, ageRestriction, noCurfew, bmp, ...) and the provider's `content`. Which keys appear depends on the property. Prices of cots/extra beds are in the property's own currency (live testing 2026-10-19: no currency parameter applies in the complete mode). A property that does not resolve returns status false."}},{"name":"Important information for a property - fine print, the property's own notes, legal/trader details, licence numbers. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/important-info","host":["{{baseUrl}}"],"path":["stays","important-info"],"variable":[],"query":[{"key":"hotelId","value":"183564","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the fine print, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`, same as /stays/highlights, /stays/photos and /stays/property-details. No dates/guests/currency: live testing (2026-10-18) found none of them changes the result. Field names are Booking.com's own, under `data.propertyDetails`. `languageCode` translates `finePrints`; `translation.finePrint` is the property's own free text and is returned as written. `licenseData` and `uokikSplitOfObligations` (Polish UOKiK text) are empty/null for most properties."}},{"name":"The guest questions of a property with the property's answers, in one language per call (the app's Questions and answers screen), most-voted first. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/questions","host":["{{baseUrl}}"],"path":["stays","questions"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"A code from GET /common/languages. The list is that language: questions written in it plus translations into it. Default en-us = the English questions only"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. The questions of one language come in one response (hotel 1169919: 1,150 in English); there is no paging or filtering. Each has `question`, `answer`, `votes`, `askedAt`/`answeredAt` (and epoch seconds) and `roomId` when it is about one room (the `roomId` of /stays/rooms; an older room may no longer be listed). `averageResponseTime` is how fast the property usually answers; `optedOut` is true when the property turned Q&A off. `languageCode` decides the list: the questions written in that language plus the ones translated into it. The default (English) is NOT every question of the property: questions written in Spanish, Korean, Chinese ... appear only in their own language (hotel 1169919: 1,150 in English, 1,589 across languages; es adds 417). German and French return fewer (597, 626) because only part of the English questions is translated. To collect more, call once per language and merge by `questionId`. A hotel without questions returns status false."}},{"name":"Sustainability certifications and the Travel Proud (LGBTQ+ welcoming) mark of a property. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/badges","host":["{{baseUrl}}"],"path":["stays","badges"],"variable":[],"query":[{"key":"hotelId","value":"1150083","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"A code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. Field names are Booking.com's own, under `data.propertyDetails`: `propertySustainability {isSustainable, certifications[] {name, logoUrl, issuerDetails[] {name}}}` and `travelProud {isTravelProud}`. `certifications` is empty for properties without one; `issuerDetails` is usually empty."}},{"name":"What is around a property: landmarks, beaches, ski lifts, restaurants, cafes/bars, supermarkets, bus/metro/train and airports, each with distance and walking/driving time. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/surroundings","host":["{{baseUrl}}"],"path":["stays","surroundings"],"variable":[],"query":[{"key":"hotelId","value":"1150083","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"limit","value":"5","disabled":true,"description":"Items per list, 1 to 100. Default 5"},{"key":"maxDistanceKm","value":"25","disabled":true,"description":"How far to look, 1 to 1000 km. Default 25; raise it to see farther airports"},{"key":"languageCode","value":"en-gb","disabled":false,"description":"Language of names and unit text, a code from GET /common/languages. en-gb = metres/km. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. Field names are Booking.com's own, under `data.propertySurroundings`. Every list holds at most `limit` items within `maxDistanceKm`; `landmarks.top` are the most popular, `landmarks.nearby` the closest. Each item has `id`, `name`, `latitude`, `longitude`, `distance` (km, straight line) and `commute.byFoot` / `commute.byCar` (`distanceLocalized`, `timeLocalized` as text, `distanceMeters`, `timeMillis` as numbers; `byCar` can be null). The unit text follows `languageCode`: `en-gb` gives metres and kilometres, `en-us` feet and miles. The item ids are not the /stays/autocomplete ids."}},{"name":"Things to do near a city or map point: the attraction tickets (tours, admissions) the app shows on a property page, with price and cancellation. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/things-to-do","host":["{{baseUrl}}"],"path":["stays","things-to-do"],"variable":[],"query":[{"key":"destination","value":"city:20088325","disabled":false,"description":"A city or map point: \"city:<id>\" or \"latlong:<latitude>,<longitude>\""},{"key":"checkin","value":"","disabled":true,"description":"YYYY-MM-DD. Optional (with checkout): left out, tomorrow is used and datesAreDefault is true. Same rules as /stays/search"},{"key":"checkout","value":"","disabled":true,"description":"YYYY-MM-DD, after checkin. Given together with checkin, or both left out"},{"key":"currencyCode","value":"USD","disabled":false,"description":"Currency of the prices, a code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"The \"Things to do\" carousel of the app's property page: five bookable attractions with name, \"From\" price, \"Free cancellation available\", a badge such as Bestseller, a photo and a link, plus the \"See all\" link and the \"Good to know\" footnote. `destination` is a city (\"city:<id>\", from /stays/autocomplete) or a map point (\"latlong:<latitude>,<longitude>\"). Measured live: only those two work - district, airport, landmark, hotel and region ids return an empty list, so for a property use its coordinates from /stays/property-details (`location.latitude`, `location.longitude`) or `city:` + `location.destinationId`. The dates change the price and the links. They are optional: left out, tomorrow and the day after are used and `datesAreDefault` is true in the response (give both `checkin` and `checkout` for your own dates, or neither). Guests are not accepted, they change nothing. The attraction supplier only answers for dates from about 3 days back to 180 days ahead; outside that the list is empty (status false) or partial. `languageCode` translates the whole carousel (tested en, de, es, fr, ja; hi comes back in English). `currencyCode` sets every price. `price.amount` is display text in the language's number format, not a number."}},{"name":"Review scores of a property - overall score, category scores (cleanliness, comfort, facilities, location, staff, value, WiFi), scores by guest type, score bands and the 1-10 distribution. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/review-scores","host":["{{baseUrl}}"],"path":["stays","review-scores"],"variable":[],"query":[{"key":"hotelId","value":"183564","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the score words and category labels, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`. `overall` is the property's score with its categories and review count; `guestTypes[]` repeats that for each guest type (most reviews first); `scoreBands[]` is how many reviews are Superb/Good/Okay/Poor/Very poor; `scoreDistribution[]` is how many gave each whole score 1-10. For the review texts see /stays/reviews. Live testing (2026-10-19): only `hotelId` and `languageCode` (the score words and category labels) change the result. A property with no reviews returns status false."}},{"name":"The review categories of a property with the exact score and the range of its destination (is this score good for this city?). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/review-score-comparison","host":["{{baseUrl}}"],"path":["stays","review-score-comparison"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"destination","value":"city:20088325","disabled":false,"description":"The hotel's city as \"city:<id>\": location.cityId of its GET /stays/search result, or location.destinationId of GET /stays/property-details. Optional; without it destinationAverage is null"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the labels, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Take a property from /stays/search and pass its `id` as `hotelId`, and the hotel's city as `destination`: `city:<location.cityId>` of the same /stays/search result (no extra call) or `city:<location.destinationId>` of /stays/property-details (the same number). Returns the 7 categories (Cleanliness, Comfort, Facilities, Location, Staff, Value for money, Free WiFi) with the **unrounded** `score` and `destinationAverage` {lowerBound, higherBound}: the range the other properties of the destination score in. /stays/review-scores has the same categories rounded to one decimal, with review counts, guest types, score bands and a coarse 0/1 comparison flag; this adds the exact score and the numeric range. Without `destination` the scores come back and `destinationAverage` is null. The country is not asked for (it changed nothing). The wifi category is `hotel_free_wifi` here and `hotel_wifi` in /stays/review-scores. A hotel without reviews, or an unknown id, returns status false."}},{"name":"The review overview of a property: \"Guests who stayed here loved ...\" and ten featured reviews with guest details and text. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/featured-reviews","host":["{{baseUrl}}"],"path":["stays","featured-reviews"],"variable":[],"query":[{"key":"hotelId","value":"183564","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"roomId","value":"18356417","disabled":false,"description":"A room id (rooms[].id of GET /stays/property-details) to feature only that room's reviews"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Take a property from /stays/search and pass its `id` as `hotelId`. This is the short overview shown at the top of the reviews; the full list with paging, sorting and filters is /stays/reviews, the scores are /stays/review-scores. `roomId` (a `rooms[].id` from /stays/property-details) narrows the featured reviews to the guests of that room. `languageCode` translates the title and guest types and decides whose reviews are featured: German returns German reviews; for a language with few reviews (e.g. hi) the English ones come back with `translation` filled in. Review text has HTML entities decoded. A property without reviews returns status false."}},{"name":"Review sort and filter menus for a property, with how many reviews each matches, plus the review total. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/review-filters","host":["{{baseUrl}}"],"path":["stays","review-filters"],"variable":[],"query":[{"key":"hotelId","value":"183564","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the labels, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Called after a property is picked from a /stays/search result - `hotelId` is that result's own `id`, same as /stays/highlights, /stays/photos, /stays/property-details and /stays/important-info. Returns the review total, the sort menu (most relevant, newest, oldest, highest/lowest scores) and four filter menus: guest type, review language, time of year and topics (all 51 the property has), each option with its id and count. The ids are what a reviews-list call takes to sort/filter. Live testing (2026-10-19): only `hotelId` and `languageCode` change the result; the provider's topic-count cap is fixed to return every topic. A property with no reviews (or an unknown id) returns status false, \"No reviews found for this property\"."}},{"name":"One page of a property's guest reviews, sorted and filtered with the ids from /stays/review-filters. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/reviews","host":["{{baseUrl}}"],"path":["stays","reviews"],"variable":[],"query":[{"key":"hotelId","value":"183564","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"},{"key":"page","value":"1","disabled":true,"description":"Page number, from 1. Past the last page returns an empty list"},{"key":"pageSize","value":"25","disabled":true,"description":"Reviews per page, 1-100 (the provider caps it at 100)"},{"key":"sortBy","value":"sort_recent_desc","disabled":false,"description":"A sort id from GET /stays/review-filters data.sort.options[].id: sort_most_relevant (default), sort_recent_desc, sort_recent_asc, sort_score_desc, sort_score_asc. Also accepted: proximity_to_hotel_average, user_country"},{"key":"customerType","value":"couple","disabled":false,"description":"One guest type, `data.filters[filter_customer_type].options[].id` of GET /stays/review-filters: couple, family_with_children, review_category_group_of_friends, solo_traveller"},{"key":"reviewLanguages","value":"de,fr","disabled":false,"description":"Comma-separated review language ids: `data.filters[filter_language].options[].id` of GET /stays/review-filters"},{"key":"topicIds","value":"249,270","disabled":false,"description":"Comma-separated topic ids: `data.filters[filter_topic].options[].id` of GET /stays/review-filters; a review matching any is returned"},{"key":"timeOfYear","value":"06_09","disabled":false,"description":"Comma-separated season ids (the options of GET /stays/review-filters `data.filters[filter_time_of_year]`): 03_06 (Mar-May), 06_09 (Jun-Aug), 09_12 (Sep-Nov), 12_03 (Dec-Feb)"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language shown first, a code from GET /common/languages. Default en-us. Not a filter"}]},"auth":{"type":"noauth"},"description":"Called after /stays/review-filters (for the sort and filter ids and their counts) or straight after a /stays/search result - `hotelId` is that result's own `id`. Each review has the score, title, pros and cons, the guest (name, country, type, avatar, review count), the room they stayed in (name, dates, photo), reviewer photos and the hotel's reply. Paging: `page` and `pageSize` (1-100, default 25); `hasNextPage` is true when the page is full. `languageCode` is a \"show this language first\" preference, not a filter - use `reviewLanguages` to filter. Filters combine with each other and with `sortBy`. Live testing (2026-10-19): totals match the review-filters counts; `reviewLanguages` and `topicIds` take comma lists (a review matching any); an unknown language returns an empty page."}},{"name":"The highlighted photos guests attached to their reviews, for a property: up to 5, each in four sizes, with the review id. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/stays/review-photos","host":["{{baseUrl}}"],"path":["stays","review-photos"],"variable":[],"query":[{"key":"hotelId","value":"6966158","disabled":false,"description":"The property's own id, from a GET /stays/search result's data.properties[].id"}]},"auth":{"type":"noauth"},"description":"Take a property from /stays/search and pass its `id` as `hotelId`. These are the review photos shown in the reviews section; `reviewId` is the review the photo belongs to (find the text in /stays/reviews). Each photo has `urls[]` in four sizes: `max500_ao`, `square60_ao`, `square90`, `max1280x900`. Live testing (2026-10-19): at most 5 photos, the same 5 on repeated calls; a property with no review photos (and an unknown id) returns status false, \"No review photos found for this property\". There are no other inputs: the language and paging change nothing."}}]},{"name":"Attractions","item":[{"name":"[STEP 1] Destinations, points of interest and attractions matching typed text. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/autocomplete","host":["{{baseUrl}}"],"path":["attractions","autocomplete"],"variable":[],"query":[{"key":"query","value":"statue","disabled":false,"description":"REQUIRED. The text typed, e.g. statue"},{"key":"limit","value":"5","disabled":false,"description":"OPTIONAL. How many entries per list, 1 to 50 (default 5)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"`limit` (1 to 50, default 5) applies to the attractions list; destinations and points of interest are never more than 10. Attractions carry the `productId` and `productSlug` used by the other attractions calls."}},{"name":"[STEP 1] Popular attraction cities of a country (best-selling first) - the `ufi` of GET /attractions/suggestions. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/destinations","host":["{{baseUrl}}"],"path":["attractions","destinations"],"variable":[],"query":[{"key":"countryCode","value":"us","disabled":false,"description":"REQUIRED. 2-letter country code, e.g. us, in, fr"},{"key":"limit","value":"5","disabled":false,"description":"OPTIONAL. How many cities, 1 to 5 (default 5)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"Returns at most 5 cities, ordered by number of bookings. `ufi` is the city id; `productCount` how many attractions it has."}},{"name":"[STEP 2] Attractions suggested for a city. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/suggestions","host":["{{baseUrl}}"],"path":["attractions","suggestions"],"variable":[],"query":[{"key":"destination","value":"city:20088325","disabled":false,"description":"REQUIRED. The city, written city:<id>, copied from `destination` of GET /attractions/autocomplete or /attractions/destinations"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"Takes the `destination` (city:<id>) of GET /attractions/destinations or GET /attractions/autocomplete. Each product has the same fields as an item of GET /attractions/search plus its `slug`."}},{"name":"[STEP 2] All attractions (tickets, tours, activities) in a city, with filters, sorting and paging - the list behind the stays \"Things to do > See all\". A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/search","host":["{{baseUrl}}"],"path":["attractions","search"],"variable":[],"query":[{"key":"destination","value":"city:20088325","disabled":false,"description":"A city: \"city:<id>\""},{"key":"checkin","value":"","disabled":true,"description":"YYYY-MM-DD; with checkout. Optional"},{"key":"checkout","value":"","disabled":true,"description":"YYYY-MM-DD; with checkin"},{"key":"latitude","value":"","disabled":true,"description":"With longitude: adds each attraction's distance from this point"},{"key":"longitude","value":"","disabled":true,"description":"With latitude"},{"key":"query","value":"","disabled":true,"description":"Free-text search, e.g. museum"},{"key":"minReviewCount","value":"","disabled":true,"description":"OPTIONAL. Only attractions with at least this many reviews (0-100000). 0 = no limit. It also narrows `unfilteredCount` and the filter counts. Example: New York 2143 attractions, 113 with 100+ reviews"},{"key":"productIds","value":"","disabled":true,"description":"Comma list of attraction ids (attractions[].id) to look up"},{"key":"filters","value":"","disabled":true,"description":"Comma list of family::value, copied from `data.filterGroups[].options[].filter` of GET /attractions/search (search once without filters, then use the menu), e.g. label::free_cancellation,rating::4.5,language::es"},{"key":"sortBy","value":"","disabled":true,"description":"A `data.sorters[].value` of GET /attractions/search (the menu comes with every search), e.g. lowest_price, highest_weighted_rating, trending"},{"key":"page","value":"1","disabled":true,"description":"Default 1"},{"key":"pageSize","value":"20","disabled":true,"description":"1-500, default 20"},{"key":"currencyCode","value":"USD","disabled":true,"description":"Currency of the prices, a code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Every bookable attraction of a city: name, short description, price (with supplier discounts), free cancellation, duration, review score, flags (Bestseller, Skip the line, Audio guide, ...), photos, and the offers. The response also carries the menus: `sorters` and `filterGroups` (landmark, area, label, type, language, rating, time of day), each option with its count and a ready-to-use `filter` string. `destination` must be a city (\"city:<id>\", the `destination` of GET /attractions/autocomplete or /attractions/destinations - or of /stays/autocomplete; district, airport, landmark, hotel and region ids return nothing). `checkin`+`checkout` (both or neither) keep only attractions bookable in that window and price them for it; without dates nothing is filtered by availability. `latitude`+`longitude` (both) fill each attraction's `distances.fromSearchPointMeters`. `filters` is a comma list of `family::value` items copied from `filterGroups[].options[].filter`: values of one family are OR, families are AND, and the counts in the response follow the filters you applied; `rating` takes one value. `query` is free-text search (a search with no match returns `isSuggestion: true` with Booking.com's own suggestions). `sortBy` is a `sorters[].value`; omitted = the default (trending, or most_relevant with `query`). `pageSize` 1-500 (default 20); `page` x `pageSize` cannot be more than 10,000. A page past the end is an empty list. `languageCode` translates names and menus; `currencyCode` sets every price (amounts are numbers)."}},{"name":"[STEP 2] The filter menu of an attractions search without the products: every filter with its count. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/search-filters","host":["{{baseUrl}}"],"path":["attractions","search-filters"],"variable":[],"query":[{"key":"destination","value":"city:20088325","disabled":false,"description":"A city: \"city:<id>\""},{"key":"checkin","value":"","disabled":true,"description":"YYYY-MM-DD; with checkout. Optional"},{"key":"checkout","value":"","disabled":true,"description":"YYYY-MM-DD; with checkin"},{"key":"latitude","value":"","disabled":true,"description":"With longitude: adds each attraction's distance from this point"},{"key":"longitude","value":"","disabled":true,"description":"With latitude"},{"key":"filters","value":"","disabled":true,"description":"Comma list of family::value, copied from `data.filterGroups[].options[].filter` of GET /attractions/search (search once without filters, then use the menu), e.g. label::free_cancellation,rating::4.5,language::es"},{"key":"minReviewCount","value":"","disabled":true,"description":"OPTIONAL. Only attractions with at least this many reviews (0-100000)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"Currency of the prices, a code from GET /common/currencies. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"Language of the text, a code from GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"The same `filterGroups` (and `totalCount` / `unfilteredCount`) that GET /attractions/search returns, but lighter: no products, no paging. Takes the same destination, dates, filters and `minReviewCount`; `filter` of each option is what `filters` takes. Counts follow the filters you already applied."}},{"name":"[STEP 3] One attraction in full: description, highlights, what is included, itinerary, offers, photos, reviews summary, cancellation policy, addresses. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/product","host":["{{baseUrl}}"],"path":["attractions","product"],"variable":[],"query":[{"key":"slug","value":"prrbhbvtdbf5-new-york-city-90-minute-cruise-lady-liberty-bridges-and-skyline","disabled":false,"description":"REQUIRED. The whole `slug` of a product in GET /attractions/search (id and name together; the bare id does not work)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"Look the product up with its whole `slug` from GET /attractions/search. An unknown slug is a plain \"not found\" message. `productRecommendations` holds similar attractions."}},{"name":"[STEP 3] The \"compare\" view of an attraction: id, addresses, what is and is not included. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/comparison","host":["{{baseUrl}}"],"path":["attractions","comparison"],"variable":[],"query":[{"key":"slug","value":"prrbhbvtdbf5-new-york-city-90-minute-cruise-lady-liberty-bridges-and-skyline","disabled":false,"description":"REQUIRED. The whole `slug` of a product in GET /attractions/search (id and name together; the bare id does not work)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"A small subset of GET /attractions/product (same `slug`), for comparing attractions side by side."}},{"name":"[STEP 3] Reviews of an attraction, the short list shown on its product page. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/review-snippets","host":["{{baseUrl}}"],"path":["attractions","review-snippets"],"variable":[],"query":[{"key":"productId","value":"PRrBHbvtdbF5","disabled":false,"description":"REQUIRED. The `id` of a product in GET /attractions/search, e.g. PRrBHbvtdbF5"},{"key":"limit","value":"10","disabled":false,"description":"OPTIONAL. How many reviews, 2 to 300 (default 10)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"`limit` is 2 to 300 (default 10; 1 returns nothing upstream). `total` is the number of reviews the attraction has. Ratings are on a 10-point scale (`originalScale` tells the scale the guest used). For paging, sorting and filters use GET /attractions/reviews."}},{"name":"[STEP 3] Reviews of an attraction with paging, sorting and filters, plus the sort and filter menus. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/reviews","host":["{{baseUrl}}"],"path":["attractions","reviews"],"variable":[],"query":[{"key":"productId","value":"PRrBHbvtdbF5","disabled":false,"description":"REQUIRED. The `id` of a product in GET /attractions/search, e.g. PRrBHbvtdbF5"},{"key":"page","value":"1","disabled":false,"description":"OPTIONAL. Page number, from 1 (default 1)"},{"key":"pageSize","value":"20","disabled":false,"description":"OPTIONAL. Reviews per page, 1 to 300 (default 20)"},{"key":"sortBy","value":"","disabled":true,"description":"OPTIONAL. most_relevant (default) | newest | oldest"},{"key":"time","value":"","disabled":true,"description":"OPTIONAL. Time of year of the visit: Q1 | Q2 | Q3 | Q4"},{"key":"language","value":"","disabled":true,"description":"OPTIONAL. Review language id from data.filters[], e.g. en-us, de, pt-br"},{"key":"hideEmpty","value":"false","disabled":true,"description":"OPTIONAL. true = leave out reviews without text (default false)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"Page through `total` reviews with `page` + `pageSize` (1 to 300, default 20; a page past the end is an empty list). `sortBy`: most_relevant (default), newest, oldest. Filters: `time` (Q1 January-March ... Q4 October-December), `language` (an id from `data.filters[]`, with a count), `hideEmpty=true` (leave out reviews without text); several filters combine, and `total` follows them. Only one value per filter is possible. A `language` the attraction has no reviews in is an error (take it from `data.filters[]`)."}},{"name":"[STEP 3] Which days an attraction can be booked (about 180 days) and the cheapest price on those days. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/availability-calendar","host":["{{baseUrl}}"],"path":["attractions","availability-calendar"],"variable":[],"query":[{"key":"productId","value":"PRrBHbvtdbF5","disabled":false,"description":"REQUIRED. The `id` of a product in GET /attractions/search, e.g. PRrBHbvtdbF5"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"`dates[]` has one entry per day with `available`; `cheapestPrices[]` has one entry per ticket type with the list of days it is sold on and its lowest price. A product id that does not exist gives an empty calendar."}},{"name":"[STEP 4] Time slots and ticket prices of an attraction on one day. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/availability","host":["{{baseUrl}}"],"path":["attractions","availability"],"variable":[],"query":[{"key":"slug","value":"prrbhbvtdbf5-new-york-city-90-minute-cruise-lady-liberty-bridges-and-skyline","disabled":false,"description":"REQUIRED. The whole `slug` of a product in GET /attractions/search (id and name together; the bare id does not work)"},{"key":"date","value":"2026-11-26","disabled":false,"description":"REQUIRED. The day, YYYY-MM-DD"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"Each time slot has `timeSlotOffers[]` (the options: language, guide, what is included) and each option has `juxtapositions[].items[]` (the tickets: Adult / Child ..., price, cancellation, `ticketsAvailable`). A day without slots gives `timeslotCount: 0`. A day outside the calendar of GET /attractions/availability-calendar also gives `timeslotCount: 0`. `items[].id` and `items[].price` are what POST /attractions/live-availability takes."}},{"name":"[STEP 4] Check right now that chosen tickets can still be booked (state available / unavailable). Nothing is booked. A real provider call: uses quota","request":{"method":"POST","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/attractions/live-availability","host":["{{baseUrl}}"],"path":["attractions","live-availability"],"variable":[],"query":[]},"auth":{"type":"noauth"},"body":{"mode":"raw","raw":"{\n  \"items\": []\n}","options":{"raw":{"language":"json"}}},"description":"Send the tickets from GET /attractions/availability with the wanted quantity. `state` is available, unavailable (reason e.g. unavailable_on_booking: more tickets than the product allows per booking) or unknown (reason error_on_provider). The price sent is only a reference, the check is on availability. Read-only: no reservation is made."}},{"name":"[STEP 4] The consent texts shown before booking an attraction (terms and conditions, privacy, right of withdrawal). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/attractions/legal-consent","host":["{{baseUrl}}"],"path":["attractions","legal-consent"],"variable":[],"query":[{"key":"productId","value":"PRrBHbvtdbF5","disabled":false,"description":"REQUIRED. The `id` of a product in GET /attractions/search, e.g. PRrBHbvtdbF5"},{"key":"supplierName","value":"Viator","disabled":false,"description":"OPTIONAL. The supplier name (e.g. Viator): adds the booking-terms consent"},{"key":"buttonLabel","value":"","disabled":true,"description":"OPTIONAL. Name of the booking button quoted in the text. Default Next step"},{"key":"dataPrivacy","value":"true","disabled":true,"description":"OPTIONAL. Include the privacy consent. Default true"},{"key":"rightOfWithdrawal","value":"false","disabled":true,"description":"OPTIONAL. Include the right-of-withdrawal text. Default false"},{"key":"termsDetails","value":"false","disabled":true,"description":"OPTIONAL. Include the detailed terms with links. Default false"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Currency of the prices. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"}]},"auth":{"type":"noauth"},"description":"Which consents come back depends on the switches: the booking-terms consent only when `supplierName` is given (its text names the `buttonLabel`); `dataPrivacy` (default true), `rightOfWithdrawal` and `termsDetails` (the supplier and Booking.com terms with their links). `productId` decides the supplier shown in the details."}}]},{"name":"Flights","item":[{"name":"Cities and airports matching typed text - the `token` of a result is what /flights/search takes in `from` and `to`. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/flights/autocomplete","host":["{{baseUrl}}"],"path":["flights","autocomplete"],"variable":[],"query":[{"key":"q","value":"mum","disabled":false,"description":"What the user typed, 1-100 characters"},{"key":"languageCode","value":"en-us","disabled":false,"description":"Language of the names: `data.languages[].languageCode` of GET /common/languages. Default en-us"}]},"auth":{"type":"noauth"},"description":"Start of the flights journey. Type a few letters (or an airport code such as BOM) and get the matching cities and airports with name, region, country, a photo and the distance from an airport to its city. Every result has a `token` - \"BOM.CITY\" or \"DEL.AIRPORT\" - ready to paste into `from` / `to` of GET /flights/search. A city token covers all of its airports. Names come in `languageCode` (the primary language is used, so es-mx and es are the same). Countries that Booking.com can also return are left out: they cannot be searched."}},{"name":"Flights for a one-way, round-trip or multi-city trip, with the filter menu, sorting and paging. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/flights/search","host":["{{baseUrl}}"],"path":["flights","search"],"variable":[],"query":[{"key":"from","value":"BOM.CITY","disabled":false,"description":"Place token(s): `data.places[].token` of GET /flights/autocomplete, e.g. BOM.CITY. Several places in a leg: comma. Several legs (multi-city): |"},{"key":"to","value":"DEL.AIRPORT","disabled":false,"description":"Place token(s): `data.places[].token` of GET /flights/autocomplete, like `from`"},{"key":"depart","value":"2026-12-06","disabled":false,"description":"YYYY-MM-DD, today up to 359 days ahead. ONEWAY and ROUNDTRIP"},{"key":"return","value":"2026-12-14","disabled":false,"description":"YYYY-MM-DD, not before `depart`, up to 360 days ahead. Makes it a ROUNDTRIP"},{"key":"legDates","value":"","disabled":true,"description":"MULTISTOP only (chosen by the user; no endpoint lists dates): one date per leg separated by |, in order, e.g. 2026-11-21|2026-11-25. 1-5 legs, the same count as from and to"},{"key":"type","value":"","disabled":true,"description":"ONEWAY, ROUNDTRIP or MULTISTOP. Optional: worked out from return / legDates"},{"key":"adults","value":"1","disabled":true,"description":"1-9, default 1"},{"key":"childrenAges","value":"","disabled":true,"description":"Comma-separated ages 0-17, e.g. 4,12. Adults + children at most 9; ages 0-1 are infants (one adult each)"},{"key":"cabinClass","value":"ECONOMY","disabled":true,"description":"A fixed list, no endpoint returns it: ECONOMY (default), PREMIUM_ECONOMY, BUSINESS or FIRST"},{"key":"currencyCode","value":"USD","disabled":true,"description":"Currency of the prices. Take it from GET /common/currencies: only the currencies with `flights: true` work here (34 of the 145: AED, AUD, BRL, CAD, CHF, CLP, COP, CZK, DKK, EUR, GBP, HKD, HUF, IDR, INR, JPY, KRW, KWD, KZT, MXN, MYR, NOK, NZD, PEN, PLN, QAR, SAR, SEK, SGD, THB, UAH, USD, VND, ZAR). Default USD"},{"key":"sort","value":"BEST","disabled":true,"description":"A fixed list, no endpoint returns it: BEST (default), CHEAPEST or FASTEST"},{"key":"page","value":"1","disabled":true,"description":"Default 1. A page past the end is an empty list"},{"key":"limit","value":"15","disabled":true,"description":"1-60, default 15"},{"key":"combineTickets","value":"true","disabled":true,"description":"Default true. false = no combinations of separate one-way tickets (fewer results)"},{"key":"stops","value":"","disabled":true,"description":"Filter: the most stops allowed - 0 direct only, 1, 2. The options and counts are `data.filters.stops.options[].stops` of a GET /flights/search without this filter"},{"key":"maxDuration","value":"","disabled":true,"description":"Filter: longest journey in whole hours. The range is `data.filters.duration.journey.min` / `max` of a GET /flights/search without this filter"},{"key":"maxLayoverDuration","value":"","disabled":true,"description":"Filter: longest wait between flights in whole hours. The range is `data.filters.duration.layover.min` / `max` of a GET /flights/search without this filter"},{"key":"airlines","value":"","disabled":true,"description":"Filter: ONE comma list of airline codes for the whole trip (all legs), e.g. AI,6E. The codes are `data.filters.airlines.options[].code` of a GET /flights/search for the same trip without this filter (each option has the airline name, logo and how many offers it has)"},{"key":"includedBaggage","value":"","disabled":true,"description":"Filter: CABIN and/or CHECKIN (comma-separated) - only fares that include it. The counts are `data.filters.baggage.options[]` of a GET /flights/search without this filter"},{"key":"maxBudget","value":"","disabled":true,"description":"Filter: highest total price for all travellers, in `currencyCode`. The range is `data.filters.budget.min` / `max` of a GET /flights/search without this filter"},{"key":"maxBudgetPerAdult","value":"","disabled":true,"description":"Filter: highest price per adult. The range is `data.filters.budget.perAdultMin` / `perAdultMax` of a GET /flights/search without this filter"},{"key":"airports","value":"","disabled":true,"description":"Filter: comma list of airport codes, e.g. BOM,NMI. The codes are `data.filters.airports.byCity[].airports[].code` of a GET /flights/search without this filter"},{"key":"preferSameAirport","value":"","disabled":true,"description":"Filter, round trip only: return from the airport you arrived at. The count is `data.filters.airports.preferSameAirport.count` of a GET /flights/search without this filter"},{"key":"departureTimes","value":"","disabled":true,"description":"Filter: departure time ranges HH-HH, one group per leg separated by | (round trip: 2 groups), ranges of a leg comma-separated, e.g. 06-11|18-23. The suggested ranges and counts per leg are `data.filters.times.perLeg[].departure[]` of a GET /flights/search without this filter"},{"key":"arrivalTimes","value":"","disabled":true,"description":"Filter: arrival time ranges, same format as departureTimes. The ranges and counts are `data.filters.times.perLeg[].arrival[]` of a GET /flights/search without this filter"}]},"auth":{"type":"noauth"},"description":"The flights list. One call returns the offers (with price, flights, times, stops, baggage, fare), the filter menu with counts (`filters`) and the best / cheapest / cheapest direct / fastest deals of the whole result (`deals`). **Trip type** is worked out from what you send: `legDates` = MULTISTOP (1-5 legs), `return` = ROUNDTRIP, otherwise ONEWAY (or set `type`). `from` / `to` are tokens from GET /flights/autocomplete; several places in one leg are comma-separated (DEL.AIRPORT,HDO.AIRPORT), and the legs of a multi-city trip are separated by | (from=BOM.CITY|HYD.AIRPORT, to=HYD.AIRPORT|GOI.AIRPORT, legDates=2026-11-21|2026-11-25). **Passengers:** `adults` 1-9, `childrenAges` comma-separated 0-17 (adults + children at most 9; ages 0 and 1 are infants on a lap, one adult each). Prices are for everybody; `travellers[]` on an offer shows each one. **Dates:** from today up to 359 days ahead (the return and later legs 360). **Filters** (all optional, applied together): `stops` = the most stops allowed (0 direct, 1, 2); `maxDuration` / `maxLayoverDuration` in whole hours; `airlines` = ONE comma list of airline codes for the whole trip, also for a round trip or multi-city (e.g. AI,6E); `includedBaggage` = CABIN and/or CHECKIN; `maxBudget` (total) / `maxBudgetPerAdult`; `airports` = comma list of airport codes; `preferSameAirport` (round trip: fly back from where you arrived); `departureTimes` / `arrivalTimes` = HH-HH ranges, one group per leg separated by | (a round trip needs two groups, a multi-city trip one per leg; 00-23 = no limit for that leg, several ranges of a leg are comma-separated: 00-05,18-23). The menu lists every option with its count and the parameter that applies it. `sort` = BEST, CHEAPEST or FASTEST (any other word gives BEST). `limit` 1-60 (default 15) with `page`. `combineTickets` (default true) lets round trips be built from two separate one-way tickets - more choice; false gives fewer results. `currencyCode` is one of the 34 currencies flights are priced in (not the full /common/currencies list); the currency also decides which offers are shown. Each offer's `id` goes to GET /flights/details."}},{"name":"The dates Booking.com picks for a month and trip length (\"I'm flexible\": a weekend, a week, two weeks). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/flights/fly-anytime","host":["{{baseUrl}}"],"path":["flights","fly-anytime"],"variable":[],"query":[{"key":"from","value":"BOM.CITY","disabled":false,"description":"One place token: `data.places[].token` of GET /flights/autocomplete, e.g. BOM.CITY"},{"key":"to","value":"DEL.AIRPORT","disabled":false,"description":"One place token: `data.places[].token` of GET /flights/autocomplete, e.g. DEL.AIRPORT"},{"key":"duration","value":"WEEKS","disabled":false,"description":"A fixed list, no endpoint returns it: WEEKEND or WEEKS"},{"key":"weeks","value":"2","disabled":false,"description":"1 or 2. Required when duration is WEEKS"},{"key":"month","value":"2026-12","disabled":false,"description":"YYYY-MM, chosen by the user: from next month up to 12 months ahead"}]},"auth":{"type":"noauth"},"description":"For the app's \"I'm flexible\" choice: give the route, a month and a trip length and get back one departure and return date to search with (GET /flights/search). `duration` WEEKEND (a weekend away), or WEEKS with `weeks` 1 or 2. `estimated` is Booking.com's own flag: true when the dates are a guess rather than a priced find (far-off months, or the same place at both ends). No prices are returned here; use the dates in a search. The month runs from next month up to 12 months ahead (the current month is rejected); `from` and `to` are single place tokens from GET /flights/autocomplete."}},{"name":"One flight offer in full: fare rules, the other fares of the same flight, comparison table. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/flights/details","host":["{{baseUrl}}"],"path":["flights","details"],"variable":[],"query":[{"key":"offerToken","value":"","disabled":false,"description":"An offer id: data.offers[].id of GET /flights/search, or data.otherFares[].id of this endpoint"}]},"auth":{"type":"noauth"},"description":"Open a search result. `offerToken` is the `id` of an offer from GET /flights/search (also `deals[].offerId`). The answer is the offer with everything a search result has plus: `fareRules` (what it costs to change or cancel, per segment), `otherFares[]` (the same flights as Saver / Classic / Flex ... each with its own `id` and price and what it includes), `fareComparison` (the app's comparison table: one row per feature, one value per fare in the order of `otherFares`), `bookerMustProvide` (email, phone) and `baggagePolicies`. The offer's price is in the currency of the search it came from (the id carries it). Offers expire after a short time: an expired or foreign id returns a clear message - search again. To continue, pass the `id` of the fare the traveller chose (the offer's own, or one of `otherFares`) to POST /flights/fare-quote."}},{"name":"Confirm the chosen offer or fare: final price and how long it is valid - nothing is booked or charged. A real provider call: uses quota","request":{"method":"POST","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/flights/fare-quote","host":["{{baseUrl}}"],"path":["flights","fare-quote"],"variable":[],"query":[]},"auth":{"type":"noauth"},"body":{"mode":"raw","raw":"{\n  \"offerToken\": \"\"\n}","options":{"raw":{"language":"json"}}},"description":"The step after choosing a fare. Send the `id` of the offer or fare; Booking.com returns a DRAFT fare quote that holds it with the final price and an expiry time (`quote.expires`). Nothing is booked, reserved or charged, and this API has no booking step - the fare quote is the last thing it covers. `quote.token` goes to GET /flights/fare-quote/extras for the add-ons (flexible ticket, seat map). `passengers[]` are the traveller slots of the fare quote, still empty. The price is in the currency of the search the offer came from. Every call returns a new fare quote."}},{"name":"Add-ons for a fare quote: the flexible ticket (the seat map is GET /flights/seat-map). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/flights/fare-quote/extras","host":["{{baseUrl}}"],"path":["flights","fare-quote","extras"],"variable":[],"query":[{"key":"quoteToken","value":"","disabled":false,"description":"quote.token from POST /flights/fare-quote"}]},"auth":{"type":"noauth"},"description":"Use the `quote.token` from POST /flights/fare-quote. Returns the optional flexible ticket: price, supplier and whether Booking.com recommends it. The seat map has its own endpoint, GET /flights/seat-map. An unknown or expired quote token returns status false."}},{"name":"The seat map of a fare quote: cabins, rows, columns, seat characteristics and price per seat. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/flights/seat-map","host":["{{baseUrl}}"],"path":["flights","seat-map"],"variable":[],"query":[{"key":"quoteToken","value":"","disabled":false,"description":"quote.token from POST /flights/fare-quote"}]},"auth":{"type":"noauth"},"description":"Use the `quote.token` from POST /flights/fare-quote. Returns the seat map in Booking.com's own seat-map format: one entry in `options[]` per flight (`segmentIndex`, `legIndex`) with `cabins[]` (`class`, `deck`, `columns[]`, `rows[]`) and `priceDistribution[]`. It is large (about 170 KB). A fare quote whose flight has no seat map, or an unknown or expired quote token, returns status false."}}]},{"name":"Cars","item":[{"name":"The countries a renter can live in (code, name, flag): the `countryCode` of every cars call. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/countries","host":["{{baseUrl}}"],"path":["cars","countries"],"variable":[],"query":[{"key":"languageCode","value":"en-us","disabled":true,"description":"Language of the names. Default en-us"}]},"auth":{"type":"noauth"},"description":"The renter's country changes which cars, suppliers and prices Booking.com offers (the same search gave 369 cars for India, 80 for the US, 504 for the UK), so `countryCode` is required on every cars call and is never guessed. 242 countries; names are in `languageCode`."}},{"name":"Pick-up / drop-off places for typed text: cities, districts, airports (with IATA code) and points of interest. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/autocomplete","host":["{{baseUrl}}"],"path":["cars","autocomplete"],"variable":[],"query":[{"key":"term","value":"newark","disabled":false,"description":"The text typed, e.g. newark"},{"key":"languageCode","value":"en-us","disabled":true,"description":"Language of the names. Default en-us"}]},"auth":{"type":"noauth"},"description":"At most 7 places. Use `latitude` + `longitude` (airports too) as `pickUpLatitude` + `pickUpLongitude` in GET /cars/search. `locationId` and `cityId` are always null here (depot ids come from search results). The renter's country does not change the answer."}},{"name":"Rental cars for a pick-up place and dates, with the filter menu, sorting, and every car's price, supplier and rating. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/search","host":["{{baseUrl}}"],"path":["cars","search"],"variable":[],"query":[{"key":"pickUpLatitude","value":"40.6413","disabled":false,"description":"REQUIRED (the pick-up place is mandatory): latitude of the pick-up, together with pickUpLongitude"},{"key":"pickUpLongitude","value":"-73.7781","disabled":false,"description":"REQUIRED, together with pickUpLatitude"},{"key":"dropOffLatitude","value":"","disabled":true,"description":"OPTIONAL. One-way rental: drop-off latitude, together with dropOffLongitude. Leave both drop-off params out and the car is returned at the pick-up place"},{"key":"dropOffLongitude","value":"","disabled":true,"description":"OPTIONAL. With dropOffLatitude"},{"key":"pickUpDate","value":"2026-11-21","disabled":false,"description":"REQUIRED. YYYY-MM-DD, local date at the pick-up place"},{"key":"pickUpTime","value":"10:00","disabled":true,"description":"OPTIONAL. HH:mm local time. Default 10:00"},{"key":"dropOffDate","value":"2026-11-24","disabled":false,"description":"REQUIRED, even if the same day as the pick-up (then the drop-off time must be later). YYYY-MM-DD, at most 62 days after the pick-up"},{"key":"dropOffTime","value":"10:00","disabled":true,"description":"OPTIONAL. HH:mm local time. Default 10:00"},{"key":"driverAge","value":"30","disabled":true,"description":"OPTIONAL. Age of the driver, 18 to 99. Default 30"},{"key":"countryCode","value":"us","disabled":false,"description":"REQUIRED. The renter's country: a `code` of GET /cars/countries. It changes which cars and prices are offered"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. Price currency: one of 79 codes. Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"OPTIONAL. Language of the texts. Default en-us"},{"key":"sortBy","value":"","disabled":true,"description":"OPTIONAL. Default recommended"},{"key":"filters","value":"","disabled":true,"description":"OPTIONAL. Comma-separated family::value from data.filters.families[].options[].filter, e.g. supplier::Hertz,carCategory::suvs"}]},"auth":{"type":"noauth"},"description":"REQUIRED: the pick-up place (`pickUpLatitude` + `pickUpLongitude`), `pickUpDate`, `dropOffDate` and `countryCode`. EVERYTHING ELSE IS OPTIONAL and has a default. The drop-off place is optional: leave it out and the car is returned at the pick-up place; for a one-way rental give `dropOffLatitude` + `dropOffLongitude`.\n\n**Limits (measured):** driver age 18 to 99 (default 30; 30 to 65 all price the same; below 25 some suppliers add a young-driver fee or give no cars - the youngest age that returns cars depends on the place, 18 in New York, 20 in Los Angeles, 21 in London; an age with no cars is an empty answer, not an error). A rental is at most 62 days. The pick-up must not be in the past and at most 3 years ahead. The pick-up time matters: outside the depot opening hours there are few cars.\n\n**Filters:** `filters=family::value`, comma-separated, copied from `data.filters.families[].options[].filter` of an unfiltered search. Several values of one family are OR, different families are AND (exceptions: `provisionalExtraType` is AND, `suitcaseCounts` is \"at least\"). See docs/api/filters.md.\n\n**No paging:** one answer holds all cars, at most 500. `totalCount` is Booking.com's own count (it can be a few more than `returnedCount`); narrow with filters when `truncated` is true.\n\n`data.searchKey` + `data.cars[].id` + the same `countryCode` open the follow-up calls (vehicle, supplier, terms, price-summary). The `searchKey` belongs to the country of the search: another country gives \"cannot find this car\"."}},{"name":"One car in full: price breakdown, fees, rentable extras, insurance packages, what is included, important information. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/vehicle","host":["{{baseUrl}}"],"path":["cars","vehicle"],"variable":[],"query":[{"key":"searchKey","value":"","disabled":false,"description":"data.searchKey of GET /cars/search, exactly as returned"},{"key":"vehicleId","value":"","disabled":false,"description":"data.cars[].id of GET /cars/search"},{"key":"countryCode","value":"us","disabled":false,"description":"The country the search was made with"},{"key":"currencyCode","value":"USD","disabled":true,"description":"Default USD"},{"key":"languageCode","value":"en-us","disabled":true,"description":"Default en-us"}]},"auth":{"type":"noauth"},"description":"Use `data.searchKey` and `data.cars[].id` of GET /cars/search, with the SAME `countryCode` as that search (another country gives \"cannot find this car\"). `currencyCode` and `languageCode` may differ from the search. `data.vehicle.optionalExtras[].id` goes into POST /cars/price-summary."}},{"name":"The rental company at the pick-up place: rating with breakdown, address, opening times, instructions. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/supplier","host":["{{baseUrl}}"],"path":["cars","supplier"],"variable":[],"query":[{"key":"searchKey","value":"","disabled":false},{"key":"vehicleId","value":"","disabled":false},{"key":"countryCode","value":"us","disabled":false},{"key":"currencyCode","value":"USD","disabled":true},{"key":"languageCode","value":"en-us","disabled":true}]},"auth":{"type":"noauth"},"description":"Same inputs as GET /cars/vehicle."}},{"name":"Customer reviews of the rental company. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/supplier-reviews","host":["{{baseUrl}}"],"path":["cars","supplier-reviews"],"variable":[],"query":[{"key":"searchKey","value":"","disabled":false},{"key":"vehicleId","value":"","disabled":false},{"key":"countryCode","value":"us","disabled":false},{"key":"currencyCode","value":"USD","disabled":true},{"key":"languageCode","value":"en-us","disabled":true},{"key":"sortBy","value":"score.descending","disabled":true}]},"auth":{"type":"noauth"},"description":"Booking.com returns all reviews at once, unsorted and without paging; we sort them here by `sortBy`. Same inputs as GET /cars/vehicle, plus `sortBy`."}},{"name":"Address and coordinates of the pick-up depot (the map tab). A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/supplier-location","host":["{{baseUrl}}"],"path":["cars","supplier-location"],"variable":[],"query":[{"key":"searchKey","value":"","disabled":false},{"key":"vehicleId","value":"","disabled":false},{"key":"countryCode","value":"us","disabled":false},{"key":"currencyCode","value":"USD","disabled":true},{"key":"languageCode","value":"en-us","disabled":true}]},"auth":{"type":"noauth"},"description":"Same inputs as GET /cars/vehicle."}},{"name":"The full rental terms of a car: deposit, driver and licence requirements, mileage, and every chapter of the terms, as readable text. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/cars/terms","host":["{{baseUrl}}"],"path":["cars","terms"],"variable":[],"query":[{"key":"searchKey","value":"","disabled":false},{"key":"vehicleId","value":"","disabled":false},{"key":"countryCode","value":"us","disabled":false},{"key":"languageCode","value":"en-us","disabled":true}]},"auth":{"type":"noauth"},"description":"Only for cars paid now or part-paid (`price.payWhen` PAY_NOW / PART_PAY); a car paid at pick-up (PAY_LOCAL) has no terms page at Booking.com and gives status false. `countryCode` must be the search's country. No currency (terms do not depend on it)."}},{"name":"The price of a car with chosen extras (additional driver, child seat ...) - nothing is booked or charged. A real provider call: uses quota","request":{"method":"POST","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/cars/price-summary","host":["{{baseUrl}}"],"path":["cars","price-summary"],"variable":[],"query":[]},"auth":{"type":"noauth"},"body":{"mode":"raw","raw":"{\n  \"searchKey\": \"\",\n  \"vehicleId\": \"\",\n  \"countryCode\": \"us\",\n  \"currencyCode\": \"USD\",\n  \"languageCode\": \"en-us\",\n  \"extras\": []\n}","options":{"raw":{"language":"json"}}},"description":"Send the car and the extras wanted; get the updated total. `extras[].id` is `data.vehicle.optionalExtras[].id` of GET /cars/vehicle, `amount` how many (1 to 10). Empty `extras` gives the base price. Insurance packages cannot be added (Booking.com's format for them was never found)."}}]},{"name":"Taxi","item":[{"name":"Places for typed text (airports, stations, hotels, landmarks): the place ids of GET /taxi/search. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/taxi/autocomplete","host":["{{baseUrl}}"],"path":["taxi","autocomplete"],"variable":[],"query":[{"key":"term","value":"JFK","disabled":false,"description":"REQUIRED. The text typed, e.g. JFK"},{"key":"latitude","value":"","disabled":true,"description":"OPTIONAL. Bias the order towards this point; give together with longitude"},{"key":"longitude","value":"","disabled":true,"description":"OPTIONAL. With latitude"}]},"auth":{"type":"noauth"},"description":"Each place has `googlePlaceId` (use it as `pickUpPlaceId` / `dropOffPlaceId` in GET /taxi/search); airports also have `iata`. `latitude` + `longitude` only put the nearest places first. Names do not depend on a language."}},{"name":"Airports (and a few other transport places) for typed text, with the IATA code. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/taxi/airports","host":["{{baseUrl}}"],"path":["taxi","airports"],"variable":[],"query":[{"key":"term","value":"munich","disabled":false,"description":"REQUIRED. The text typed, e.g. munich"}]},"auth":{"type":"noauth"},"description":"The second place search of the taxi screen. `iata` is the airport code for GET /taxi/flights; `placeId` works as `pickUpPlaceId` / `dropOffPlaceId` in GET /taxi/search. Not every result is an airport (`iata` is null for a bus station)."}},{"name":"The flights between two airports on a day, to fit the taxi pick-up time to a flight. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/taxi/flights","host":["{{baseUrl}}"],"path":["taxi","flights"],"variable":[],"query":[{"key":"departureIata","value":"LHR","disabled":false,"description":"REQUIRED. Airport the flight leaves from"},{"key":"arrivalIata","value":"JFK","disabled":false,"description":"REQUIRED. Airport the flight lands at"},{"key":"date","value":"2026-11-01","disabled":false,"description":"REQUIRED. YYYY-MM-DD"},{"key":"time","value":"12:00","disabled":true,"description":"OPTIONAL. HH:mm, only used when wholeDay is false. Default 12:00"},{"key":"wholeDay","value":"true","disabled":true,"description":"OPTIONAL. true (default) = the whole day"}]},"auth":{"type":"noauth"},"description":"A timetable, no prices. All flights of the day by default (`wholeDay` true); `wholeDay=false` returns only a window around `time`. Dates in the past or more than 364 days ahead are rejected; a pair with no flights is an ordinary empty answer."}},{"name":"The taxis for a trip, one way or round trip: every vehicle type with price, supplier, duration and cancellation rule. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/taxi/search","host":["{{baseUrl}}"],"path":["taxi","search"],"variable":[],"query":[{"key":"pickUpPlaceId","value":"ChIJR0lA1VBmwokR8BGfSBOyT-w","disabled":false,"description":"REQUIRED. `googlePlaceId` of GET /taxi/autocomplete (or `placeId` of GET /taxi/airports)"},{"key":"dropOffPlaceId","value":"ChIJq38lzVVYwokRDhgb0tE_sC0","disabled":false,"description":"REQUIRED. Same kind of id, a different place"},{"key":"pickUpDate","value":"2026-11-01","disabled":false,"description":"REQUIRED. YYYY-MM-DD (local date at the pick-up place)"},{"key":"pickUpTime","value":"10:00","disabled":true,"description":"OPTIONAL. HH:mm local time. Default 10:00"},{"key":"returnDate","value":"","disabled":true,"description":"OPTIONAL. Give it for a ROUND TRIP. YYYY-MM-DD"},{"key":"returnTime","value":"10:00","disabled":true,"description":"OPTIONAL. HH:mm local time. Default 10:00"},{"key":"passengers","value":"2","disabled":true,"description":"OPTIONAL. Whole number 1 to 50, default 2 (the real limit is the biggest vehicle on the route)"},{"key":"currencyCode","value":"USD","disabled":true,"description":"OPTIONAL. One of 23 codes (AUD CAD CHF CNY CZK DKK EUR GBP HKD HUF IDR ILS JPY NOK NZD PLN RON SEK SGD THB TWD USD ZAR). Default USD"}]},"auth":{"type":"noauth"},"description":"REQUIRED: `pickUpPlaceId`, `dropOffPlaceId`, `pickUpDate`. EVERYTHING ELSE IS OPTIONAL. Give `returnDate` for a ROUND TRIP; leave it out for one way.\n\n**Limits (measured):** the pick-up must be 2 to 6 hours ahead (depends on the route) and at most 364 days ahead; the return at least 60 minutes after the pick-up; passengers 1 and up to the biggest vehicle on the route (6 to 35 seats seen). Times are the local time at the pick-up place. Only 23 currencies are priced as asked (any other would come back in GBP, so it is rejected).\n\n`data.outbound[]` is the way there; `data.return[]` the way back (round trip only); `data.totals[]` the whole-trip price per vehicle type (outbound + return). `supplier.id` + `supplier.locationId` go to GET /taxi/supplier. Nothing is booked or charged."}},{"name":"Legal and contact details of the taxi company behind a ride. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/taxi/supplier","host":["{{baseUrl}}"],"path":["taxi","supplier"],"variable":[],"query":[{"key":"supplierId","value":"2550","disabled":false,"description":"REQUIRED. supplier.id of GET /taxi/search"},{"key":"locationId","value":"107600","disabled":false,"description":"REQUIRED. supplier.locationId of the same ride"}]},"auth":{"type":"noauth"},"description":"Use `supplier.id` and `supplier.locationId` of a ride in GET /taxi/search; a wrong pair is a provider failure."}},{"name":"Public transport (bus, train) for the same trip, with ticket prices. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/taxi/public-transport","host":["{{baseUrl}}"],"path":["taxi","public-transport"],"variable":[],"query":[{"key":"departureLatitude","value":"51.47","disabled":false,"description":"REQUIRED. Start of the trip"},{"key":"departureLongitude","value":"-0.4543","disabled":false,"description":"REQUIRED"},{"key":"arrivalLatitude","value":"51.5154","disabled":false,"description":"REQUIRED. End of the trip"},{"key":"arrivalLongitude","value":"-0.1755","disabled":false,"description":"REQUIRED"},{"key":"date","value":"2026-11-01","disabled":false,"description":"REQUIRED. YYYY-MM-DD, not in the past, at most 364 days ahead"}]},"auth":{"type":"noauth"},"description":"Only where public transport is sold (Heathrow to central London yes, JFK to Times Square no: an empty answer). `duration` is in seconds; tickets are in the local currency."}},{"name":"Uber fares for the same trip, with a link to book in Uber. A real provider call: uses quota","request":{"method":"GET","header":[{"key":"X-RapidAPI-Key","value":"{{rapidApiKey}}"},{"key":"X-RapidAPI-Host","value":"{{rapidApiHost}}"}],"url":{"raw":"{{baseUrl}}/taxi/uber-rates","host":["{{baseUrl}}"],"path":["taxi","uber-rates"],"variable":[],"query":[{"key":"pickUpLatitude","value":"40.6413","disabled":false,"description":"REQUIRED"},{"key":"pickUpLongitude","value":"-73.7781","disabled":false,"description":"REQUIRED"},{"key":"dropOffLatitude","value":"40.758","disabled":false,"description":"REQUIRED"},{"key":"dropOffLongitude","value":"-73.9855","disabled":false,"description":"REQUIRED"},{"key":"pickUpDate","value":"2026-11-01","disabled":false,"description":"REQUIRED. YYYY-MM-DD, not in the past"},{"key":"pickUpTime","value":"10:00","disabled":true,"description":"OPTIONAL. HH:mm. Default 10:00"},{"key":"passengers","value":"","disabled":true,"description":"OPTIONAL. 1 to 6"},{"key":"pickUpName","value":"","disabled":true,"description":"OPTIONAL. Label of the pick-up in the Uber link"},{"key":"dropOffName","value":"","disabled":true,"description":"OPTIONAL. Label of the drop-off in the Uber link"}]},"auth":{"type":"noauth"},"description":"Fares are in the local currency of the pick-up country (cannot be chosen). `passengers` 5 or 6 leaves only the six-seaters; 7 and more has no Uber product, so 1 to 6 is accepted."}}]}],"variable":[{"key":"baseUrl","value":"https://booking-com30.p.rapidapi.com/api/v1"},{"key":"rapidApiKey","value":""},{"key":"rapidApiHost","value":"booking-com30.p.rapidapi.com"}]}