How do you search Booking.com hotels via API?
To search Booking.com hotels via API, call ReefAPI's hotels/search action with destination and date parameters; it returns hotel result cards, availability context and metadata as JSON.
This guide demonstrates the real Booking.com API engine with a captured response from . The example is only published because the engine passed the SEO snapshot gate.
Travel search, lodging price monitoring, itinerary tools and destination research.
Call the live endpoint
- 1
Resolve destination and dates
Use a destination id or supported destination parameter plus check-in and check-out dates.
- 2
Call booking/v1/hotels/search
Send the JSON request through ReefAPI and parse data.items.
- 3
Store hotel ids
Keep hotel_id, page_name, URL, location and visible price or availability fields when present.
- 4
Expand selected hotels
Use hotel detail actions for richer fields after search identifies candidate properties.
Copy the request
These snippets use the captured request params for booking/v1/hotels/search.
curl -X POST https://api.reefapi.com/booking/v1/hotels/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"dest_id":"-755070","dest_type":"city","checkin":"2026-08-01","checkout":"2026-08-03"}'import requests
r = requests.post(
"https://api.reefapi.com/booking/v1/hotels/search",
headers={"x-api-key": REEF_KEY},
json={
"dest_id": "-755070",
"dest_type": "city",
"checkin": "2026-08-01",
"checkout": "2026-08-03"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/booking/v1/hotels/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"dest_id": "-755070",
"dest_type": "city",
"checkin": "2026-08-01",
"checkout": "2026-08-03"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.booking.hotels/search with {"dest_id":"-755070","dest_type":"city","checkin":"2026-08-01","checkout":"2026-08-03"}.Captured output from ReefAPI
Captured on UTC. The response below is the committed snapshot, including the API envelope and metadata.
{
"method": "POST",
"url": "https://api.reefapi.com/booking/v1/hotels/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"dest_id": "-755070",
"dest_type": "city",
"checkin": "2026-08-01",
"checkout": "2026-08-03"
}
}{
"ok": true,
"meta": {
"api": "booking",
"endpoint": "hotels/search",
"mode": "live",
"latency_ms": 1584.7,
"record_count": 26,
"bytes": 390982,
"cache_hit": false,
"completeness_pct": 100,
"proxy": "http://dc.ipnproxy.com:10080",
"destination": {
"dest_id": "-755070",
"dest_type": "city",
"value": "Istanbul, Marmara Region, Turkey"
},
"completeness_basis": {
"items": 26,
"field_slots": 183,
"field_slots_filled": 183,
"pagination_total_present": true
},
"attempts": 1
},
"data": {
"items": [
{
"hotel_id": 236203,
"page_name": "raymond",
"name": "[redacted-name]",
"description": null,
"url": "https://www.booking.com/hotel/tr/raymond.html",
"location": {
"address": "Ebusuud Cad. No:22 Sirkeci",
"city": "Istanbul",
"country_code": "tr",
"latitude": null,
"longitude": null,
"display": "Fatih, Istanbul",
"distance": "0.5 km from downtown",
"geo_distance_meters": null
},
"price": {
"text": "Total",
"amount": "€ 112.74",
"amount_rounded": "€ 113",
"amount_unformatted": 112.7401,
"currency": "EUR"
},
"price_before_discount": {
"text": "€ 135 × 2 nights",
"amount": "€ 270",
"amount_rounded": "€ 270",
"amount_unformatted": 270,
"currency": "EUR"
},
"charges_info": "Includes taxes and fees",
"review_score": {
"score": 7.9,
"review_count": 2013,
"label": "Good",
"secondary_score": 9.4
},
"star_rating": 4,
"accommodation_type_id": 204,
"photo": "/xdata/images/hotel/square600/[redacted-phone].jpg?k=f9c2dfc4bfd293053e08e92310edbef22501749cb1715ac90d6cb20dbec99eea&o=",
"room_configurations": {
"commonConfiguration": {
"localizedArea": "[trimmed-depth]",
"__typename": "[trimmed-depth]",
"name": "[trimmed-depth]",
"nbKitchens": "[trimmed-depth]",
"unitId": "[trimmed-depth]",
"unitTypeNames": "[trimmed-depth]",
"nbBedrooms": "[trimmed-depth]",
"nbLivingrooms": "[trimmed-depth]",
"nbAllBeds": "[trimmed-depth]",
"bedConfigurations": "[trimmed-depth]",
"nbUnits": "[trimmed-depth]",
"nbBathrooms": "[trimmed-depth]"
},
"unitConfigurations": [
"[trimmed-depth]"
],
"__typename": "MatchingUnitConfigurations"
},
"room_blocks": [
{
"room_id": "[trimmed-depth]",
"occupancy": "[trimmed-depth]",
"policy_group_id": "[trimmed-depth]",
"package_id": "[trimmed-depth]",
"meal_plan_id": "[trimmed-depth]",
"final_price": "[trimmed-depth]",
"original_price": "[trimmed-depth]",
"free_cancellation_until": "[trimmed-depth]",
"cancellation_type": "[trimmed-depth]",
"only_left_message": "[trimmed-depth]",
"available_count_hint": "[trimmed-depth]",
"meal_plan": "[trimmed-depth]",
"breakfast_included": "[trimmed-depth]",
"taxes_and_charges": "[trimmed-depth]"
}
],
"policies": {
"__typename": "Policies",
"showFreeCancellation": false,
"showNoPrepayment": false,
"enableJapaneseUsersSpecialCase": null
},
"badges": []
},
{
"hotel_id": 13919021,
"page_name": "aliee-istanbul",
"name": "[redacted-name]",
"description": null,
"url": "https://www.booking.com/hotel/tr/aliee-istanbul.html",
"location": {
"address": "Camiikebir Mahallesi Taskizak Tersanesi Caddesi No 11:19 Beyoglu Istanbul",
"city": "Istanbul",
"country_code": "tr",
"latitude": null,
"longitude": null,
"display": "Beyoglu, Istanbul",
"distance": "3.1 km from downtown",
"geo_distance_meters": null
},
"price": {
"text": "Total",
"amount": "€ 1,305",
"amount_rounded": "€ 1,305",
"amount_unformatted": 1305,
"currency": "EUR"
},
"price_before_discount": {
"text": null,
"amount": "",
"amount_rounded": "",
"amount_unformatted": 0,
"currency": ""
},
"charges_info": "Includes taxes and fees",
"review_score": {
"score": 9.8,
"review_count": 88,
"label": "Exceptional",
"secondary_score": 9.7
},
"star_rating": 5,
"accommodation_type_id": 204,
"photo": "/xdata/images/hotel/square600/[redacted-phone].jpg?k=2784dbdfc901b2e354c4abb38d6f77651af7bfe5bc36889b0aac851c94229c35&o=",
"room_configurations": {
"commonConfiguration": {
"nbUnits": "[trimmed-depth]",
"nbBathrooms": "[trimmed-depth]",
"nbAllBeds": "[trimmed-depth]",
"bedConfigurations": "[trimmed-depth]",
"__typename": "[trimmed-depth]",
"nbKitchens": "[trimmed-depth]",
"name": "[trimmed-depth]",
"unitId": "[trimmed-depth]",
"nbBedrooms": "[trimmed-depth]",
"unitTypeNames": "[trimmed-depth]",
"nbLivingrooms": "[trimmed-depth]",
"localizedArea": "[trimmed-depth]"
},
"unitConfigurations": [
"[trimmed-depth]"
],
"__typename": "MatchingUnitConfigurations"
},
"room_blocks": [
{
"room_id": "[trimmed-depth]",
"occupancy": "[trimmed-depth]",
"policy_group_id": "[trimmed-depth]",
"package_id": "[trimmed-depth]",
"meal_plan_id": "[trimmed-depth]",
"final_price": "[trimmed-depth]",
"original_price": "[trimmed-depth]",
"free_cancellation_until": "[trimmed-depth]",
"cancellation_type": "[trimmed-depth]",
"only_left_message": "[trimmed-depth]",
"available_count_hint": "[trimmed-depth]",
"meal_plan": "[trimmed-depth]",
"breakfast_included": "[trimmed-depth]",
"taxes_and_charges": "[trimmed-depth]"
}
],
"policies": {
"__typename": "Policies",
"showNoPrepayment": false,
"showFreeCancellation": false,
"enableJapaneseUsersSpecialCase": null
},
"badges": []
},
{
"hotel_id": 3230942,
"page_name": "queens-land",
"name": "[redacted-name]",
"description": null,
"url": "https://www.booking.com/hotel/tr/queens-land.html",
"location": {
"address": "Hobyar Mah.Cemal Nadir Sok no:7",
"city": "Fatih",
"country_code": "tr",
"latitude": null,
"longitude": null,
"display": "Fatih, Istanbul",
"distance": "500 m from downtown",
"geo_distance_meters": null
},
"price": {
"text": "Total",
"amount": "€ 82.51",
"amount_rounded": "€ 83",
"amount_unformatted": 82.5100000000001,
"currency": "EUR"
},
"price_before_discount": {
"text": "€ 117 × 2 nights",
"amount": "€ 234",
"amount_rounded": "€ 234",
"amount_unformatted": 234,
"currency": "EUR"
},
"charges_info": "Includes taxes and fees",
"review_score": {
"score": 8.4,
"review_count": 928,
"label": "Very Good",
"secondary_score": 9.4
},
"star_rating": null,
"accommodation_type_id": 204,
"photo": "/xdata/images/hotel/square600/[redacted-phone].jpg?k=fca8e5570b279d4c430c050420a62dd73dedda3629c31b62706709bbf0adeacd&o=",
"room_configurations": {
"unitConfigurations": [
"[trimmed-depth]"
],
"__typename": "MatchingUnitConfigurations",
"commonConfiguration": {
"unitId": "[trimmed-depth]",
"unitTypeNames": "[trimmed-depth]",
"nbBedrooms": "[trimmed-depth]",
"nbLivingrooms": "[trimmed-depth]",
"__typename": "[trimmed-depth]",
"nbKitchens": "[trimmed-depth]",
"name": "[trimmed-depth]",
"localizedArea": "[trimmed-depth]",
"nbUnits": "[trimmed-depth]",
"nbBathrooms": "[trimmed-depth]",
"bedConfigurations": "[trimmed-depth]",
"nbAllBeds": "[trimmed-depth]"
}
},
"room_blocks": [
{
"room_id": "[trimmed-depth]",
"occupancy": "[trimmed-depth]",
"policy_group_id": "[trimmed-depth]",
"package_id": "[trimmed-depth]",
"meal_plan_id": "[trimmed-depth]",
"final_price": "[trimmed-depth]",
"original_price": "[trimmed-depth]",
"free_cancellation_until": "[trimmed-depth]",
"cancellation_type": "[trimmed-depth]",
"only_left_message": "[trimmed-depth]",
"available_count_hint": "[trimmed-depth]",
"meal_plan": "[trimmed-depth]",
"breakfast_included": "[trimmed-depth]",
"taxes_and_charges": "[trimmed-depth]"
}
],
"policies": {
"showNoPrepayment": false,
"showFreeCancellation": false,
"enableJapaneseUsersSpecialCase": null,
"__typename": "Policies"
},
"badges": []
}
],
"count": 26,
"pagination": {
"per_page": 25,
"total": 3549,
"offset": 0,
"page": 1,
"has_more": true,
"next_page": 2
},
"applied": {
"sort_by": "top_picks",
"filters": []
}
}
}Why this is hard manually
Hotel search is dynamic because prices and availability depend on destination identifiers, dates, occupancy, currency, locale and inventory changes. Manual scraping also has to preserve hotel ids and normalize room-card data.
A product workflow usually needs a stable search response first, then optional hotel detail calls for selected properties. If the first search step is flaky, price calendars and itinerary tools drift quickly.
Why ReefAPI solves it
The snapshot for this guide searches Istanbul lodging dates and returns a real Booking.com response with hotel ids, names, URLs, locations and metadata. ReefAPI handles the request and exposes the result in the standard JSON envelope.
Use this when building lodging comparisons, destination dashboards or travel agents that need fresh hotel candidates from a single request.
Questions developers ask
Does the API use live dates?
Yes. The request includes check-in and check-out dates, and the page shows the captured response metadata.
Can I search by city name?
The Booking docs show the current supported destination parameters; this snapshot uses destination id fields.
Why are some hotel names redacted?
The snapshot pipeline redacts selected fields for safety while preserving the actual response shape.
Can this power a travel app?
Yes, as long as your app handles freshness, availability changes and your own legal/commercial obligations.