Skip to content
Last updated

Changelog archive

Find here a comprehensive history of all updates, improvements, and bug fixes across versions.


Each entry provides a detailed log of changes made to Demand API, including new features, enhancements, and any resolved issues, divided by endpoints and/ or travel services.

This archive serves as a valuable resource for understanding the evolution of the product over time and tracking its progress.


April 2026

This release focuses on Demand API version 3.2 and 3.2 Beta, with updates across attractions, accommodations and orders:


What’s new
    v3.2 Beta
    • Attractions
      • /attractions/constants – New endpoint to retrieve category and subcategory metadata for attractions.
    • Orders (Car rentals)
      • booker.country – Now required in car post-booking endpoints (/orders/cancel and /orders/details/cars/live) to improve pricing and policy accuracy.
      • 403 sandbox_blocked – Car order endpoints (/orders/create, /orders/cancel) now return a dedicated error in sandbox.
    v3.2
    • Accommodation
      • cancellation.schedule – Now includes the no-show stage (post check-in), ensuring the full cancellation timeline is available in /accommodations/availability, /accommodations/search and /orders/preview.

Attractions

Constants in Attractions

| 3.2 Beta | New endpoint: /attractions/constants |

A new endpoint is available to retrieve static metadata used in attractions search flows. It is designed to be cached client-side for performance optimisation.

Purpose – Supports richer discovery experiences by:

  • Providing category and subcategory identifiers.
  • Supporting category-based filtering in /attractions/search.

Use this endpoint to build dynamic search interfaces and avoid hardcoding category or location data.

Available in:


Orders for Car rentals

Booker country in car post-booking flows

| 3.2 Beta | New field: booker.country |

The booker.country field is now required in Car rental post-booking endpoints (Beta): orders/cancel and orders/details/cars/live

Purpose – Improves accuracy of:

  • Pricing calculations.
  • Policy enforcement.
  • Supplier-specific rules.

Ensure consistency between booking and post-booking flows by passing the same booker country used during checkout.


Sandbox restriction for car orders endpoints

| 3.2 Beta | Sandbox behaviour: 403 error for unsupported endpoints |

Car rental order creation and cancellation are not available in the sandbox environment.

Behaviour:

When using the sandbox environment, the following endpoints for car rentals return now a 403 error:

  • /orders/create
  • /orders/cancel

Purpose – Prevents unsupported car rental order operations in sandbox and ensures correct usage of the production environment for end-to-end testing.

Error response:

{
  "request_id": "01kjan7r7yvff5yg95gxy1cjhy",
  "errors": [
    {
      "id": "sandbox_blocked",
      "message": "The /orders/create endpoint for cars is not available in the sandbox. Use the production environment instead."
    }
  ]
}

This restriction only applies to car rental orders in sandbox. Accommodation is not affected.


Accommodation

No-show handling in cancellation timeline

| v3.2 | cancellation schedule completeness |

The cancellation schedule now includes the no-show stage (post check-in) fees in accommodations/search, /accommodations/availability, and /orders/preview responses.

Purpose – Ensures the full cancellation cost timeline is available earlier in the booking flow, without requiring a call to /orders/details.

The schedule now includes:

  • Free cancellation period.
  • Partial penalty period(s).
  • No-show stage (from check-in date, typically 100% charge).

Example:

"policies": {
  "cancellation": {
    "free_cancellation_until": "2026-01-28T22:59:59+00:00",
    "schedule": [
      {
        "from": "now",
        "price": 0.0
      },
      {
        "from": "2026-01-28T23:00:00+00:00",
        "price": 4.05
      },
      {
        "from": "checkin date",
        "price": 8.10
      }
    ],
    "type": "free_cancellation"
  }
}

Use the full schedule to present a complete and accurate cancellation policy to travellers, including no-show penalties.

The no-show stage is represented as part of the schedule, not as a separate field.


March 2026

This release focuses on Demand API version 3.2 and 3.2 Beta, with significant updates across car rentals and orders:


