Skip to content
Last updated

Historical Reservations API

Preview reference

This reference describes API version 1.0. Contact Connectivity Support to confirm availability and arrange access and testing before integrating. Publication of this reference does not enable access for your provider account or property.

For revenue management only

This API is for use in a revenue management system (RMS). It is not a reservation delivery or reservation management API. Historical retrieval does not acknowledge reservation messages. Continue to use the Reservations API for reservation delivery and acknowledgement.

Use the Historical Reservations API to retrieve reservation and price details for a property, for use in a revenue management system (RMS). Select reservations by check-in date and, optionally, by room reservation status.

The OpenAPI reference describes the request parameters, response fields, and errors. You can download the specification from the reference page to use with your API tooling.

Before you start

Confirm that your provider account has access to the Historical Reservations API and permission to retrieve reservation history for the property. Authentication alone does not grant access to a property's history. Contact Connectivity Support to confirm the access requirements for your integration.

Use a machine account and obtain an access token as described in token-based authentication. Use a test property that your account is authorized to access when testing your integration.

Rate limit

The production request quota is 250 requests per provider and property in a rolling one-day window. It does not reset at midnight. Requests admitted after authentication consume quota even if a later validation or upstream request fails. Avoid repeated requests for the same interval and immediate retries after a 429 response.

Retrieve historical reservations

GET https://supply-xml.booking.com/revenue-management-api/properties/{property_id}/historical-reservations

Send the following headers:

HeaderValue
AuthorizationBearer {access_token}
Acceptapplication/json
Accept-Version1.0

This reference describes API version 1.0. Specify it explicitly in the Accept-Version header.

Provide a positive property_id no greater than 2147483647, and both check_in_start and check_in_end query parameters. The request has no body.

Choose the check-in date interval

The date filters apply to reservation check-in dates. Both boundaries are inclusive. Reservation creation and check-out dates do not restrict the range. A reservation created before the requested period can be returned.

Use date-only values in YYYY-MM-DD format, such as 2026-08-01. Timestamps and timezone suffixes are not accepted. Both parameters are required. The API does not apply a default interval.

The interval must meet all of these conditions:

  • The start is earlier than or equal to the end.
  • The start is no earlier than today in UTC minus 24 calendar months. When today is 29 February, the 24-month-back date adjusts to 28 February.
  • The end is no later than today in UTC. Today is allowed.

The start and end can be the same date to retrieve one check-in day. An ordered range ending after today in UTC returns HTTP 400 with the message Check-in dates must not be in the future (UTC).

The eligibility window uses calendar months. Choose dates within the current window when running examples; a fixed historical example will eventually fall outside that window.

Filter by status

Omit status to include all supported room reservation statuses: OK, CANCELLED, and NO_SHOW. An empty status value returns HTTP 400.

The status filter applies to room reservations. A property reservation is included only when at least one of its room reservations matches. Room reservations that do not match are omitted from that property's reservation group.

Example request

Set PROPERTY_ID to an authorized test property and ACCESS_TOKEN to your machine account's access token. Set CHECK_IN_START and CHECK_IN_END to valid YYYY-MM-DD dates in the interval you want to retrieve. Then run:

curl --get \
  "https://supply-xml.booking.com/revenue-management-api/properties/${PROPERTY_ID}/historical-reservations" \
  --header "Authorization: Bearer ${ACCESS_TOKEN}" \
  --header 'Accept: application/json' \
  --header 'Accept-Version: 1.0' \
  --data-urlencode "check_in_start=${CHECK_IN_START}" \
  --data-urlencode "check_in_end=${CHECK_IN_END}"

For a single status, add --data-urlencode 'status=CANCELLED'. See the OpenAPI reference for the parameter format when selecting multiple statuses.

Understand the response

A successful response contains data with the requested property_id and a property_reservations array. Each property reservation contains its matching room_reservations. An empty property_reservations array means no reservations match.

The response uses snake_case field names. Use the field definitions and synthetic response examples in the OpenAPI reference when implementing your parser.

Example response

The following synthetic example matches the OpenAPI confirmedAndCancelled example. It is not live property data.

{
  "data": {
    "property_id": 1234567,
    "currency": "EUR",
    "property_reservations": [
      {
        "property_reservation_id": "9876543210",
        "room_reservations": [
          {
            "room_id": "123456701",
            "created_at": "2026-01-15T10:00:00Z",
            "checkin": "2026-02-01",
            "checkout": "2026-02-03",
            "status": "OK",
            "occupancy": {
              "adults": 2,
              "children": 0
            },
            "guest": {
              "total_price": "123.45",
              "price_components": [
                {
                  "description": "room price",
                  "type": "BASE_PRICE",
                  "price": "123.45",
                  "included": true
                },
                {
                  "description": "city tax",
                  "type": "TAX",
                  "price": "10.00",
                  "included": false
                }
              ]
            },
            "hotel": {
              "total_price": "100.00",
              "price_components": [
                {
                  "description": "room price",
                  "type": "BASE_PRICE",
                  "price": "100.00",
                  "included": true
                },
                {
                  "description": "service fee",
                  "type": "FEE",
                  "price": "5.00",
                  "included": false
                }
              ]
            }
          }
        ]
      },
      {
        "property_reservation_id": "9876543211",
        "room_reservations": [
          {
            "room_id": "123456702",
            "created_at": "2026-01-16T10:00:00Z",
            "cancelled_at": "2026-01-17T11:00:00Z",
            "checkin": "2026-02-04",
            "checkout": "2026-02-05",
            "status": "CANCELLED",
            "hotel": {
              "total_price": "80.00",
              "price_components": []
            }
          }
        ]
      }
    ]
  },
  "meta": {
    "ruid": "synthetic-request-id"
  }
}

