Understand the accommodations/details endpoint, the required fields for each request, best practices and use cases.
→ Use the /accommodations/details endpoint to retrieve information about accommodation properties.
- You can request details for accommodation IDs, search by a location, or combine a location with filters. Availability and pricing are returned by other endpoints.
- The response can include property information such as its name, type, location, check-in and check-out times, and rating.
- Use the
extrasfield to request additional information such as photos, policies, facilities, or rooms.
To obtain details for a specific property, you must provide at least one ID of accommodations, airport, city, country, or region.
- If using accommodation IDs in the request, you can get them from the /accommodations/search response.
Example:
{
"accommodations": [
10004,
10507360
],
"extras": [
"description",
"photos",
"rooms"
],
"languages": [
"en-gb"
]
}- If using a location ID in the request, you can get it from the /common/locations endpoints.
Example:
{
"city": -2140479,
"accommodation_types": [
204
],
"accommodation_facilities": [
5
],
"extras": [
"facilities"
],
"languages": [
"en-gb"
],
"rows": 100
}The location identifiers and filter values must use the IDs defined by the Demand API.
| field | Description |
|---|---|
accommodations | List of accommodation IDs to retrieve. A maximum of 100 IDs can be supplied. |
airport, city, country, region | Location selector. Provide at least one location selector or accommodations. |
accommodation_facilities | Filters the results by accommodation facility IDs. |
accommodation_types | Filters the results by accommodation type IDs. |
brands | Filters the results by accommodation brand IDs. |
payment | Payment filter object. |
extras | List of additional data to return for each accommodation. See Optional extras. |
languages | IETF language tags for translated content in the response, for example en-gb. |
rows | Maximum number of results to return on a page. The schema allows up to 1,000. |
page | Pagination token returned in metadata.next_page. Omit it on the first request. |
Use extras to request additional property or room data. Pass one or more values from the schema's supported list.
| Extra | Information returned |
|---|---|
bundles | Available value-add bundles for the accommodation. See the Bundles guide for details. |
description | Property description, important information, licence information, and trader details where available. This information can be relevant to Digital Services Act (DSA) obligations. See the DSA compliance guide. |
facilities | Property facilities and their attributes. The response can also include facility_details for supported facility categories. Room facilities require both rooms and facilities. |
payment | Property payment information, including accepted methods, payment timings, and CVC requirements. |
photos | Property photo URLs and photo tags. Room photos require both rooms and photos. |
policies | Property policies, including cots and extra beds, age limits, pets, and damage policies. |
refuses_free_cancellation_requests | Whether the property refuses requests to waive a cancellation fee. Check this value before sending a cancellation request. |
rooms | Room or accommodation-unit details, such as names, descriptions, bed options, occupancy, layout, and size. |
For example, to request property facilities and photos:
{
"accommodations": [
10004
],
"extras": [
"facilities",
"photos"
],
"languages": [
"en-gb"
]
}
Include description as extras in the request to receive:
host type- Indicating whether the host is private, professional, or unknown.important information- Any relevant details the property wants to share like those regarding the booking conditions, or any other.license numbertext- Brief overall of the property main characteristics.trader- The property personal details as required by the Digital Services Act(“DSA”).
- Refer to the DSA compliance guide for more details on how to interpret this value.
- Make sure you follow the DSA recommendations when displaying this sort of information in your platform.
Example:
{
"description": {
"host_type": "professional",
"important_information": {
"en-gb": "The credit card that has been used to book a non-refundable rate, will be charged on the day of booking and needs to be presented upon check-in..."
},
"license_numbers": [],
"text": {
"en-gb": "The Demand API Sandbox Hotel Orion features elegant accommodation alongside the famous Keizersgracht canal, around the corner from the Anne Frank House."
},
"trader": {
"address": {
"address_line": "Keizersgracht 164",
"city": "Amsterdam",
"country": "nl",
"post_code": "1015CZ"
},
"email": "info@hoteltoren.nl",
"name": "Demand API Sandbox Hotel Orion",
"registration_number": "1233454645",
"telephone": "+3112356456",
"trade_register": "KVK",
"trader_verified": true
}
}
}
When the facilities field is included in the extras field, the accommodations/details response includes a list of available facilities, each with an ID and attributes, such as whether the facility requires payment or is located off-site.
It also includes the "facility_details" object, depicting detailed information about specific key facilities:
| Internet | Displays information about the internet facilities available at the accommodation, including the type of connection and the charging model. |
| Parking | Retrieves details about the parking facilities available at the accommodation, including pricing, type, location, and reservation requirements. |
| Restaurant | Returns details about the restaurants available at the accommodation including: restaurant name, restaurant status, available for guests only and reservations requirement. |
| Swimming pool | Information about the swimming pools available at the accommodation including: their type, payment options and age restrictions. |
Example of response:
{
"facilities": [
{
"id": 21,
"attributes": [
"paid"
]
},
{
"id": 75,
"attributes": [
"offsite"
]
}
],
"facility_details": {
"internet_facility": {
"price": 0,
"charge_mode": "free",
"coverage": "entire_property",
"connection_type": "wifi"
},
"parking_facilities": [
{
"price": 0,
"charge_mode": "charges_may_apply",
"type": "public",
"location": "nearby",
"reservation": "not_possible"
}
],
"restaurant_facilities": [
{
"name": "Restaurant Oasis",
"status": "open",
"guests_only": false,
"accept_reservations": false
}
],
"swimming_pool_facilities": []
}
}
- To identify the facility with a specific id, use the accommodations/constants endpoint. This will retrieve the list of facilities id:
Example response for facility IDs 21 and 75:
[
{
"id": 21,
"name": {
"en-gb": "Babysitting/child services"
},
"facility_type": 3
},
{
"id": 75,
"name": {
"en-gb": "Car hire"
},
"facility_type": 3
}
]Include payment as extra in the request, to receive payment methods and timings supported by the property, as well as CVC requirement indicators.
Example of response including payment:
{
"request_id": "01jmmjn081ta8d5a0kt83sgg1d",
"data": [
{
"id": 10507360,
"name": {
"en-gb": "Demand API Sandbox Hotel Orion"
},
"accommodation_type": 204,
"booker_address_required": false,
"brands": [],
"checkin_checkout_times": {...},
"contacts": {
"general": {...},
"reservations": null
},
"currency": "EUR",
"deep_link_url": "booking://hotel/10507360?affiliate_id=956509",
"is_work_friendly": false,
"location": {...},
"meal_prices": {
"breakfast": 12,
"lunch": null,
"dinner": null
},
"number_of_rooms": 300,
"payment": {
"amex_cvc_required": false,
"cvc_required": false,
"domestic_no_cc": false,
"methods": {
"cards": [
1,
2,
3
],
"cash": true,
"virtual_cards": [
1,
2,
3
]
},
"timings": [
"pay_at_the_property",
"pay_online_later",
"pay_online_now"
]
},
"price_category": "",
"programmes": {
"travel_proud": false,
"sustainable_offerings": {
"certifications": [],
}
},
"ranking": 4066029,
"rating": {
"number_of_reviews": 0,
"preferred": true,
"review_score": null,
"stars": 5,
"stars_type": "official"
},
"spoken_languages": [
"en-gb"
],
"themes": [],
"url": "https://www.booking.com/hotel/nl/demand-api-sandbox-orion.html?aid=956509"
}
]
}See Payment methods, Payment timings, and the Payments overview to interpret the payment object.
Request photos to receive property photo URLs in available sizes, with tags and an indication of the main photo where supplied. The number of photos returned may be limited by contract, and photos are not returned in a particular order. Room-level photos require both rooms and photos.
Request policies for property rules and constraints. The response can include cot and extra bed prices, minimum guest age, minimum and maximum check-in ages, pet policies, and damage policies. Use these details when explaining property conditions to travellers.
Request rooms for the property's room types or accommodation units.
- A room can include a translated name and description, bed options, room attributes, facilities, maximum occupancy, internal layout, photos, room type, and size.
- Room facilities require
roomsandfacilities; room photos requireroomsandphotos. - Occupancy and bed details describe room options and limits. They do not indicate current availability.
A successful response contains a data array.
- Each item represents an accommodation.
- The returned data is static property information; it does not indicate availability or provide a price for a stay.
The response can include fields such as:
Field | Description |
|---|---|
id | Accommodation ID. |
accommodation_status | Operational status: open, closed_fraud, closed_temporarily, or closed_permanently. When searching by location, closed properties are excluded. A closed property is included only when querying by ID. closed_fraud is returned only when fraud visibility is enabled for the account; otherwise, it is represented as closed_permanently. |
accommodation_type | Accommodation type ID. |
booker_address_required | Whether a booker address must be provided when creating an order for the property. |
checkin_checkout_times | Check-in and check-out time ranges, where available. Times use HH:MM:SS; values can be null. |
contacts | Property contact information, when available. |
currency | The property's currency. |
description | Returned when requested with the description extra. |
facilities, facility_details | Returned when requested with the facilities extra. |
fiscal_information | Fiscal information, when available. |
is_genius | Whether the accommodation participates in the Genius programme. |
key_collection_information | Key collection information, when available. |
location | Address, coordinates, country, and location identifiers. |
long_stay_friendly | Whether the property is suitable for long stays. |
meal_prices | Meal prices, where available. |
name | Translated accommodation name. |
number_of_rooms | Approximate number of bookable rooms or accommodation units configured in Booking.com. It is not an availability indicator or necessarily the physical room count (See details below). |
payment | Returned when requested with the payment extra. |
photos | Returned when requested with the photos extra. |
policies | Returned when requested with the policies extra. |
price_category | Qualitative price reference from $ to $$$$. |
programmes | Programme information, including supported sustainability information. |
ranking, rating | Public ranking and review information, where available. |
refuses_free_cancellation_requests | Returned when requested with the corresponding extra. |
requires_request_to_book | Indicates whether a booking request is required before the accommodation can be booked. |
rooms | Returned when requested with the rooms extra. |
spoken_languages | Languages spoken by the property's staff. |
themes | Accommodation theme IDs. |
url | Booking.com web and app URLs, when available. |
work_friendly | Whether the accommodation is suitable for working remotely. |
This example shows the response structure, including the current url object and pagination metadata. Optional fields and values vary by property.
{
"request_id": "01fr9ez700exycb98w90w5r9sh",
"data": [
{
"id": 10004,
"accommodation_status": "open",
"accommodation_type": 204,
"booker_address_required": false,
"brands": [],
"checkin_checkout_times": {
"checkin_from": "15:00:00",
"checkin_to": null,
"checkout_from": "07:00:00",
"checkout_to": "12:00:00"
},
"currency": "EUR",
"is_genius": true,
"location": {
"address": {
"en-us": "Keizersgracht 164"
},
"city": -2140479,
"coordinates": {
"latitude": 52.375858,
"longitude": 4.886006
},
"country": "nl",
"districts": [
145,
3024
],
"postal_code": "1015 CZ",
"regions": [
1010,
2776
]
},
"long_stay_friendly": false,
"meal_prices": {
"breakfast": 20,
"dinner": null,
"lunch": null
},
"name": {
"en-us": "The Pavilions Amsterdam, The Toren"
},
"number_of_rooms": 11,
"payment": {
"amex_cvc_required": false,
"cvc_required": true,
"domestic_no_cc": false,
"methods": {
"cash": true,
"cards": [
1,
2,
3
],
"virtual_cards": [
1,
2,
3
]
},
"timings": [
"pay_at_the_property"
]
},
"price_category": "$$$$",
"ranking": 123456,
"rating": {
"number_of_reviews": 930,
"preferred": true,
"review_score": 9,
"stars": 4,
"stars_type": "official"
},
"spoken_languages": [
"de",
"en-gb",
"fr",
"nl"
],
"themes": [
6
],
"url": {
"web": "https://www.booking.com/hotel/nl/toren.html?affiliate_id=!AFFILIATE_ID!",
"app": "booking://hotel/10004?affiliate_id=!AFFILIATE_ID!"
},
"work_friendly": false
}
],
"metadata": {
"next_page": null
}
}In the Demand API, number_of_rooms is an approximate count of bookable rooms or accommodation units configured in Booking.com.
- It does not show current availability and does not necessarily match the property's physical room count.
- For holiday homes and similar private rentals, the entire property may be one bookable unit, so
number_of_roomscan be1even if the unit has multiple bedrooms.
It is calculated as the sum of the “Number of this type” quantities configured for each Booking.com room type.
Important:
It is not a count of unique room IDs.
It is not an availability indicator.
It does not necessarily represent the property’s total physical room count.
It may be lower than the physical room count if not all rooms are configured in Booking.com.
You should treat
number_of_roomsas an inventory size indicator (bookable units) (for example, for filtering, bucketing, or ranking properties), not as a reconciled operational or financial source of truth.
number_of_rooms does NOT represent the number of bedrooms. If you need to understand the internal structure of a unit (such as number of bedrooms), refer to:
- The rooms array.
- Bedroom-level attributes (e.g. is_bedroom, bed configuration, occupancy details)
For properties that include additional unmapped third-party inventory (TPI) rooms, the total number of rooms returned in the rooms payload may be higher than the value shown in number_of_rooms.
- This is expected behaviour. Unmapped TPI rooms are intentionally excluded from
number_of_roomsto avoid double-counting or inflating the perceived property size.
If "number_of_rooms" is 0, the property has no rooms configured in the Booking.com internal system.
This can occur when:
- The property is active but room configuration has not yet been completed.
- Only unmapped third-party inventory (TPI) rooms exist for the property.
In such cases, room data may still appear in the rooms payload if TPI inventory is available.
A property has 4 physical rooms in total.
In the Booking.com internal system:
- 2 rooms are configured using the “Number of this type” setting.
- 2 additional rooms are supplied as unmapped TPI inventory.
In the /accommodations/details response:
"number_of_rooms": 2,
However, the rooms payload may return 4 room entries (2 mapped + 2 unmapped).
This does not indicate a data inconsistency.
number_of_roomsreflects only the rooms configured.- The
roomsarray reflects all room types returned in the response, including unmapped TPI rooms.
If you need to reconcile room-level data, always rely on the rooms array. Do not use number_of_rooms for reconciliation purposes.
For holiday homes, villas, apartments, chalets, and other private rentals: number_of_rooms may not represent the property's internal bedroom count.
In these cases, the property is often sold as a single bookable unit. As a result:
number_of_roomsmay be1, because there is one bookable accommodation unit available for reservation.- The property's internal layout (for example, the number of bedrooms) is represented separately in the room and unit details.
For example, a holiday home with 3 bedrooms may return:
"number_of_rooms": 1
This does not mean the property has only one bedroom. It means the entire property is offered as a single bookable unit.
When you need information about the property's internal room layout or sleeping arrangements, always rely on the room and unit details returned in the response rather than number_of_rooms.
| Property type | Bookable units | Bedrooms | number_of_rooms |
|---|---|---|---|
| Hotel | 20 rooms | N/A | 20 |
| Aparthotel | 10 apartments | varies | 10 |
| Holiday home | 1 unit | 3 | 1 |
| Villa with 5 rooms | 1 unit | 5 | 1 |
- For detailed instructions on how to manage trader information for EEA travellers, refer to the DSA compliance guide.
- Refer to the Payments section for more details on how to interpret the "payment" extras details.