Retrieve and display bundles and value adds
Follow this step-by-step guide to retrieve bundle details from the Demand API and display value adds consistently across a search-look-book flow, from availability and pricing to booking preview and post-booking confirmation.
Bundles in the Demand API
Bundles appear consistently across the booking flow in both v3.1 and v3.2:
| Booking stage | Endpoint(s) | What you receive | How to use it |
|---|---|---|---|
| Static details | /accommodations/details | All bundles defined by the accommodation, including: • Bundle ID • Value add types • Localised descriptions | Store this data. Use it as the source of truth when displaying bundle benefits across the booking flow. |
| Search & availability (real time) | /accommodations/search /accommodations/availability /accommodations/bulk-availability (v3.1) | The bundle ID on each product (or null) | Match the returned bundle ID to the stored bundle details and display included benefits to travellers. |
| Booking preview | /orders/preview | The bundle ID for the selected product | Confirms the exact bundle that will be booked before order creation. |
| Post-booking | /orders/details/accommodations | The bundle ID associated with the reservation (if present) | Display confirmed value adds in booking confirmations, itineraries, or post-booking communications. |
Store bundle details from /accommodations/details and reuse them across all stages of the booking flow.
Version behaviour
In order to retrieve the full list of bookable products with bundles:
- Demand API v3.1 - You must explicitly request bundled products in availability using
extras.include_bundle_variants. - Demand API v3.2 - Bundled products are returned automatically. No extras are required.
Steps to retrieve bundles
Follow these steps to retrieve bundles and value adds:
1. Search for accommodation
→ Use the accommodations/search endpoint.
Do not forget to include the extras.products to retrieve the product blocks.
Example request:
{
"booker": {
"country": "nl",
"platform": "desktop"
},
"checkin": "2026-02-02",
"checkout": "2026-02-10",
"country": "es",
"extras": [
"products"
],
"guests": {
"number_of_adults": 2,
"number_of_rooms": 1
}
}What to look for:
- The bundle field inside each product. Each product includes one
bundleID ornull.
Example response:
{
"request_id": "01kcrvv1a4mf9wfqn70v5jmp35",
"data": [
{
"id": 13766008,
"currency": "EUR",
"deep_link_url": "booking://hotel/13766008?affiliate_id=956509&checkin=2026-02-02&checkout=2026-02-10&mcid=10",
"price": {
"book": 740,
"total": 740
},
"products": [
{
"id": "1376600801_409788848_0_0_0_843543",
"bundle": 843543,
"children": [],
"deal": null,
"number_available_at_this_price": 1,
"number_of_adults": 2,
"policies": {
"cancellation": {
"free_cancellation_until": "2026-01-18T22:59:59+00:00",
"type": "free_cancellation"
},
"meal_plan": {
"meals": [],
"plan": "no_plan"
},
"payment": {
"prepayment_required": true,
"timings": [
"pay_online_later",
"pay_online_now"
]
}
},
"price": {
"book": 740,
"total": 740
},
"room": 1376600801
}
],
"url": "https://www.booking.com/hotel/es/beach-apartment-denia.html?aid=956509&checkin=2026-02-02&checkout=2026-02-10&no_rooms=1&group_adults=2&mcid=10"
},Save the accommodation id (13766008). You will need it in the next steps.
2. Get availability and prices
→ Use accommodations/availability endpoint.
- Include the
accommodationid (13766008) from search.
Example request:
If you are using Demand API v3.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.
{
"accommodation": 13766008,
"booker": {
"country": "nl",
"platform": "desktop"
},
"checkin": "2026-02-02",
"checkout": "2026-02-10",
"extras": [
"include_bundle_variants"
],
"guests": {
"number_of_adults": 2,
"number_of_rooms": 1
}
}
The response confirms:
- Availability.
- Price and policies.
- The
bundleID.
Example response:
{
"request_id": "01kcrxnrhwdj6jca7d2wv6skba",
"data": {
"id": 13766008,
"currency": "EUR",
"deep_link_url": "booking://hotel/13766008?affiliate_id=956509&checkin=2026-02-02&checkout=2026-02-10",
"products": [
{
"id": "1376600801_409788848_0_0_0_843543",
"bundle": 843543,
"deal": null,
"maximum_occupancy": {
"adults": 6,
"children": null,
"total": 6
},
"number_available_at_this_price": 1,
"policies": {
"cancellation": {
"free_cancellation_until": "2026-01-18T22:59:59+00:00",
"schedule": [...]
}
},
"price": {
"book": 740,
"chargeable_online": 740,
"total": 740
},
"room": 1376600801
}
],
"recommendation": {
"price": {
"book": 740,
"chargeable_online": 740,
"total": 740
},
"products": [
{
"id": "1376600801_409788848_0_0_0_843543",
"children": [],
"number_of_adults": 2,
"price": {
"book": 740,
"chargeable_online": 740,
"total": 740
}
}
]
},
"url": "https://www.booking.com/hotel/es/beach-apartment-denia.html?aid=956509&checkin=2026-02-02&checkout=2026-02-10&no_rooms=1&group_adults=2"
}
}Prices may change between search and availability. Always confirm before booking.
3. Get bundle details
→ Call /accommodations/details.
Use the extras field with bundles to retrieve value add details and translations.
Example request:
{
"accommodations": [
13766008
],
"extras": [
"bundles"
],
"languages": [
"en-gb",
"es"
]
}Requesting extras: ["bundles"] does not guarantee that bundles will be returned. Only accommodations that define value adds include them in the response.
Example response:
What you get:
✓ All bundles defined for the accommodation.
✓ Each bundle’s value adds.
✓ Localised descriptions in the requested languages.
This data is static. You can safely store it and reuse it until the accommodation updates its bundle configuration.
{
"request_id": "01kcrwnk8b1kv5syq2mbjfjy3n",
"data": [
{
"id": 13766008,
"name": {
"en-gb": "Beach Apartment",
"es": "Beach Apartment"
},
"accommodation_type": 201,
"booker_address_required": false,
"brands": [],
"bundles": [
{
"id": 843543,
"value_adds": [
{
"description": {
"es": [
"Parking para un vehículo por unidad reservada y estancia."
],
"en-gb": [
"Self parking for one vehicle per booked unit per stay."
]
},
"type": "parking"
},
{
"description": {
"es": [
"Internet de alta velocidad durante toda la estancia."
],
"en-gb": [
"High-speed internet throughout your stay."
]
},
"type": "high_speed_internet"
}
]
}
],
...
"url": "https://www.booking.com/hotel/es/beach-apartment-denia.html?aid=956509",
"work_friendly_home": true
}
]
}Store bundle data
We strongly recommend storing bundle details to:
- Reduce API calls.
- Improve performance.
- Ensure consistent display across your flow.
4. Handle the booking
If you support a Search, look and book flow:
- Call /orders/preview using the
accommodationid (13766008) and productid(1376600801_409788848_0_0_0_843543)
Example request
{
"booker": {
"country": "nl",
"platform": "desktop"
},
"currency": "EUR",
"accommodation": {
"id": 13766008,
"checkin": "2026-02-02",
"checkout": "2026-02-10",
"products": [
{
"id": "1376600801_409788848_0_0_0_843543",
"allocation": {
"number_of_adults": 2,
"children": []
}
}
]
}
}- Confirm in the response:
✓ Product
✓ Price
✓ Policies
✓ Bundle ID
Example response
{
"request_id": "01kcryhpc5dp3mnphdkcqh995y",
"data": {
"accommodation": {
"id": 13766008,
"commission": {...}
}
},
"currency": {...},
"general_policies": {...},
"price": {...}
},
"products": [
{
"id": "1376600801_409788848_0_0_0_843543",
"bundle": 843543,
"deal": null,
"policies": {...},
"price": {
"base": {
"accommodation_currency": 618.18,
"booker_currency": 618.18
},
"extra_charges": {...},
"chargeable_online": {
"accommodation_currency": 740,
"booker_currency": 740
},
"total": {
"accommodation_currency": 740,
"booker_currency": 740
}
},
"room": 1376600801
}
]
},
"order_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7ImFjY29tbW9kYXRpb24iOnsiaWQiOjEzNzY2MDA4LCJjaGVja2luIjoiMjAyNi0wMi0wMiIsImNoZWNrb3V0IjoiMjAyNi0wMi0xMCIsImN1cnJlbmN5IjoiRVVSIiwicHJvZHVjdHMiOlt7ImlkIjoiMTM3NjYwMDgwMV80MDk3ODg4NDhfMF8wXzE2Nzc3MjE2Xzg0MzU0MyIsImFsbG9jYXRpb24iOnsiY2hpbGRyZW4iOltdLCJudW1iZXJfb2ZfYWR1bHRzIjoyfSwidG90YWxfcHJpY2UiOjc0MC4wMH1dfSwiYm9va2VyIjp7ImNvdW50cnkiOiJubCIsInBsYXRmb3JtIjoiZGVza3RvcCJ9LCJib29rZXJfY3VycmVuY3kiOiJFVVIiLCJwYXlfb25saW5lX2xhdGVyX2F2YWlsYWJsZSI6dHJ1ZX0sImF1ZCI6WyIvb3JkZXJzL2NyZWF0ZSJdLCJleHAiOjE3NjYwNjk4MDN9.dEzvayxouDmo7tcfRTmgDd2Xn5ti0u7__b7xhc4gSek"
}
}- Complete the booking with /orders/create
See the Orders creation guide for full booking steps.
5. Post booking checks
To retrieve the bundle associated with a reservation:
- Call /orders/details/accommodations.
- Use the returned bundle ID to display confirmed value adds.
- The returned bundle ID always matches one of the bundles previously retrieved from /accommodations/details.
Best practices
- Store static bundle data from /accommodations/details endpoint.
- Always display the final price, not inferred savings.
- Treat bundles as single commercial offers.
- Do not assume bundles are always present.
- Use consistent wording when displaying value adds (for example: “Included with your stay”)
Next steps
Not familiar with bundles and value adds? Start with Bundles and value adds overview to understand the concepts.