Response fields

Field descriptions below match the OpenAPI schemas. Optional fields are omitted when their values were not recorded or are unavailable for this response.

FieldDescription
dataReservation data for the requested property. Optional values are omitted when unavailable, rather than returned as null.
data.property_idThe Booking.com property ID requested in the path.
data.currencyCurrency code for all monetary amounts in the response, for example EUR. The field is absent when unavailable.
data.property_reservationsProperty reservations with matching room reservations. Empty when no eligible room reservations match the check-in range and status filter.
property_reservation_idBooking.com property reservation identifier.
room_reservationsMatching room reservations. Rooms outside the check-in date range or excluded by the status filter are omitted. The entire property reservation is omitted if no rooms match.
room_idBooking.com room product identifier. This identifies the booked room type, not the specific reservation.
created_atReservation creation timestamp in UTC. This field reflects when the reservation was created and is not a query filter.
cancelled_atCancellation timestamp in UTC when available. Omitted when unavailable.
checkinCheck-in date.
checkoutCheck-out date.
statusRoom reservation status: OK for confirmed reservations, CANCELLED for cancellations, and NO_SHOW for no-shows.
occupancyGuest counts when available. Each count is independently optional. Counts that were not recorded are omitted. The object is omitted when neither count is available.
occupancy.adultsNumber of adults, when known.
occupancy.childrenNumber of children, when known. An explicit zero means no children.
guestGuest price perspective. total_price is the reservation total value. included indicates whether a component is part of that total. This object and its price components are omitted for net-rate reservations.
hotelProperty price perspective. total_price is the total net room price; included indicates whether a component is included in the room rate. This required object can differ from the guest price perspective.
total_priceTotal amount for this perspective, as a major-unit decimal string in data.currency. The supplied total is authoritative and need not equal the sum of returned components. See guest and hotel for the meaning of each total.
price_componentsAvailable price components. The array can be empty.
descriptionHuman-readable component description.
typeComponent category: FEE, BASE_PRICE, or TAX.
priceComponent amount as a major-unit decimal string in data.currency.
includedInclusion indicator for this price perspective. See guest and hotel for its meaning.
metaMetadata for support and request tracing.
ruidRequest unique identifier. Include it when contacting Connectivity support.

Interpret price details

Monetary amounts are decimal strings in the major unit of the response currency. The API limits fractional digits by currency:

Maximum fractional digitsCurrency codes
0AFA, BIF, BYR, CLP, COP, DJF, ECS, GNF, HUF, IDR, ISK, JPY, KMF, KRW, LAK, MGA, MZM, PYG, RWF, TJR, TMM, TWD, UGX, VND, VUV, XAF, XOF, XPF
3BHD, IQD, JOD, KWD, LYD, OMR, TND
2All other currency codes

These limits include historical currency codes and follow the Connectivity currency rules. They can differ from ISO currency fraction digits.

When an amount has more fractional digits than the currency limit, the API rounds it to the nearest value at that limit. An exact halfway value rounds to the value whose last retained digit is even (HALF_EVEN). Amounts already within the limit keep their fractional digits. The API does not add zero-padding. Values use plain decimal notation, without exponent notation or locale separators.

The following synthetic examples illustrate the rule:

CurrencyAmount before roundingReturned decimal string
EUR2.665"2.66"
EUR2.675"2.68"
EUR12.3"12.3"
JPY1526.99"1527"
IDR-12.9"-13"
BHD1.2345"1.234"

Preserve the returned decimal value when calculating or storing prices.

Some fields are omitted when their values are unavailable. An omitted amount does not mean zero. Read the currency from data.currency. Amounts are decimal strings and do not embed a currency identifier.

Hotel and guest price views can differ. Apply the documented meaning of each price field. The guest view may be absent for net-rate reservations. Treat it independently from hotel.

The supplied total_price is the authoritative figure for each perspective. Totals and components are rounded independently, so their sum may differ. Components have inclusion flags, and some components are absent from the response.

Response size and pagination

This version does not expose pagination parameters or continuation tokens.

If a request for a period fails or times out while retrieving reservations, try again with a smaller check-in date interval. Use consecutive, non-overlapping whole-day ranges: [A, B], then [B + 1 day, C]. Keep all matching room reservations from each response.

Troubleshooting

Check the HTTP status and returned error details before retrying. The OpenAPI reference lists the response schemas and supported error codes.

Gateway errors can be JSON or plain text. The Content-Type header indicates which format to parse.

ResponseWhat to check
400Required query parameters, YYYY-MM-DD date format, interval bounds, property ID, and status values.
401Authentication credentials and token expiry. Obtain a valid token before retrying.
403Whether your provider is authorized to retrieve history for the requested property.
429Request quota. Avoid immediate repeated retries.
500 or 502A service or upstream failure. If the request failed while retrieving reservations, try a smaller check-in date interval. If the issue persists, contact Connectivity Support.
503The gateway or an upstream service is temporarily unavailable. Retry with backoff; contact Connectivity Support if the issue persists.
504The gateway or an upstream service timed out. Try a smaller check-in date interval and avoid repeatedly retrying the full range. No fixed interval guarantees completion.

When contacting support, include the request time in UTC, endpoint, HTTP status, error code, and request identifier when present. Do not include your access token or client secret.