Travel & Lodging

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.

Booking.com engineLive JSON4 steps1,000 free credits

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.

Use case

Travel search, lodging price monitoring, itinerary tools and destination research.

Step by step

Call the live endpoint

  1. 1

    Resolve destination and dates

    Use a destination id or supported destination parameter plus check-in and check-out dates.

  2. 2

    Call booking/v1/hotels/search

    Send the JSON request through ReefAPI and parse data.items.

  3. 3

    Store hotel ids

    Keep hotel_id, page_name, URL, location and visible price or availability fields when present.

  4. 4

    Expand selected hotels

    Use hotel detail actions for richer fields after search identifies candidate properties.

Code

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"}'
MCP one-liner
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"}.
Real response

Captured output from ReefAPI

Captured on UTC. The response below is the committed snapshot, including the API envelope and metadata.

Captured request
{
  "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"
  }
}
Captured response
{
  "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": []
    }
  }
}
Manual way

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.

ReefAPI way

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.

FAQ

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.