What´s new
  • Car rentals – v3.2 / 3.2 Beta:
    • insurance – Object added in cars/search, cars/availability and orders/preview to support optional book of third-party insurance for a vehicle.
    • cars.payment.timing – Field in orders/details to indicate when the traveller is expected to pay for the car rental order (pay_online_now, pay_at_pickup, unknown).
  • Attractions – 3.2 Beta:
    • categories – New filter in attractions/search to allow filtering results by one or more attraction category IDs (e.g. tours, museums, etc).
  • Orders – v3.2 / 3.2 Beta:
    • occupancy_mismatch – New warning object in orders/preview to indicate when requested guest allocation exceeds product maximum occupancy. Provides allocated and unallocated breakdown.
    • orders/cancel for cars – This endpoint supports now car orders cancellations.
    • New orders/modify/preview – New consultive endpoint to validate a modification before confirming the change.

Car rentals

Insurance optional add-on

| v3.2 3.2 Beta | New field: insurance |

The new insurance object under each product in the cars response provides information about any optional insurance traveller can book for the rental.

  • Only present when configured for the partner.
  • null if not available.

Available in:

Example in search response:

"insurance": {
  "name": "Full Protection",
  "id": "999",
  "price": {
    "amount": 144.70,
    "currency": "EUR"
  }
}

The insurance field differes from policies.insurance_package, which represents the supplier’s default insurance package. See the Insurance dedicated guide for more details.

Cars payment timing

| v3.2 3.2 Beta | New field: cars.payment.timing in orders/details |

Payment timing information is now available in the orders/details response under cars.payment.timing.

Purpose – It indicates when the traveller is expected to pay for the car rental order, enabling better post-booking experiences and financial workflows.

This field is only returned when extras: ["payment"] is included in the request.

Possible payment timing for cars:

  • pay_online_now – Paid at booking time.
  • pay_at_pickup – Paid locally at pickup.
  • unknown – Timing could not be determined.

Example response:

{
  "cars": {
    "payment": {
      "timing": "pay_at_pickup"
    }
  }
}

Use this field to clearly communicate payment expectations to travellers and align internal payment and reporting flows.

Default car search results increased

| v3.2 3.2 Beta | Behaviour change |

The default number of car search results returned by the /cars/search endpoint has been increased.

Purpose – Provides more comprehensive search results without requiring clients to set a custom limit.

  • Default results increased from 100 to 500.
  • Supports richer search experiences for travellers and applications.
  • May affect response size and pagination behaviour.

Partners fetching a large number of results should be aware of the increased payload and adjust pagination or processing logic if needed.


Attractions

Filter by attraction categories

| 3.2 Beta | New filter: categories in attractions/search |

The categories filter allows you to refine search results by one or more attraction category IDs.

Purpose – Enables more relevant and targeted search experiences by returning only attractions that match at least one of the selected categories.

Supported categories include:

  • Tours
  • Services and rentals.
  • Workshops and classes.
  • Museums, arts and culture.
  • Nature and outdoor.
  • Entertainment and tickets.
  • Food and drink.

If an invalid or unsupported category ID is provided, the search response will return no results.

Available in:

Use this filter to tailor results to traveller intent (for example, showing only cultural activities or outdoor experiences).


Orders

Car rental cancellations

| v3.2 3.2 Beta | Car order cancellations supported |

Apart from accommodation, orders/cancel endpoint supports now car rental cancellations.

Example request:

{
  "car": {
    "reservation": "1234567890",
    "reason": "My travel plans have changed and I no longer need this car rental.",
    "booker": {
      "country": "nl"
    }
  }
}

See Cancellation guide for more details.

Orders modify preview: new endpoint

| 3.2 Beta | New endpoint: /orders/modify/preview |

A new endpoint is available to preview order modifications before applying them.

Purpose – It allows you to validate whether a modification can be applied and understand its impact before confirming the change.

  • Helps prevent failed modification attempts by checking eligibility upfront.
  • Enables displaying updated pricing to travellers before confirming changes.
  • Supports safer UX flows for post-booking modifications.

Behaviour:

  • Returns modifiable: true if the change can be applied.
  • Returns modifiable: false with a reason when the modification is not allowed.

For accommodation date changes, returns a price object with:

  • current – price before modification.
  • new – price after modification.

This endpoint is read-only and does not apply any modifications. Use it to preview and validate changes before confirming them calling orders/modify.

Example request:

{
  "order": "6520081014",
  "modification": {
    "accommodation": {
      "reservation": "6187285715",
      "type": "dates",
      "change": {
        "checkin": "2026-04-19",
        "checkout": "2026-04-21"
      }
    }
  }
}

Example response:

