Last updated

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 stageEndpoint(s)What you receiveHow to use it
Static details/accommodations/detailsAll 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/previewThe bundle ID for the selected productConfirms the exact bundle that will be booked before order creation.
Post-booking/orders/details/accommodationsThe 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 bundle ID or null.

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 accommodation id (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 bundle ID.

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:

  1. Call /orders/preview using the accommodation id (13766008) and product id (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": []
        }
      }
    ]
  }
}
  1. 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"
  }
}
  1. Complete the booking with /orders/create
Orders guides

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

Curious to know more?

Not familiar with bundles and value adds? Start with Bundles and value adds overview to understand the concepts.