Inventory

List accommodation properties

Changed on

Returns the Booking.com property inventory as a newline-delimited JSON (NDJSON) stream, one property object per line. Each record carries static content such as names, addresses, categories, images, ratings, policies, and regulatory identifiers such as license numbers (the compliance group). API consumers use it to build and refresh a local copy of the inventory.

Parameters

  • languages (required): a single BCP-47 language code (e.g. fr, en-gb). Localizable fields such as name, description, location.city, and location.province are returned in this language.
  • updated_since (optional): an ISO-8601 UTC timestamp with millisecond precision (e.g. 2026-04-20T00:00:00.000Z). When set, only properties changed at or after this instant are returned (delta sync). When omitted, the full inventory is returned.
  • image_size (optional): the size token applied to every image URL. One of thumbnail, thumbnail_large, standard, or large. Defaults to standard.

Compression

A full sync is several gigabytes of NDJSON. Send an Accept-Encoding header to receive the stream compressed; the response then carries the matching Content-Encoding header and the body is one continuous zstd frame or gzip member, flushed as the stream progresses:

  • zstd (recommended): typically 6–8× smaller, and the fastest way to receive a full sync.
  • gzip: about 5× smaller, decoded by virtually every HTTP client and library.

When both are accepted with the same weight, zstd is used. Many HTTP clients send Accept-Encoding: gzip by default and decompress transparently. A response without a Content-Encoding header is plain NDJSON. The response protocol below applies to the decompressed stream.

Response protocol

Each line is one complete JSON object. A data row carries the property fields:

{"property_id":1377102,"name":"Grand Central Hotel","description":"Featuring air-conditioned accommodation with a balcony, the property offers a private pool.","category":"hotel","number_of_rooms":1,"images":[{"url":"https://q-xx.bstatic.com/xdata/images/hotel/max500/681992303.jpg?k=<sig>&o=","type":"main"}],"language":"en-gb","updated_at":"2026-07-06T14:21:56.000Z","location":{"country":"nl","latitude":52.3702,"longitude":4.8952,"street_address":"Prins Hendrikkade 59","city":"Amsterdam","postal_code":"1012 AD","province":"North Holland"},"ratings":{"star_rating":5.0,"is_star_rating_estimated":false,"guest_review_score":8.6,"guest_review_count":1243},"policies":{"check_in_start_time":"15:00","check_in_end_time":"23:00","check_out_start_time":"07:00","check_out_end_time":"11:00","is_instant_bookable":true},"links":{"booking_url":"https://www.booking.com/hotel/nl/grand-central.html?aid=343802","booking_deep_link_url":"https://www.booking.com/hotel/nl/grand-central.html?aid=343802&utm_medium=deeplink"},"status":{"property_status":"open","last_active_date":"2026-07-07"}}

Properties with official license numbers also carry a compliance object (see the Compliance schema); it is omitted for all other properties.

The final line is a completion marker:

{"_control":"complete","data_row_count":4055137}

Every line may carry a _control field that marks the line type:

  • Data rows use "_control":"data". This is the default and is omitted to reduce response size, so a line with no _control field is a data row.
  • The final line is the completion marker, "_control":"complete". It reports data_row_count, the number of data rows emitted.

To confirm the stream is complete, match data_row_count against the number of data rows received. If the completion marker is absent, the stream was truncated and the response must be discarded.

Preview version: temporary constraints (subject to change without notice)

This endpoint is a preview version. Only one language per request is currently supported; requesting more than one returns HTTP 400. An API consumer that needs several languages sends one request per language, in parallel.

Errors

400 Bad Request with a JSON error body is returned for invalid input: more than one languages entry, an unsupported image_size, or a malformed updated_since timestamp.

post/inventory/properties

Request

Headers

Accept-Encodingstring
Example:zstd

Codings the client can decode, e.g. zstd or gzip. See Compression.

Request body

languagesstring[]

Exactly one BCP-47 language code. Localizable fields are returned in this language. More than one language is not currently supported and returns HTTP 400.

updated_sincestring

Optional ISO-8601 UTC timestamp with millisecond precision. When set, only properties changed at or after this instant are returned (delta sync); when omitted, the full inventory is returned.

image_size'thumbnail' | 'thumbnail_large' | 'standard' | 'large'

Size token applied to every image URL:

  • thumbnail: 100×100, square, center-cropped
  • thumbnail_large: 300×300, square, center-cropped
  • standard: up to 500px on the longest side (default)
  • large: up to 1280px on the longest side

Example request

{
  "languages": [
    "en-gb"
  ],
  "updated_since": "2026-04-20T00:00:00.000Z"
}

Response

NDJSON stream. Each line is a property stream record.

Changes