{
  "data": {
    "modifiable": true,
    "price": {
      "currency": "EUR",
      "current": {
        "amount": 120.00
      },
      "new": {
        "amount": 150.00
      }
    }
  }
}

Orders preview: occupancy_mismatch

| v3.2 v3.1 | New field: occupancy_mismatch |

The new occupancy_mismatch warning object is included in the orders/preview endpoint response.

Purpose - It Indicates when the requested guest allocation exceeds the product’s maximum occupancy.

  • It helps partners display a clear warning to the traveller or decide whether to allow the booking to proceed.

Behaviour – If the allocation fits the product capacity, occupancy_mismatch is null. Otherwise, it provides a breakdown of:

  • allocated – guests that can be accommodated in the room.
  • unallocated – guests that cannot be accommodated.

Optional for partners to handle. The order can still proceed despite an occupancy_mismatch.

Example request:

{
  "occupancy_mismatch": {
    "allocated": {
      "number_of_adults": 1,
      "children": null
    },
    "unallocated": {
      "number_of_adults": 1,
      "children": null
    }
  }
}

See the Occupancy and allocation guide for more details.


February 2026

This release focuses on Demand API version 3.2 and 3.2 Beta, with significant updates across car rentals and orders:


New fields included:
  • Car rentals – v3.2 / 3.2 Beta:
    • credit_card_required - boolean added in cars/search and cars/availability to indicate whether a credit card is needed for pay_at_pickup vehicles.
    • special_offer - field in cars/search, cars/availability and cars/constants to return any promotional features included with a vehicle.
    • customer_services - field in cars/constants to provide partner-facing customer service contact emails per requested language.
    • voucher - filter in cars/terms-and-conditions to request only the subset of terms and conditions needed for the booking voucher.
  • Orders/create – v3.2 / 3.2 Beta:
    • authentication_response - in 3DS payment requests for authentication results.
    • subtype - field supports dual-branded UnionPay + Visa/MC cards where properties accept UnionPay.

Car rentals

Credit card requirements

| v3.2 3.2 Beta | New field: credit_card_required |

The new credit_card_required boolean under the price response, indicates whether a credit card is required as a guarantee for pay_at_pickup vehicles.

  • true - Credit card required and passed to supplier.
  • false- Credit card explicitly not required.
  • null - Information not available or not applicable.

Available in:

Special offers

| v3.2 3.2 Beta | New field: special_offer |

Returns any promotional or free upgrade features provided by the supplier for a vehicle, including: gps, priority pick up, wifi device, upgrade, one additional driver, etc.

Available in:

Example in constants response:

