Search for car rentals
Learn how to use the /cars/search endpoint to find and retrieve car rentals that match travellers’ preferences, routes, and date ranges.
→ Use the /cars/search endpoint to retrieve a list of cars available within a given route, date range, or set of filters.
This endpoint:
- Covers a wide range of traveller needs — from budget-friendly city cars to luxury SUVs.
- Finds and returns the optimum set of matching rental options so travellers can quickly choose the right vehicle.
- Increases the likelihood of converting searches into bookings by showing relevant, well-priced products.
This guide explains how to structure your request, filter and sort results, handle pagination, and interpret the search response.
How it works
The request defines search parameters to find available cars. The response returns a list of matching cars, including prices, policies, and metadata about the search results.
Example use case:
Retrieve cars in Amsterdam Airport Schiphol (AMS) available between 5–10 November 2025, filtered by automatic transmission, limited mileage and price.
Search request example
3.1 request example:
{
"booker": { "country": "nl" },
"currency": "EUR",
"driver": { "age": 36 },
"filters": {
"transmission_type": "automatic",
"mileage_type": "limited",
"depot_location_type": "in_terminal"
},
"route": {
"pickup": {
"datetime": "2025-11-05T11:05:00",
"location": { "airport": "AMS" }
},
"dropoff": {
"datetime": "2025-11-10T11:05:00",
"location": { "airport": "AMS" }
}
},
"payment": {
"timings": ["pay_now"]
}
}
Search inputs
| Field | Format | Required | Description |
|---|---|---|---|
booker.country | string | Yes | Two-letter country code (ISO 3166-1 alpha-2) in lowercase. Determines traveller context for pricing and taxes. Get this code running the /common/locations/country endpoint. |
driver.age | integer | Yes | Age of the driver (18–99). Affects availability and price. Minimum: 18 - Maximum 99. |
currency | string | Yes | ISO 4217 code (e.g. EUR). Currency for pricing. Retrieve codes using /common/payments/currencies. |
route.pickup | object | Yes | Pick-up location and datetime. ISO 8601 date and time format: YYYY-MM-DDThh:mm:ss. See location options below. |
route.dropoff | object | Yes | Drop-off location and datetime. |
| Location options | object | Airport code / coordinates / city ID | Specify pick-up and drop-off by: • Airport: { "airport": "AMS" } • Coordinates: { "coordinates": { "latitude": 52.309456, "longitude": 4.762266 } } • City ID: { "city": -2140479 } (Use /common/locations/cities for the full list.) |
| Filters | object | No | See section below for optional filters (transmission, mileage, depot type, car category, number of seats, suppliers). |
| Payment.timings | array of strings | No | • In v3.1 use pay_now, part_pay, pay_local • In v3.2 use pay_online_now, pay_partial_online_now and pay_at_pickup. Filter by payment timing. |
maximum_results | integer | No | 10–500, multiple of 10, default 100. Max number of results. |
| Pagination / sorting | object | No | sort.by (price, distance, review_score), sort.direction (ascending, descending). Use page for pagination token from metadata.next_page. |
- Only one of airport, coordinates, or city should be used per pickup/dropoff location.
pickup.datetimemust be ≤dropoff.datetime.- Maximum maximum_results is 500.
Optional filters
Filters help tailor results to traveller preferences and vehicle features.
Examples:
air_conditioning– true (only cars with AC) or false.car_categories– Filter by car type (e.g., "compact", "suvs", "premium").depot_location_type– Location of the rental depot (e.g., "in_terminal", "downtown").mileage_type– "limited" or "unlimited".number_of_seats– Minimum required seats.transmission_type– "automatic" or "manual".supplier_ids– Retrieve cars from specific suppliers (max 10 IDs).
Payment filters - Narrow results based on the desided payment timing:
pay_now– Full online payment at booking.part_pay– Partial payment upfront, balance later.pay_local– Payment at the depot directly.
If you are using v3.2 the payment timings are: pay_online_now, pay_partial_online_now and pay_at_pickup
Example - Filters
"filters": {
"transmission_type": "automatic",
"mileage_type": "limited",
"depot_location_type": "in_terminal",
"car_categories": ["economy", "compact"],
"number_of_seats": 5,
"supplier_ids": [7455, 1234]
}Example - Pagination and sorting
"maximum_results": 50,
"sort": {
"by": "price"
},
"page": "eyJhbGciOiJIUzI1NiJ9..."
See the pagination guide for more details.
Response
The response contains a list of matching cars and metadata about the search:
3.1 response example:
{
"request_id": "01h00fr9y7qkbxtc6kyv97j49z",
"data": [
{
"car": 122655,
"policies": {
"cancellation": {
"type": "free_cancellation",
"details": {
"context": "before_pickup",
"duration": "P7D"
}
},
"damage_excess": 3000,
"deposit": 1500,
"insurance_package": "basic",
"fuel": "return_same",
"mileage": {
"distance": 200,
"distance_unit": "kilometers",
"amount": 12.54,
"type": "limited"
},
"payment": {
"timing": "pay_now"
},
"theft_excess": 3000
},
"price": {
"total": "121.90",
"currency": "EUR",
"extra_charges": [
{
"charge": "aged_fee",
"total_amount": 21.9
},
{
"charge": "one_way_fee",
"total_amount": 50
}
]
},
"route": {
"dropoff": {
"depot": 112314,
"depot_location_type": "airport_hotel"
},
"pickup": {
"depot": 112314,
"depot_location_type": "airport_hotel"
}
},
"supplier": 7455,
"url": {
"app": "booking://page",
"web": "https://example.com"
}
}
],
"metadata": {
"next_page": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7Im1heGltdW1fcmVzdWx0cyI6MTAsIm9mZnNldCI6MTB9LCJhdWQiOiJDQVJTX1NVUFBMSUVSUyIsImV4cCI6MTY4MzY0NzMwNX0.y7NmH48mm7lImd2WxsHdotj6n-dVQAzJCGCnIJCKy3A",
"total_results": 122
},
"search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7ImJvb2tlciI6eyJjb3VudHJ5IjoidXMifX0sImF1ZCI6Ii9ob3RlbHMvc2VhcmNoIiwiZXhwIjoxNzUwMDAwMDAwfQ.XYZ123AbcDefGHIjklMNOpqrsTUVwxYZ456789"
}
- Not all cars visible on the Booking.com website are available via the Demand API.
- The API delivers a consistent, integrator-friendly subset of inventory optimised for connected trip solutions.
The search_token
The search_token stores the search context associated with the request.
- Include it in your v3.2 Beta requests, to cars/availability, orders/preview and orders/create endpoints.
- This reduces the need to resend the entire search payload, such as the route, filters, or booker country.
How to use it:
- The first search request includes a
search_tokenvalue in the response. - Include the
search_tokenin subsequent requests to cars/availability, orders/preview and orders/create endpoints (from v3.2 Beta) instead of resending the full search criteria.
The search_token expires after 90 minutes.
When no data is returned
If the search returns no cars:
- Check that the pickup/dropoff location and datetime are valid and have available vehicles.
- See the Data conventions guide for right formats.
- Review filters — overly strict transmission, mileage, or seat filters can exclude all results.
- Verify that airport codes or city IDs are supported.
- Find the full lists in the /common location endpoints.
If you still receive empty results, try broadening the search criteria or temporarily removing filters.
Best practices
| Best practice | Description |
|---|---|
| ✅ Optimise for performance |
|
| ✅ Deliver relevant results |
|
| ✅ Maintain consistency |
|
- Car search use cases for search examples.
- Car details for static data.
- Filtering and sorting guide for best practices.
- Pagination guide for instructions on handling large datasets.