Follow this end-to-end tutorial to build a complete Search, look & book integration for car rentals using Demand API Beta version.
🧪 Version:Beta
- Purpose: Build a Search, look and book flow for car rentals using Beta.
- Who this is for: Managed Affiliated Partners integrating car rentals into their booking flow (currently part of the pilot programme).
- Prerequisites: Basic understanding of Booking.com Demand API.
- Integration type: Search, look and book flow.
- You'll learn how to:
- Search for car rentals.
- Retrieve results and car rental details.
- Check availability.
- Display Terms and Conditions.
- Preview the booking.
- Create the reservation.
- Code samples: Full request/response bodies with annotations.
Before following this tutorial, complete the Getting started prerequisites.
Make sure you have:
✓ A valid API key token.
✓ Your X-Affiliate-Id
✓ Access to the try out console.
Search, look & book integration is currently available only to approved partners. Contact your Account Manager for more details.
Throughout this tutorial we'll follow a single booking journey.
A traveller wants to rent a car at Barcelona Airport (BCN)
Pickup and Drop-off: Barcelona Airport (BCN) Duration: 3 days, 2 adults, unlimited mileage preferred.
We'll progressively build the booking flow using the data returned at each step.
Include your API key token and your X-Affiliate-Id in every request. See the Authentication guide for details.
The Search, Look & Book flow consists of seven steps.

