Search for attractions 3.2 Beta
Learn how to use the /attractions/search endpoint to find and retrieve attractions that match travellers’ preferences, locations, and date ranges.
→ Use the /attractions/search endpoint to retrieve a list of attractions available within a given location or set of filters.
This endpoint returns real-time availability and up-to-date prices for our travel experiences inventory.
If you choose to cache our attractions inventory (/attractions/details), use the /attractions/search endpoint to retrieve live availability and the latest prices before displaying them to your travellers. See the Cache static data guide for more details.
How it works
The request defines search parameters to find attractions. The response returns a list of matching attractions and metadata about the search results.
Example use case:
Retrieve attractions in the Netherlands and Belgium available between 18–20 September 2026, filtered by minimum review score and supported languages.
{
"currency": "EUR",
"countries": ["nl", "be"],
"dates": {
"start_date": "2026-09-18",
"end_date": "2026-09-20"
},
"filters": {
"rating": {
"minimum_review_score": 4.2,
"minimum_review_count": 100
},
"supported_languages": ["en", "es", "fr", "de"]
},
"rows": 50,
"sort": {
"by": "most_popular"
}
}
Search inputs
| Field | Required | Format | Description |
|---|---|---|---|
currency | string | Yes | ISO 4217 code (e.g. EUR) |
start_date | string | Yes | YYYY-MM-DD |
end_date | string | Yes | YYYY-MM-DD |
cities | array of integers | No | Max 5 items |
countries | array of strings | No | ISO 3166-1 alpha-2, max 3 items |
coordinates | object | No | latitude, longitude (optional radius in km) |
| Filters: | |||
rating.minimum_review_score | number | No | 0–5 |
rating.minimum_review_count | integer | No | ≥0 |
supported_languages | array of strings | No | IETF BCP 47 tags |
| Pagination/sorting: | |||
rows | integer | No | 10–100, multiple of 10, default 20 |
page | string | No | Pagination token |
sort.by | string | No | highest_review_score |
- Only one of cities, countries, or coordinates should be used per request.
start_datemust be ≤end_date.- Maximum number of items: 5 cities, 3 countries.
Example - Filters
Filters help tailor results to traveller preferences and quality indicators.
"filters": {
"rating": {
"minimum_review_score": 4.0,
"minimum_review_count": 50
},
"supported_languages": ["en", "de"]
}Example - Pagination and sorting
"rows": 50,
"sort": {
"by": "lowest_price_first"
},
"page": "eyJhbGciOiJIUzI1NiJ9..."
See the pagination guide for more details.
Response
The response contains a list of matching attractions and metadata about the search:
{
"request_id": "01fr9ez700exycb98w90w5r9sh",
"data": [
{
"id": "PRTcWzDlwXjP",
"badges": ["best_seller"],
"categories": ["museums_arts_culture"],
"duration": "PT2H",
"photos": [
{"url": "https://cf.bstatic.com/xdata/images/xphoto/500x375/170335205.jpg"}
],
"locations": [
{
"address": "Museumstraat 1",
"city": 2140479,
"coordinates": {"latitude": 52.360043, "longitude": 4.885177},
"country": "nl",
"post_code": "1071 XX",
"type": "attraction"
}
],
"long_description": "Discover Dutch art and history at the Rijksmuseum...",
"name": "Rijksmuseum Admission",
"ratings": {"number_of_reviews": 3250, "score": 4.8},
"supported_languages": ["en-gb", "nl"],
"url": {"web": "https://www.booking.com/attractions/nl/pr0dwcibnsiu-rijksmuseum-admission.html"}
}
],
"metadata": {"next_page": "eyJhbGciOiJIUzI1NiJ9...", "total_results": 128}
}
When no data is returned
If the search returns no attractions:
- Check if the date range or location has no available products.
- Review filters — overly strict rating or language filters can exclude all results.
- Verify that city and country IDs are valid and supported.
If you still receive empty results, try broadening the search criteria or temporarily removing filters.
Best practices
✅ Optimise for performance:
- Limit rows to 20–50 for faster responses.
- Use pagination tokens instead of fetching all data at once.
✅ Deliver relevant results:
- Combine geographic (coordinates) and qualitative (rating) filters.
- Use
sort.bybased on your traveller experience (e.g. most_popular for discovery, lowest_price_first for value).
✅ Maintain consistency:
- Always include currency and dates.
- Store location IDs from /common/locations endpoints to reduce API load.
Important note on product coverage
Not all attractions or experiences visible on the Booking.com website are available via the Demand API. This is by design, the API is intended to deliver a consistent and integrator-friendly subset of experiences optimised for connected trip solutions.
- Refer to the Search use cases section for more examples.
- See the Attraction details guide to learn how to retrieve attractions static data.
- See the Pagination guide for instructions on paginating search results.