# Retrieve and display bundles/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](/demand/docs/open-api/demand-api/accommodations/accommodations/search) endpoint.

Do not forget to include the `extras.products` to retrieve the product blocks.

**Example request:**


```json
{
  "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:**


```json
{
  "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:**

3.1 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.



```json
{
  "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
  }
}
```

3.2 request

```json
{
  "accommodations": [13766008],
  "booker": {
    "country": "nl",
    "platform": "desktop"
  },
  "checkin": "2026-02-02",
  "checkout": "2026-02-10",
  "guests": {
    "number_of_adults": 2,
    "number_of_rooms": 1
  }
}
```

**Example response:**

The response confirms:

* Availability.
* Price and policies.
* The `bundle` ID.



```json
{
  "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 endpoint.

* Use the `extras: ["bundles"]` fields to retrieve value added details and translations.


**Example request:**


```json
{
  "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.


```json
{
  "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 same `accommodation` id (13766008) and `products.id` (1376600801_409788848_0_0_0_843543)


**Example request**


```json
{
  "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**


```json
{
  "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](/demand/docs/orders-api/order-preview-create) 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](/demand/docs/accommodations/bundles/about-bundles) to understand the concepts.