Search hotels
This call returns a searchToken. It does not return hotels. A London weekend usually answers in 8–16 seconds while the search settles.
Country and currency
Send country to pick the market. Prices come back in that country’s native currency. GB returns GBP, DE returns EUR, US returns USD. Omit country and the market is the US, so prices are USD.
There is no currency field on this call. Sending one is rejected. You cannot ask for US prices in GBP, or UK prices in USD - the country decides the currency.
Place, dates, guests
Send location, checkin, and checkout. adults defaults to 2 and rooms defaults to 1. Add childAges when children are staying, one age per child.
location is an id, not a name. Look it up with Search locations and send locationId. A stay longer than 30 nights is rejected.
When there is nothing to page
If there are no hotels, the call returns 404 NO_RESULTS and no token. A date further than a year out, or an id that is not a place, is the usual cause.
Why a stay search is not a Booking.com reservation: Booking.com API. The captured London example on this page is the response that post points at.
Prices from one booking site
Send providers to keep only the prices one or more booking sites sell. The "Only Booking.com" example on this page is the same London weekend with providers: ["Booking.com"]. Page 1 came back with 27 hotels, 1,072 in total, and every price was from Booking.com.
The names to send come from the data, not from a fixed list. Run a search without providers, read availableFilters.bookingSites on List results, and send the id of each site you want. Up to 10. Each entry also has count, the number of hotels that site sells in this search.
Booking sites that came back in all 10 cities we tested in November 2026: Booking.com, Expedia, Hotels.com, Priceline, Agoda.com, Trip.com, Super.com, HomeToGo, and Preferred Hotels. Smaller sites such as Homestay.com, Traveluro, Pricetravel, and Prestigia appear in some cities. Coverage changes by place and date, so read availableFilters.bookingSites instead of hard-coding the list. Every airline, booking site, and rental company we have seen is on Providers. Six sites compared on one London weekend, with code: hotel price API.
To compare two sites, send both, for example ["Booking.com", "Expedia"]. bestOption on each hotel is then the cheaper of the two, and Retrieve hotel details lists only those sites, each with its price and booking URL. availableFilters.bookingSites still lists every site in the search, so you can switch sites with a new search.
Parameters
The body of the request.
A locationId from Search locations. A name is rejected. A named hotel’s locationId is its city; use hotelId only for reviews.
Check-in date, YYYY-MM-DD. Cannot be in the past. Searches are usually published under a year ahead.
Check-out date, YYYY-MM-DD. Must be at least one night after check-in, and at most 30 nights later.
Adults, 1–16. Defaults to 2.
Rooms, 1–8. Defaults to 1.
Age of each child, 0–17. At most 8. Omit it, or send [], when there are no children.
Keep hotels with at least this many stars. 2 through 5. Unrated properties are left out.
Keep hotels with at least this guest score. 6, 7, 8, or 9.
Highest before-tax stay price, as a whole number in the country’s native currency. Minimum is 1.
True to keep stays that can be cancelled without a fee. Defaults to false.
Amenity ids from availableFilters.amenities on a previous results page, for example pool. Up to 10. Letters, digits, _, and -.
Keep only prices from these booking sites, for example ["Booking.com"]. Use the id values from availableFilters.bookingSites on a previous results page. Up to 10. Omit it to allow every seller.
How to order the results. Defaults to bestValue.
Possible values
bestValueDefault. Recommended order. `sortOrder` does not change it.
priceBy the before-tax stay price. `asc` is cheapest first, `desc` is dearest first.
ratingHighest guest score first. `sortOrder` does not change it.
starsBy star class. `asc` is lowest first, `desc` is highest first.
distanceNearest to the reference point first. `sortOrder` does not change it.
Direction for price and stars. Defaults to asc. Other sorts ignore it.
Possible values
ascDefault. Cheapest price, or fewest stars, first.
descDearest price, or most stars, first.
ISO 3166-1 alpha-2 market. Prices come back in that country’s native currency - GB returns GBP, DE returns EUR, US returns USD. There is no separate currency field; sending currency is rejected. Omit country for US. Any other value is rejected.
Possible values59
USPrices in USD.GBPrices in GBP.DEPrices in EUR.FRPrices in EUR.ESPrices in EUR.ITPrices in EUR.NLPrices in EUR.BEPrices in EUR.ATPrices in EUR.CHPrices in CHF.IEPrices in EUR.PTPrices in EUR.GRPrices in EUR.PLPrices in PLN.CZPrices in CZK.ROPrices in EUR.SEPrices in SEK.NOPrices in NOK.DKPrices in DKK.FIPrices in EUR.TRPrices in TRY.AEPrices in AED.SAPrices in SAR.ILPrices in ILS.INPrices in INR.JPPrices in JPY.KRPrices in KRW.HKPrices in HKD.TWPrices in TWD.SGPrices in SGD.MYPrices in MYR.THPrices in THB.IDPrices in IDR.PHPrices in PHP.VNPrices in VND.AUPrices in AUD.NZPrices in NZD.CAPrices in CAD.MXPrices in MXN.BRPrices in BRL.ARPrices in ARS.CLPrices in CLP.COPrices in COP.PEPrices in PEN.UYPrices in USD.PYPrices in USD.BOPrices in USD.ECPrices in USD.VEPrices in USD.CRPrices in USD.PAPrices in USD.GTPrices in USD.HNPrices in USD.NIPrices in USD.SVPrices in USD.DOPrices in USD.PRPrices in USD.ZAPrices in ZAR.UAPrices in UAH.Returns
A successful response, captured live.
{
"searchToken": "eyJwIjoxLCJzIjoiNjgyMmZiMzMyMzA4NDZjNGFiZWRiM2Q2OTRiM2YyNjgiLCJ2IjoxfQ",
"expiresIn": 3600
}