Skip to content
Last updated

Car rental tutorial

Follow this end-to-end tutorial to build a complete Search, look & book integration for car rentals using Demand API Beta version.


⏱️ Estimated time to complete: 30 – 45 minutes
🧪 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:
    1. Search for car rentals.
    2. Retrieve results and car rental details.
    3. Check availability.
    4. Display Terms and Conditions.
    5. Preview the booking.
    6. Create the reservation.
  • Code samples: Full request/response bodies with annotations.

Before you start

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.

Important

Search, look & book integration is currently available only to approved partners. Contact your Account Manager for more details.

Use case

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.

Authenticate every request

Include your API key token and your X-Affiliate-Id in every request. See the Authentication guide for details.


Integration overview

The Search, Look & Book flow consists of seven steps.

Search, look and book integration for cars

Booking flow

StepEndpointPurposeOutput
  1. Search
cars/searchSearch available rental cars.search_token, offer, car.id
  1. Retrieve details
/cars/suppliers
/cars/depots
/cars/details
Retrieve static reference data.Static car.id, supplier and depot information.
  1. Check availability
/cars/availabilityRetrieve the latest pricing, policies and optional products such as a third-party insurance.Live pricing, products, availability and quote_reference when insurance is available.
  1. Terms & Conditions
/cars/terms-and-conditionsDisplay legal information before booking.Rental conditions.
  1. Preview
/orders/previewValidate the booking before checkout.order_token
  1. Create booking
orders/createComplete the reservation.Confirmed booking.

Key identifiers

You'll use several identifiers throughout the integration.

Field
DescriptionUsed in
carVehicle model and supplier combination./cars/details
offerCommercial offer returned by search./cars/availability, /orders/preview
search_tokenSearch session context/cars/availability, /orders/preview, /cars/terms-and-conditions
quote_referenceInsurance quote identifier for selected insurance product./orders/preview
order_tokenEncapsulates 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.


Step 1 - Search for cars

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

Try it yourself

What to display

At this stage you should display enough information for travellers to compare available vehicles and choose the option that best suits their needs.

SectionDisplay
VehicleVehicle category, supplier, transmission, fuel type, passenger and luggage capacity.
PriceTotal price, currency, and any available discounts.
Rental policiesFuel policy, mileage policy, and cancellation policy.
InsuranceIndicate 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.

After this step

Store:

  • offer
  • car
  • search_token

These values are required throughout the rest of the booking flow.


Step 2 - Retrieve car details

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
}

Try it yourself

Build your results page

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.

After this step

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.


Step 3 - Check availability

Once a traveller selects an offer, call /cars/availability using the following values returned by /cars/search:

  • offer
  • search_token
  • currency

Note: The search_token expires after 90 mins.

{
  "offer": 664812451,
  "search_token": "your_search_token",
  "currency": "EUR"
}

Try it yourself

See the Cars availability guide for full step-by-step details.

After this step

  • Confirmed car availability.
  • Final price confirmation (price.total)
  • Available optional extras (products.id)
  • Insurance quote details (insurance) when available.

Add optional insurance (if 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_reference required when previewing and booking a car with insurance.

Insurance availability depends on the supplier and rental offer. Not all cars include optional insurance products.

Display optional insurance

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.


Step 4- Display Terms & Conditions

→ Use the cars/terms-and-conditions endpoint.

{
  "offer": "664812451", 
  "search_token": "12456895645246585",
  "currency": "EUR",
  "language": "es"
}

What to display

  • Damage excess and deposit amounts.
  • Accepted credit/debit cards.
  • Driver & licence requirements.
  • Mileage rules.
  • Included insurance and waivers.

Try it yourself

See the Terms and Conditions guide for details.


Step 5 - Preview the order

Important

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:

  • offer
  • search_token
  • currency
{
  "currency": "EUR",
  "car": {
    "offer": 664812451, 
    "search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7InNlYXJjaF9rZXkiOiJleUprY21sMlpYSnpRV2RsSWpvek1Dd2laSEp2Y0U5bVprUmhkR1ZVYVcxbElqb2lNakF5Tmkwd01TMHhOVlF4TVRvd05Ub3dNQ0lzSW1SeWIzQlBabVpNYjJOaGRHbHZiaUk2SWtKRFRpSXNJbVJ5YjNCUFptWk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY0dsamExVndSR0YwWlZScGJXVWlPaUl5TURJMkxUQXhMVEV3VkRFeE9qQTFPakF3SWl3aWNHbGphMVZ3VEc5allYUnBiMjRpT2lKQ1EwNGlMQ0p3YVdOclZYQk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY21WdWRHRnNSSFZ5WVhScGIyNUpia1JoZVhNaU9qVXNJbk5sY25acFkyVkdaV0YwZFhKbGN5STZXeUpUVlZCUVVrVlRVMTlFU1ZKRlExUmZVRUZaWDB4UFEwRk1YMVpGU0VsRFRFVlRJbDBzSW5OcFoyNWhkSFZ5WlNJNkltMVFURk5MVXpWbVlVMXRRbVE1V0ZGdGFIQm5MMkZvTTNKdFQyNDVVRXRGZGtnck5uaFpZV1V2YlZVOUluMD0iLCJib29rZXIiOnsiY291bnRyeSI6ImVzIn0sImRyaXZlcl9hZ2UiOjMwfSwiYXVkIjpbIi9jYXJzL2F2YWlsYWJpbGl0eSIsIi9vcmRlcnMvcHJldmlldyIsIi9jYXJzL3Rlcm1zLWFuZC1jb25kaXRpb25zIl0sImV4cCI6MTc2NDE3MzI0M30.cB9yzO8jwfWa-FGnChdUjvyMP_lzSrU9HnVjhsQnfSw"
  }
}

Note: The search_token expires after 90 minutes.

Try it yourself

After this step

  • order_token that encapsulates all the order details.
  • Use it on your orders/create request.
Attention

The order_token expires after 15 minutes. You must therefore call /orders/create within this time window.

Display your order preview page

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.


Step 6 - Create the order request

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

Security

Never store or log raw card details. All payment handling must comply with PCI requirements.

You must include:

  • order_token returned 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_receipt if 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
  }
}

Try it yourself

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


Integration completion checklist

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.

Next steps

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.


Curious to know more?