| Step | Endpoint | Purpose | Output |
|---|---|---|---|
| cars/search | Search available rental cars. | search_token, offer, car.id |
| /cars/suppliers /cars/depots /cars/details | Retrieve static reference data. | Static car.id, supplier and depot information. |
| /cars/availability | Retrieve the latest pricing, policies and optional products such as a third-party insurance. | Live pricing, products, availability and quote_reference when insurance is available. |
| /cars/terms-and-conditions | Display legal information before booking. | Rental conditions. |
| /orders/preview | Validate the booking before checkout. | order_token |
| orders/create | Complete the reservation. | Confirmed booking. |
You'll use several identifiers throughout the integration.
Field | Description | Used in |
|---|---|---|
car | Vehicle model and supplier combination. | /cars/details |
offer | Commercial offer returned by search. | /cars/availability, /orders/preview |
search_token | Search session context | /cars/availability, /orders/preview, /cars/terms-and-conditions |
quote_reference | Insurance quote identifier for selected insurance product. | /orders/preview |
order_token | Encapsulates all order details and validated pricing from the preview stage. | /orders/create |
Treat all identifiers as opaque values.
Do not modify or reconstruct them. Always send them exactly as returned by the API.
→ Call the cars/search to discover available rental cars.
Example search request:
{
"booker": {
"country": "es"
},
"language": "en-gb",
"currency": "EUR",
"driver": {
"age": 30
},
"route": {
"pickup": {
"datetime": "2026-11-10T11:05:00",
"location": {
"airport": "BCN"
}
},
"dropoff": {
"datetime": "2026-11-15T11:05:00",
"location": {
"airport": "BCN"
}
}
}
}Key request fields:
route— Pickup and drop-off locations.driver.age— Required for pricing.booker.country— Determines market-specific pricing.currency— Preferred display currency.
Use the location airports and countries endpoints to resolve airport codes and ISO country codes before performing searches.
At this stage you should display enough information for travellers to compare available vehicles and choose the option that best suits their needs.
| Section | Display |
|---|---|
| Vehicle | Vehicle category, supplier, transmission, fuel type, passenger and luggage capacity. |
| Price | Total price, currency, and any available discounts. |
| Rental policies | Fuel policy, mileage policy, and cancellation policy. |
| Insurance | Indicate whether optional insurance is available. |
The search response contains only summary insurance information. Retrieve the complete insurance quote from /cars/availability after the traveller selects a vehicle.
Store:
offercarsearch_token
These values are required throughout the rest of the booking flow.
The search response intentionally contains only summary information.
Use the static car reference endpoints to retrieve additional reference data that can be cached and reused.
- /cars/details
- /cars/suppliers
- /cars/depots
These endpoints return static data.
Booking.com recommends storing this information locally to reduce API calls and improve performance.
See the Car rental static data guide for storing recommendations.
→ Call /cars/details using your regular synchronisation process.
{
"last_modified": "2026-08-22T10:00:00+00:00",
"maximum_results": 100
}Combine the dynamic search results with the static vehicle information to display a richer product page.
Recommended information includes:
- Vehicle photo.
- Transmission.
- Fuel type.
- Passenger capacity.
- Luggage capacity.
- Supplier branding.
- Depot information.
You now have everything needed to build your search results and vehicle details pages.
The traveller selects the vehicle they want to rent and proceeds to check live availability.
Once a traveller selects an offer, call /cars/availability using the following values returned by /cars/search:
offersearch_tokencurrency
Note: The search_token expires after 90 mins.
{
"offer": 664812451,
"search_token": "your_search_token",
"currency": "EUR"
}
See the Cars availability guide for full step-by-step details.
- Confirmed car availability.
- Final price confirmation (
price.total) - Available optional extras (
products.id) - Insurance quote details (
insurance) when available.
Some car rental offers include additional insurance products that travellers can select before completing their booking.
→ Check the insurance information returned in the cars/availability endpoint.
Example availability response when optional insurance is available:
{
"insurance": {
"quote_reference": "ABC123",
"name": "Full Protection",
"id": "999",
"price": {
"display": {
"value": 144.70,
"currency": "GBP"
},
"pay": {
"value": 144.70,
"currency": "EUR",
"timing": "pay_online_now"
}
},
"coverage_amount": {
"value": 2000,
"currency": "GBP"
},
"ipid_document_url": "https://...",
"policy_document_url": "https://..."
}
}The insurance object represents a bookable insurance quote, including:
- Final price breakdown.
- Coverage details.
- Insurance documentation, such as the Insurance Product Information Document (IPID) and Policy document.
- A
quote_referencerequired when previewing and booking a car with insurance.
Insurance availability depends on the supplier and rental offer. Not all cars include optional insurance products.
When displaying optional insurance to the traveller:
Do | Description |
|---|---|
| Show insurance as an optional add-on. | Clearly indicate the insurance price and payment timing. |
| Highlight benefits. | For example, display the insurance name and coverage level. |
| Provide access to legal documentation. | Include links to the IPID and Policy document before purchase. |
| Display coverage amount. | Help travellers understand the protection level provided. |
When a traveller selects insurance, store the returned quote_reference.
Include this value in the order preview request to validate the selected insurance before booking.
See the Cars insurance guide for full details about retrieving, displaying and booking insurance.
→ Use the cars/terms-and-conditions endpoint.
{
"offer": "664812451",
"search_token": "12456895645246585",
"currency": "EUR",
"language": "es"
}- Damage excess and deposit amounts.
- Accepted credit/debit cards.
- Driver & licence requirements.
- Mileage rules.
- Included insurance and waivers.
See the Terms and Conditions guide for details.
To process bookings directly in your application (Search, look & book flow) you must use the /orders API collection (currently in Beta). Requires approval and partner agreement.
→ Use /orders/preview to confirm:
- What will be booked.
- Price & currency.
- Payment timing.
- Cancellation & policies.
To construct the orders/preview request, you need the same values returned in previous steps:
offersearch_tokencurrency
{
"currency": "EUR",
"car": {
"offer": 664812451,
"search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7InNlYXJjaF9rZXkiOiJleUprY21sMlpYSnpRV2RsSWpvek1Dd2laSEp2Y0U5bVprUmhkR1ZVYVcxbElqb2lNakF5Tmkwd01TMHhOVlF4TVRvd05Ub3dNQ0lzSW1SeWIzQlBabVpNYjJOaGRHbHZiaUk2SWtKRFRpSXNJbVJ5YjNCUFptWk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY0dsamExVndSR0YwWlZScGJXVWlPaUl5TURJMkxUQXhMVEV3VkRFeE9qQTFPakF3SWl3aWNHbGphMVZ3VEc5allYUnBiMjRpT2lKQ1EwNGlMQ0p3YVdOclZYQk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY21WdWRHRnNSSFZ5WVhScGIyNUpia1JoZVhNaU9qVXNJbk5sY25acFkyVkdaV0YwZFhKbGN5STZXeUpUVlZCUVVrVlRVMTlFU1ZKRlExUmZVRUZaWDB4UFEwRk1YMVpGU0VsRFRFVlRJbDBzSW5OcFoyNWhkSFZ5WlNJNkltMVFURk5MVXpWbVlVMXRRbVE1V0ZGdGFIQm5MMkZvTTNKdFQyNDVVRXRGZGtnck5uaFpZV1V2YlZVOUluMD0iLCJib29rZXIiOnsiY291bnRyeSI6ImVzIn0sImRyaXZlcl9hZ2UiOjMwfSwiYXVkIjpbIi9jYXJzL2F2YWlsYWJpbGl0eSIsIi9vcmRlcnMvcHJldmlldyIsIi9jYXJzL3Rlcm1zLWFuZC1jb25kaXRpb25zIl0sImV4cCI6MTc2NDE3MzI0M30.cB9yzO8jwfWa-FGnChdUjvyMP_lzSrU9HnVjhsQnfSw"
}
}Note: The search_token expires after 90 minutes.
order_tokenthat encapsulates all the order details.- Use it on your orders/create request.
The order_token expires after 15 minutes. You must therefore call /orders/create within this time window.
You can now present the traveller with the final booking summary, including:
- What they are booking.
- What they will have to pay.
- When and how they can pay it.
- And the cancellation terms that will apply.
→ Select the data from your /orders/preview response to provide the appropriate information on your preview page.
After checking the details of the order, the traveller supplies their payment information and any other needed information, and proceeds with the booking.
→ Call /orders/create to create and confirm the booking using the order_token returned by /orders/preview. Include the traveller details and the selected payment option.
Never store or log raw card details. All payment handling must comply with PCI requirements.
You must include:
order_tokenreturned by /orders/preview.- Driver details (
car.driver). - Booker details (
booker). - The selected payment information (
payment), including:timing- Use one of the payment timings returned in the /orders/preview response.method.- Card details when paying by card.
include_receiptif you want to receive a payment receipt URL.
Your request body should look like this example.
{
"order_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.car-preview-token",
"car": {
"driver": {
"title": "mr",
"first_name": "John",
"last_name": "Doe",
"telephone": "+44 20 1234 5678",
"address": {
"address_line1": "221B Baker Street",
"address_line2": "",
"city": "London",
"country": "gb",
"postcode": "NW1 6XE"
}
},
"label": "summer_campaign_2025"
},
"booker": {
"address": {
"address_line": "221B Baker Street",
"city": "London",
"country": "gb",
"post_code": "NW1 6XE"
},
"company": "ACME Travel",
"email": "john.doe@example.com",
"language": "en-gb",
"name": {
"first_name": "John",
"last_name": "Doe"
},
"telephone": "+44 20 1234 5678"
},
"payment": {
"timing": "pay_online_now",
"method": "card",
"card": {
"cardholder": "John Doe",
"number": "4111111111111111",
"expiry_date": "12/28",
"cvc": "123",
"authentication": {
"3d_secure": {
"authentication_value": "AAABBJg0VhI0VniQEjRGAAAAAAA=",
"eci": "05",
"transaction": "3ds-trans-123456"
}
}
},
"include_receipt": true
}
}
🎉 Congratulations! Your booking request has been submitted successfully.
The order has been created and the booking is now being processed by the supplier.
After receiving the response, call /orders/details/cars/live to retrieve the latest booking status and determine whether the booking has been confirmed.
You should now support:
Checklist | |
|---|---|
| ☑ | Searching cars by route and date. |
| ☑ | Displaying real prices & availability. |
| ☑ | Optional extras and insurance. |
| ☑ | Mandatory pre-booking T&Cs. |
| ☑ | Order preview with payment timing and method. |
| ☑ | Booking creation and receipt generation. |
After creating the order, retrieve the latest booking status and reservation details using /orders/details/cars/live.
This endpoint lets you:
- Check whether the booking has been confirmed.
- Retrieve the supplier confirmation number.
- Display pickup instructions.
- Retrieve insurance documents (if purchased).
- Display the latest booking details to the traveller.
Continue with the Post-booking section to learn how to manage confirmed bookings.
- Check the Orders section for more tips on how to preview and create your orders.
- Learn more about Payment methods.
- Explore the Car rental API specifications.