"special_offers": [
    {
    "id": "one_additional_driver",
    "name": {
    "de": "1 zusätzlicher Fahrer inbegriffen",
    "en-gb": "1 additional driver included"
    }
    },
    {
    "id": "two_additional_drivers",
    "name": {
    "de": "2 zusätzliche Fahrer inbegriffen",
    "en-gb": "2 additional drivers included"
    }
]

Customer service contacts

| v3.2 3.2 Beta | New field: customer_services |

/cars/constants returns now customer service email addresses per requested language.

Example request:

{
"constants": ["customer_services"],
"languages": [
    "en-gb",
    "fr"

  ]
}

Example response:

{
  "request_id": "01kja15bmhz3s8xfe1knejce3x",
  "data": {
    "customer_services": [
      {
        "id": "email",
        "name": {
          "fr": "customer.service-fr@cars.booking.com",
          "en-gb": "customer.service@cars.booking.com"
        }
      }
    ]
  }
}

See the Constants guide for examples.

Voucher filter in post-booking terms and conditions

| 3.2 Beta | New field: voucher filter |

Use the voucher boolean filter in orders/details/cars/terms-and-conditions to receive only the subset of terms required for the booking voucher.

  • true - Only the terms needed to recreate the booking voucher content shown on Booking.com are returned.
  • false (or not provided) - Full set of agreed terms and conditions is returned.
Booking voucher

A "booking voucher" is the confirmation document that travellers present at the car rental desk, including booking details and legally required terms and conditions.

Example of request:

{
  "booker": {
    "country": "gb"
  },
  "language": "en-gb",
  "orders": [
    "765255700"
  ],
  "filters": {
    "voucher": true
  }
}

Orders

3DS authentication response

| v3.2 | New field: authentication_response |

The new authentication_response is an optional field included in the orders/create endpoint, under payment.card.authentication.3d_secure object. It represents the 3D Secure transaction status (transStatus) returned by the 3DS provider.

  • Purpose - It maps to the transStatus codes to confirm the status of the authentication transaction (Y: authentication successful, N: Authentication failed, etc.)
  • Requirement - It is optional. Partners should only include it if their provider returns it or if a 3DS challenge flow occurred. It is not required if no challenge occurred.

Example request:

"payment": {
  "card": {
    "authentication": {
      "3d_secure": {
        "authentication_value": "AAABBBCCC123=",
        "eci": "05",
        "transaction": "abc123xyz",
        "authentication_response": "Y"
      }
    }
  }
}

Dual-branded UnionPay cards

| v3.2 3.2 Beta | New field: subtype |

The subtype field is included in the orders/create endpoint under payment.card

  • This is used to identify cards that belong to supported special or co-branded programmes (currently only unionpay_cobrand)
  • It ensures that the payment is routed correctly when the card network cannot be reliably determined by the card number (PAN) alone.

Example request:

  "payment": {
    "card": {
      "cardholder": "Test Name",
      "cvc": "111",
      "expiry_date": "2030-10",
      "number": "23333333333333",
      "subtype": "unionpay_cobrand"
    },

January 2026

This release brings mainly updates to Demand API version 3.2 Beta being car rentals the main focus:

  • Car rentals – v3.2 Beta:
    • New orders/details/cars/live endpoint provides enriched live order details.
    • Updated price structure removes prepayment field and standardises display/pay format in cars/availability.
    • Bug fix for depot IDs in cars/availability, now aligned with cars/search response.
  • Accommodations – v3.1:
    • Bundles enhancements available in accommodations/availability using extras.include_bundle_variants.
  • Orders – v3.2:
    • label field now populated for third-party inventory (TPI) properties in order responses.
    • The taxis service is now returned in order details responses.

Accommodations

| 3.1 | New | Bundles and value added services |

  • Bundles and value added services are automatically available across accommodation and orders endpoints.
  • However for version 3.1 you must include extras.include_bundle_variants in the availability request.
  • This ensures the response includes all bookable products with bundles, instead of returning only non-bundled products.

See all details in the bundles guide.


Car rentals

| 3.2 Beta | Replace “Prepayment” field in cars/availability |

The prepayment field under price has been replaced by the new price structure that includes the unit_amount, display and pay.
This aligns the response with the cars/search data model.

Before:

{
  "price": {
    "amount": 33.98,
    "prepayment": false
  }
}

After:

{
  "price": {
    "unit_amount": {
      "display": {
        "value": 33.98,
        "currency": "GBP"
      },
      "pay": {
        "value": 33.98,
        "currency": "GBP",
        "timing": "pay_at_pickup"
      }
    }
  }
}

Bug fix in cars/availability

| 3.2 Beta | Bug fix – depot IDs in cars/availability |

The depot IDs returned in the /3.2/cars/search response and depotID returned in the /3.2/cars/availability endpoint were different values.

  • /cars/availability was returning the Location ID of the depot incorrectly. To fix this inconsistency, both endpoints now return the route object, that includes the same depot IDs as in /cars/search.
Benefits

This fix ensures /cars/availability gives the same understanding of where the car will be picked up and dropped off from. Drop off was previously missing here.

Before:

{
  "depot": 38566
}

After:

    "route": {
      "dropoff": {
        "depot": 14443,
        "depot_location_type": "shuttle_bus"
      },
      "pickup": {
        "depot": 14443,
        "depot_location_type": "shuttle_bus"
      }
    }

Orders

Labels for TPI products

| 3.1 | v3.2 | "Label" supported for Third-Party Inventory (TPI) products |

  • The existing label field is now also populated for properties with third-party inventory (TPI) rates in Demand API order responses.
  • Endpoints impacted:
    • /orders/details
    • /orders/details/accommodation
    • /orders/create

What this means

  • Partners can apply a single label taxonomy across both Booking.com-sourced and third-party inventory.
  • Labels can be used to attribute bookings to specific TPI providers, programmes, or commercial constructs.

This improves post-booking reporting and reconciliation for mixed inventory portfolios that combine Booking.com and TPI rates.

See the Labels and attributions guide for more details.

Example orders/details response:

{
  "request_id": "01k9exampletpi0000000000000",
  "data": [
    {
      "id": "509430129718799",
      "accommodation": 123456,
      "third_party_inventory": true,
      "inventory": {
        "third_party": true,
        "type": "sell"
      },
      "label": "tpi-partner-x"
    }
  ]
}

Taxi service in orders/details

| v3.2 | "Taxis" available in orders/details |

The /orders/details endpoint now supports taxi orders. You can retrieve detailed information about taxi bookings alongside other travel services such as accommodations, cars, flights, and attractions.

What’s included per taxi leg:

  • Pickup and dropoff locations (address, city, country)
  • Start and end date-time.
  • Leg identifier.
  • Reservation identifier (shared across legs in the same taxi order).
  • Leg-level status.
  • Currencies.
  • Leg-level commission.
  • Leg-level price (total and commissionable)
  • Created and updated timestamps.

Example orders/details response (minimal):

{
  "request_id": "01htaxi9ez700example",
  "data": [
    {
      "id": "880045112233",
      "affiliate": 111111,
      "taxis": [
        {
          "leg": "607244787653565",
          "reservation": "916957580",
          "status": "booked",
          "start": "2026-03-10T08:00:00Z",
          "end": "2026-03-10T09:00:00Z",
          "pickup_location": { "city": "Amsterdam", "country": "nl" },
          "dropoff_location": { "city": "Utrecht", "country": "nl" },
          "price": {
            "total": { "booker_currency": 50.0, "product_currency": 50.0 }
          }
        }
      ],
      "start": "2026-03-10T08:00:00Z",
      "end": "2026-03-10T09:00:00Z",
      "status": "booked",
      "currencies": { "booker": "EUR", "product": "EUR" }
    }
  ],
  "metadata": { "next_page": null, "total_results": 1 }
}

New endpoint

| 3.2 Beta | New | New endpoint: orders/details/cars/live |

  • The orders/details/cars/live endpoint provides enriched, live car order details, including driver information, supplier, pricing breakdown, payment timing, and operational pick-up/drop-off instructions.
  • Currently, requests are limited to a single reservation ID.

This endpoint will merge into /orders/details/cars in v3.3.

Example response:

{
  "request_id": "123456789",
  "data": {
    "reservation_id": "ABC123",
    "driver": { "name": "John Doe", "age": 35 },
    "supplier": { "id": 3486, "name": "Premium Cars" },
    "price": {
      "unit_amount": { "display": { "value": 150, "currency": "EUR" }, "pay": { "value": 150, "currency": "EUR", "timing": "pay_online_now" } },
      "total_amount": { "display": { "value": 180, "currency": "EUR" }, "pay": { "value": 180, "currency": "EUR", "timing": "pay_online_now" } }
    },
    "route": {
      "pickup": { "depot": 243816, "depot_location_type": "meet_greet" },
      "dropoff": { "depot": 243816, "depot_location_type": "meet_greet" }
    }
  }
}

"Prepayment" removal

| 3.2 Beta | Removal of “Prepayment” field in orders/preview |

The prepayment field under the price object is no longer needed, as payment timing is already included in price.

Before:

     "products": [
          {
            "id": "10000000006012",
            "type": "baby_seat",
            "selected_quantity": 1,
            "mode": "per_rental",
            "price": {
              "unit_amount": {
                "display": {
                  "value": 25,
                  "currency": "EUR"
                },
                "pay": {
                  "value": 25,
                  "currency": "EUR",
                  "timing": "pay_online_now"
                }
              },
              "total_amount": {
                "display": {
                  "value": 25,
                  "currency": "EUR"
                },
                "pay": {
                  "value": 25,
                  "currency": "EUR",
                  "timing": "pay_online_now"
                }
              },
              "prepayment": true
            }
          },

After:

 "products": [
          {
            "id": "10000000006012",
            "type": "baby_seat",
            "selected_quantity": 1,
            "mode": "per_rental",
            "price": {
              "unit_amount": {
                "display": {
                  "value": 25,
                  "currency": "EUR"
                },
                "pay": {
                  "value": 25,
                  "currency": "EUR",
                  "timing": "pay_online_now"
                }
              },
              "total_amount": {
                "display": {
                  "value": 25,
                  "currency": "EUR"
                },
                "pay": {
                  "value": 25,
                  "currency": "EUR",
                  "timing": "pay_online_now"
                }
              },

Previous entries