# Car rental tutorial

**Follow this end-to-end tutorial to learn how to integrate the [/cars API collection](/demand/docs/cars/overview) into your client application for a complete Search, look and book flow using Demand API v3.2**

div
strong
⏱️ Estimated time to complete:
 25 – 40 minutes 
br
br
span
v3.2
 | 
span
3.2 Beta
ul
li
strong
Purpose:
 Build a Search → Look → Book flow for car rentals using v3.2.
li
strong
Who this is for:
 Managed Affiliated Partners integrating car rentals into their booking flow (currently part of the pilot programme).
li
strong
Prerequisites:
 Basic understanding of Booking.com Demand API.
li
strong
Integration type:
 Search, look and book flow.
li
strong
You´ll learn how to:
ol
li
Search for car rentals.
li
Retrieve results and car rental details.
li
Check availability.
li
Display Terms and Conditions.
li
Create bookings in your app via the /orders endpoints.
li
strong
Code samples:
 Full request/response bodies with annotations.
## Before you start

Make sure you have completed the [prerequisites](/demand/docs/getting-started/try-out-the-api#before-you-start---prerequisites).

✓ A [valid API key token](/demand/docs/development-guide/authentication/#api-key-management).
✓ Your `X-Affiliate-Id`
✓ Open the [try out console](/demand/docs/getting-started/try-out-the-api#try-out-console).

Important
Search, look & book requires approval, a valid business case, and an appropriate partner agreement with Booking.com.

## Use case

The following use case represents a typical car-rental scenario:

> *A traveller wants to book a car rental in Barcelona, picking up and dropping off at Barcelona Airport (BCN).* 
*Duration: 3 days, 2 adults, unlimited mileage preferred.*


Use this scenario when following each step of the guide.

Authenticate every request
Include your API key token and your `X-Affiliate-Id` in every request. See [Authentication](/demand/docs/development-guide/authentication/).

## Integration overview

Search, look and book integration for cars
### Endpoints flow and key fields

| Step | Endpoint | Result | You will need next |
|  --- | --- | --- | --- |
| 1. Search for vehicles (v3.2)

 | [cars/search](/demand/docs/open-api/3.2/demand-api/cars/search) | Returns available cars with prices and basic details.* Key fields: `search_token`, `offer`, `car.id`

 | Availability, T&Cs. |
| 1. Retrieve details (v3.2)

 | [/cars/suppliers](/demand/docs/open-api/3.2/demand-api/cars/suppliers)[/cars/depots](/demand/docs/open-api/3.2/demand-api/cars/depots)[/cars/details](/demand/docs/open-api/3.2/demand-api/cars/details) | Access vehicle, supplier, and depot information (static data).* Key fields: Static `car.id`, `supplier` info, etc.

 | UI rendering. |
| 1. Check availability (3.2 Beta)

 | [/cars/availability](/demand/docs/open-api/3.2-beta/demand-api/cars/availability) | Returns full price breakdown and optional extras (e.g., child seat, GPS).* Key fields: Live pricing, `products`

 | T&Cs, Preview. |
| 1. Display Terms & Conditions (3.2 Beta)

 | [/cars/terms-and-conditions](/demand/docs/open-api/3.2-beta/demand-api/cars/terms-and-conditions) | Displays T&Cs for selected vehicle before booking.* Key fields: Displayable legal info.

 | Preview. |
| 1. Preview the order (3.2 Beta)

 | [/orders/preview](/demand/docs/open-api/3.2-beta/demand-api/orders/orders/preview) | Preview of payment, details, etc.* Key field:  `order_token`

 | Create order. |
| 1. Create order (3.2 Beta)

 | [orders/create](/demand/docs/open-api/3.2-beta/demand-api/orders/create) | Complete the booking within your platform.* Key fields:  `order.id`, `reservation_id`

 | Post-booking operations. |


### Identifier glossary

| Field | Meaning | Used in |
|  --- | --- | --- |
| `car` | Car model + fleet identifier | /cars/details |
| `offer` | Specific commercial offer | Availability, Preview, Create |
| `search_token` | Search session context | Availability, T&Cs, Preview |
| `order_token` | Locked booking snapshot | /orders/create |


## Step 1 - Search for car rentals

→ Use the [cars/search](/demand/docs/open-api/3.2/demand-api/cars/search) endpoint to find car rentals.

Search request
Your search request may look like this:


```json
{
    "booker": {
      "country": "es"
    },
    "language": "en-gb",
    "currency": "EUR",
    "driver": {
      "age": 30
    },
    "route": {
      "pickup": {
        "datetime": "2026-01-10T11:05:00",
        "location": {
          "airport": "BCN"
        }
      },
      "dropoff": {
        "datetime": "2026-01-15T11:05:00",
        "location": {
          "airport": "BCN"
        }
      }
    }
  }
```

Common input fields:

* route. pickup & dropoff locations and times.
* `driver.age` — Required for pricing. May affect coverage/taxes.
* `booker.country` — Pricing depends on user context.


City and country lookup
* Use the location [airports](/demand/docs/open-api/3.2/demand-api/commonlocations/common/locations/airports) and [countries](//demand/docs/open-api/3.2/demand-api/commonlocations/common/locations/countries) endpoints to resolve the IDs and ISO‑2 codes.
* Country codes must be lowercase (e.g., nl).


→ [Try it yourself](/demand/docs/open-api/3.2/demand-api/cars/search)

Search response
The response contains a list of car rental options:


```json
{
    "request_id": "01kb09hr0tn1fhnetsc1j456nj",
    "data": [
        {
            "car": 56154,
            "categories": [
                "suvs",
                "medium",
                "large"
            ],
            "deal": {
                "discount_percentage": 20,
                "public_price": 104.87,
                "tags": []
            },
            "offer": 664812451,
            "policies": {
                "cancellation": {
                    "type": "free_cancellation",
                    "details": {
                        "context": "before_pickup",
                        "duration": "PT48H"
                    }
                },
                "damage_excess": {
                    "amount": 1200.00,
                    "currency": "EUR"
                },
                "deposit": {
                    "amount": 1200.00,
                    "currency": "EUR"
                },
                "insurance_package": "inclusive",
                "payment": {
                    "timing": "pay_online_now"
                },
                "fuel": "return_same",
                "mileage": {
                    "amount": 0.35,
                    "currency": "EUR",
                    "distance_limit": 1250.00,
                    "distance_unit": "kilometers",
                    "type": "limited"
                },
                "theft_excess": {
                    "amount": 1200.00,
                    "currency": "EUR"
                }
            },
            "price": {
                "currency": "EUR",
                "total": 83.90,
                "extra_charges": []
            },
            "route": {
                "dropoff": {
                    "depot": 184903,
                    "depot_location_type": "in_terminal"
                },
                "pickup": {
                    "depot": 184903,
                    "depot_location_type": "in_terminal"
                }
            },
            "supplier": 187,
            "url": {
                "app": "booking://cars/search?affiliate_id=956509&affiliateCode=bcars-dapi&driver_age=30&do_time=2026-01-15T11:05&do_loc_iata=BCN&do_loc_name=Barcelona%20El%20Prat%20Airport&pu_time=2026-01-10T11:05&pu_loc_iata=BCN&pu_loc_name=Barcelona%20El%20Prat%20Airport&expand_search=false",
                "web": "https://cars.booking.com/search-results?vehicleId=664812451&vehicleInfo.vehicle.id=664812451&aid=956509&affiliateCode=bcars-dapi&prefcurrency=EUR&preflang=es&driverAge=30&cor=es&doHour=11&doMinute=5&doDay=15&doMonth=1&doYear=2026&dropLocationIata=BCN&dropLocationName=Barcelona%20El%20Prat%20Airport&puHour=11&puMinute=5&puDay=10&puMonth=1&puYear=2026&locationIata=BCN&locationName=Barcelona%20El%20Prat%20Airport"
            }
        },
        {
            "car": 281688,
            "categories": [
                "small"
            ],
            "deal": {
                "discount_percentage": 10,
                "public_price": 59.09,
                "tags": []
            },
            "offer": 770848541,
            "policies": {
                "cancellation": {
                    "type": "free_cancellation",
                    "details": {
                        "context": "before_pickup",
                        "duration": "PT48H"
                    }
                },
                "damage_excess": {
                    "amount": 1000.00,
                    "currency": "EUR"
                },
                "deposit": {
                    "amount": 1000.00,
                    "currency": "EUR"
                },
                "insurance_package": "inclusive",
                "payment": {
                    "timing": "pay_online_now"
                },
                "fuel": "return_same",
                "mileage": {
                    "amount": 0.50,
                    "currency": "EUR",
                    "distance_limit": 1250.00,
                    "distance_unit": "kilometers",
                    "type": "limited"
                },
                "theft_excess": {
                    "amount": 1000.00,
                    "currency": "EUR"
                }
            },
            "price": {
                "currency": "EUR",
                "total": 53.18,
                "extra_charges": []
            },
            "route": {
                "dropoff": {
                    "depot": 246985,
                    "depot_location_type": "shuttle_bus"
                },
                "pickup": {
                    "depot": 246985,
                    "depot_location_type": "shuttle_bus"
                }
            },
            "supplier": 3171,
            "url": {
                "app": "booking://cars/search?affiliate_id=956509&affiliateCode=bcars-dapi&driver_age=30&do_time=2026-01-15T11:05&do_loc_iata=BCN&do_loc_name=Barcelona%20El%20Prat%20Airport&pu_time=2026-01-10T11:05&pu_loc_iata=BCN&pu_loc_name=Barcelona%20El%20Prat%20Airport&expand_search=false",
                "web": "https://cars.booking.com/search-results?vehicleId=770848541&vehicleInfo.vehicle.id=770848541&aid=956509&affiliateCode=bcars-dapi&prefcurrency=EUR&preflang=es&driverAge=30&cor=es&doHour=11&doMinute=5&doDay=15&doMonth=1&doYear=2026&dropLocationIata=BCN&dropLocationName=Barcelona%20El%20Prat%20Airport&puHour=11&puMinute=5&puDay=10&puMonth=1&puYear=2026&locationIata=BCN&locationName=Barcelona%20El%20Prat%20Airport"
            }
  "metadata": {
    "next_page": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7Im1heGltdW1fcmVzdWx0cyI6MTAsIm9mZnNldCI6MTB9LCJhdWQiOiJDQVJTX1NVUFBMSUVSUyIsImV4cCI6MTY4MzY0NzMwNX0.y7NmH48mm7lImd2WxsHdotj6n-dVQAzJCGCnIJCKy3A",
    "total_results": 122
  },
  "search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7ImJvb2tlciI6eyJjb3VudHJ5IjoidXMifX0sImF1ZCI6Ii9ob3RlbHMvc2VhcmNoIiwiZXhwIjoxNzUwMDAwMDAwfQ.XYZ123AbcDefGHIjklMNOpqrsTUVwxYZ456789"
}
```

Each car group includes:

| 
| Key parameters | Description | Use |
| `car` | ID for car model + supplier (fleet) combination. | cars/details lookup. |
| `offer` | ID for a rental offer | /cars/availability, orders/preview and orders/create requests. |
| `categories` | Vehicle size/type labels (e.g., small, medium, large, suvs, estate, premium, carriers). | UI filtering. |
| `deal` | Promotional data (when available). Includes discount percentage, deal tags, and the original (public) price. | UI badge pricing. |
| `policies` | Cancellation, mileage, fuel, etc (`deposit`, `damage_excess`, `theft_excess`, `mileage.amount`) with amount and currency.* In the example, there is a free cancellation policy valid up to 48 hours (PT48H) before pickup. See [Duration conventions](/demand/docs/development-guide/code-conventions#durations) for more details.

 | Display rules. |
| `policies.payment` | The timing when the payment takes place. | UI display: `pay_online_now`, `pay_partial_online_now`, `pay_at_pickup`. |
| `price.total` | Final displayed price* Includes: any extra charge, and `currency` (EUR in example).

 | Result cards. |
| `route.pickup`/ `dropoff` | Pickup/dropoff depot location. | Map/UX |
| `supplier` | Rental provider ID. | /cars/suppliers lookup. |
| `metadata` | All results are [paginated](/demand/docs/development-guide/pagination) for better readability. | Data organisation. |
| `search_token` | It includes stored search context (such as the route, filters, or booker country) | Use it in next steps. |


See the [car rental search guide](/demand/docs/cars/search-for-cars) for more examples and tips.

**After this step you should have:**

- `car.id`
- `offer`
- `search_token`


Use them in next steps requests.

## Step 2 - Retrieve car details

Retrieve static reference data for cars, depots, and suppliers.
You can use stored data (recommended for performance) or call the endpoints directly.

See [Cache static data guide](/demand/docs/cars/cars-static-data) for details

Example:
→ Call [/cars/details](/demand/docs/open-api/3.2/demand-api/cars/details) to get additional data about the cars.

cars/details request

```json
{
    "last_modified": "2025-11-22T10:00:00+00:00",
    "maximum_results": 100
}
```

→ [Try it yourself](/demand/docs/open-api/3.2/demand-api/cars/details)

cars/details response
For each car option, it returns:


```json
{
    "request_id": "01kb0dejrepkvprn7mf8cxb33g",
    "data": [
        {
            "id": 233256,
            "capacity": {
                "bags": {
                    "large": 1,
                    "small": 1
                },
                "doors": "4",
                "seats": "5"
            },
            "country": "be",
            "features": [
                "air_conditioner"
            ],
            "image": "https://cdn2.rcstatic.com/images/car_images/default_lrg.jpg",
            "make": "citroen",
            "model": "e-c3",
            "specification": {
                "code": "ECAE",
                "description": "economy",
                "fuel": "electric",
                "transmission": "automatic"
            },
            "supplier": 102
        },
```

**Build your results and vehicle details page**

→ Combine data from:

* cars/search - summary.
* Static data - full details.


Recommended essentials per product:

* Vehicle photo and category.
* Fuel and mileage policy.
* Supplier and desk location.
* Deposit / deductible.
* Cancellation rules.


**After this step you should have:**

* Car `id` details.
* `supplier` id for branding.


> *The traveller reviews the search results and selects the car they’re interested in.*.
*Now they want to see availability.*


## Step 3 - Check availability

→ Use the [car's availability endpoint](/demand/docs/open-api/3.2-beta/demand-api/cars/availability) with the `offer`, `search_token` and `currency` from Step 1.

Note: The `search_token` expires after 90 mins.

Cars availability request

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

→ ([Try it yourself](/demand/docs/open-api/3.2-beta/demand-api/cars/availability))

Cars availability response
Key response fields:

* `policies` – cancellation, insurance, deposit, mileage, fuel.
* `price` – base, total, extra charges.
* `products` – optional extras (child seat, GPS, additional driver).


Example:


```json
{
    "request_id": "01kb0at8s75xpngj1gg88mpbrt",
    "data": {
        "offer": 664812451,
        "currency": "EUR",
        "policies": {
            "cancellation": {
                "type": "free_cancellation",
                "details": {
                    "context": "before_pickup",
                    "duration": "PT48H"
                }
            },
            "damage_excess": {
                "amount": 1200.00
            },
            "deposit": {
                "amount": 1200.00
            },
            "insurance_package": "inclusive",
            "payment": {
                "timing": "pay_online_now"
            },
            "fuel": "return_same",
            "mileage": {
                "distance_limit": 1250.00,
                "distance_unit": "kilometers",
                "amount": 0.35,
                "type": "limited"
            },
            "theft_excess": {
                "amount": 1200.00
            }
        },
        "price": {
            "base": 83.90,
            "total": 83.90,
            "extra_charges": []
        },
        "products": [
            {
                "id": "13985137776010",
                "type": "additional_driver",
                "maximum_available": 3,
                "mode": "each_per_rental",
                "price": {
                    "amount": 47.50,
                    "prepayment": false
                }
            },
            {
                "id": "13985139756010",
                "type": "baby_seat",
                "maximum_available": 2,
                "mode": "each_per_rental",
                "price": {
                    "amount": 129.50,
                    "prepayment": false
                }
            },
            {
                "id": "13985141756010",
                "type": "child_booster_seat",
                "maximum_available": 2,
                "mode": "each_per_rental",
                "price": {
                    "amount": 129.50,
                    "prepayment": false
                }
            },
            {
                "id": "14001801296010",
                "type": "child_seat",
                "maximum_available": 2,
                "mode": "each_per_rental",
                "price": {
                    "amount": 129.50,
                    "prepayment": false
                }
            },
            {
                "id": "13985145706010",
                "type": "gps",
                "maximum_available": 1,
                "mode": "per_rental",
                "price": {
                    "amount": 44.75,
                    "prepayment": false
                }
            }
        ],
        "deal": null,
        "supplier": 187,
        "depot": 31061,
        "search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7InNlYXJjaF9rZXkiOiJleUprY21sMlpYSnpRV2RsSWpvek1Dd2laSEp2Y0U5bVprUmhkR1ZVYVcxbElqb2lNakF5Tmkwd01TMHhOVlF4TVRvd05Ub3dNQ0lzSW1SeWIzQlBabVpNYjJOaGRHbHZiaUk2SWtKRFRpSXNJbVJ5YjNCUFptWk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY0dsamExVndSR0YwWlZScGJXVWlPaUl5TURJMkxUQXhMVEV3VkRFeE9qQTFPakF3SWl3aWNHbGphMVZ3VEc5allYUnBiMjRpT2lKQ1EwNGlMQ0p3YVdOclZYQk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY21WdWRHRnNSSFZ5WVhScGIyNUpia1JoZVhNaU9qVXNJbk5sY25acFkyVkdaV0YwZFhKbGN5STZXeUpUVlZCUVVrVlRVMTlFU1ZKRlExUmZVRUZaWDB4UFEwRk1YMVpGU0VsRFRFVlRJbDBzSW5OcFoyNWhkSFZ5WlNJNkltMVFURk5MVXpWbVlVMXRRbVE1V0ZGdGFIQm5MMkZvTTNKdFQyNDVVRXRGZGtnck5uaFpZV1V2YlZVOUluMD0iLCJib29rZXIiOnsiY291bnRyeSI6ImVzIn0sImRyaXZlcl9hZ2UiOjMwfSwiYXVkIjpbIi9jYXJzL2F2YWlsYWJpbGl0eSIsIi9vcmRlcnMvcHJldmlldyIsIi9jYXJzL3Rlcm1zLWFuZC1jb25kaXRpb25zIl0sImV4cCI6MTc2NDE3MzI0M30.cB9yzO8jwfWa-FGnChdUjvyMP_lzSrU9HnVjhsQnfSw"
    }
}
```

See the [Cars availability guide](/demand/docs/cars/3.2/check-cars-availability) for full step-by-step details.

**After this step you should have:**

* Final price confirmation (`price.total`)
* Optional extras (`products.id`)


> *The traveller reviews the results and selects a car.*


## Step 4 - Display Terms & Conditions (Beta)

→ Use the [cars/terms-and-conditions](/demand/docs/open-api/3.2-beta/demand-api/cars/terms-and-conditions).

Request

```json
{
  "offer": "664812451", 
  "search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7InNlYXJjaF9rZXkiOiJleUprY21sMlpYSnpRV2RsSWpvek1Dd2laSEp2Y0U5bVprUmhkR1ZVYVcxbElqb2lNakF5Tmkwd01TMHhOVlF4TVRvd05Ub3dNQ0lzSW1SeWIzQlBabVpNYjJOaGRHbHZiaUk2SWtKRFRpSXNJbVJ5YjNCUFptWk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY0dsamExVndSR0YwWlZScGJXVWlPaUl5TURJMkxUQXhMVEV3VkRFeE9qQTFPakF3SWl3aWNHbGphMVZ3VEc5allYUnBiMjRpT2lKQ1EwNGlMQ0p3YVdOclZYQk1iMk5oZEdsdmJsUjVjR1VpT2lKSlFWUkJJaXdpY21WdWRHRnNSSFZ5WVhScGIyNUpia1JoZVhNaU9qVXNJbk5sY25acFkyVkdaV0YwZFhKbGN5STZXeUpUVlZCUVVrVlRVMTlFU1ZKRlExUmZVRUZaWDB4UFEwRk1YMVpGU0VsRFRFVlRJbDBzSW5OcFoyNWhkSFZ5WlNJNkltMVFURk5MVXpWbVlVMXRRbVE1V0ZGdGFIQm5MMkZvTTNKdFQyNDVVRXRGZGtnck5uaFpZV1V2YlZVOUluMD0iLCJib29rZXIiOnsiY291bnRyeSI6ImVzIn0sImRyaXZlcl9hZ2UiOjMwfSwiYXVkIjpbIi9jYXJzL2F2YWlsYWJpbGl0eSIsIi9vcmRlcnMvcHJldmlldyIsIi9jYXJzL3Rlcm1zLWFuZC1jb25kaXRpb25zIl0sImV4cCI6MTc2NDE3MzI0M30.cB9yzO8jwfWa-FGnChdUjvyMP_lzSrU9HnVjhsQnfSw",
  "currency": "EUR",
  "language": "es"
}
```

Response

```json
{
    "request_id": "01kb0ca9q1cvje0t98sk9xxqyv",
    "data": {
        "key_info": {
            "common": {
                "credit_cards_allowed": true,
                "debit_cards_allowed": true,
                "driver_age": 30,
                "insurance_available": false,
                "rental_duration": 5
            },
            "damage_excess": {
                "content": [
                    "If the car's bodywork gets damaged, the most you'll pay towards repairs covered by the Collision Damage Waiver is the damage excess (1200.0 EUR).",
                    "This cover is only valid if you stick to the terms of the rental agreement. It doesn't cover other parts of the car (e.g. windows, wheels, interior or undercarriage), or charges (e.g. for towing or off-road time), or anything in the car (e.g. child seats, GPS devices or personal belongings)."
                ],
                "excess_value": "1200.0 EUR",
                "subtitle": "1200.0 EUR",
                "title": "Damage Excess"
            },
            "deposit": {
                "accepted_cards": [
                    {
                        "title": "MasterCard",
                        "type": "Mastercard"
                    },
                    {
                        "title": "Visa",
                        "type": "Visa"
                    }
                ],
                "accepted_cards_title": "Accepted cards",
                "content": [
                    "At pick-up, the main driver will leave a refundable security deposit of 1200.0 EUR on their credit or debit card."
                ],
                "subtitle": "1200.0 EUR",
                "title": "Security deposit"
            },
            "disclaimers": [
                "Please see the Service Provider’s full terms and conditions below, which include the full name and company registered address of your Service Provider, information on and fees of extra products and services purchasable at the counter or based on your use of the rental, such as driving cross border and, if any, pick-up and drop-off grace periods."
            ],
            "driver_and_license": {
                "needed_items": [
                    "Passport or national ID card",
                    "Driving licence",
                    "Credit or debit card"
                ],
                "title": "Driver & licence requirements",
                "top_text": "When you pick the car up, you'll need:"
            },
            "mileage": {
                "content": "If you drive more than 1250.0 kilometres during your rental, you'll pay 0.35 EUR for each additional kilometre when you drop your car off.",
                "subtitle": "1250.0 kilometres per rental",
                "title": "Mileage"
            }
        },
        "terms": [
            {
                "type": "chapters",
                "title": "Included in the rental price",
                "text": null,
                "children": [
                    {
                        "type": "sections",
                        "title": "Insurance, Covers and Waivers",
                        "text": null,
                        "children": [
                            {
                                "type": "clauses",
                                "title": "Insurance Information",
                                "text": null,
                                "children": [
                                    {
                                        "type": "sub_clauses",
                                        "title": null,
                                        "text": null,
                                        "children": [
                                            {
                                                "type": "clause_options",
                                                "title": null,
                                                "text": "Insurance information<br /> All rental cars must have Collision Damage Waiver (CDW) and Theft Protection (TP). Each policy will be either: <ul> <li>included or</li> <li>purchasable from the rental company, or</li> <li> provided by another company (e.g. your credit card company).</li> </ul>",
                                                "children": []
                                            }
                                        ]
                                    }
                                ]
                            },
                            {
                                "type": "clauses",
                                "title": "Collision Damage Waiver (CDW)",
                                "text": null,
                                "children": [
                                    {
                                        "type": "sub_clauses",
                                        "title": null,
                                        "text": null,
                                        "children": [
                                            {
                                                "type": "clause_options",
                                                "title": null,
                                                "text": "If the car’s bodywork gets damaged, the most you’ll pay towards repairs covered by the Collision Damage Waiver is the damage excess. \nThis cover is only valid if you stick to the terms of the rental agreement. It doesn’t cover other parts of the car (e.g. glass, wheels, interior, roof or undercarriage), or charges (e.g. for towing or off-road time), or anything in the car (e.g. child seats, GPS devices or personal belongings).",
                                                "children": []
                                            }
                                        ]
                                    }
                                ]
                            },
```

See guides for full responses.

**Highlights to display:**

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


→  [Try it yourself](/demand/docs/open-api/3.2-beta/demand-api/cars/terms-and-conditions)

To process bookings directly in your application (Search, look & book flow) you must use the [/orders API collection](/demand/docs/open-api/3.2-beta/demand-api/orders) (currently in Beta).

Important
Requires approval and partner agreement.

## Step 5 - Preview the order

→ Use [/orders/preview](/demand/docs/open-api/3.2-beta/demand-api/orders/orders/preview) to confirm:

* What will be booked.
* Price & currency.
* Payment timing.
* Cancellation & policies.


Request
To construct the orders/preview request, you need the same values returned in previous steps:

* `offer`
* `search_token`
* `currency`



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

Note: The `search_token` expires after 90 minutes.

→ [Try it yourself](/demand/docs/open-api/3.2-beta/demand-api/orders/orders/preview)

Response
The orders/preview response contains:


```json
{
  "request_id": "01fr9ez700exycb98w90w5r9sh",
  "data": {
    "car": {
      "offer": 123456789,
      "currency": {
        "booker": "EUR",
        "payment": "EUR"
      },
      "price": {
        "base": {
          "display": {
            "value": 129.99,
            "currency": "EUR",
            "timing": "pay_at_pickup"
          },
          "pay": {
            "value": 129.99,
            "currency": "EUR",
            "timing": "pay_at_pickup"
          }
        },
        "extra_charges": [
          {
            "conditional": [
              {
                "charge_type": "aged_driver_fee",
                "amount": {
                  "display": {
                    "value": 15.00,
                    "currency": "EUR",
                    "timing": "pay_at_pickup"
                  },
                  "pay": {
                    "value": 15.00,
                    "currency": "EUR",
                    "timing": "pay_at_pickup"
                  }
                }
              }
            ],
            "non_conditional": [
              {
                "charge_type": "state_sales_tax",
                "amount": {
                  "display": {
                    "value": 10.00,
                    "currency": "EUR",
                    "timing": "pay_at_pickup"
                  },
                  "pay": {
                    "value": 10.00,
                    "currency": "EUR",
                    "timing": "pay_at_pickup"
                  }
                }
              }
            ]
          }
        ],
        "total": {
          "display": {
            "value": 154.99,
            "currency": "EUR",
            "timing": "pay_at_pickup"
          },
          "pay": {
            "value": 154.99,
            "currency": "EUR",
            "timing": "pay_at_pickup"
          }
        }
      },
      "policies": {
        "cancellation": {
          "details": {
            "context": "before_pickup",
            "duration": "PT48H"
          },
          "type": "free_cancellation"
        },
        "damage_excess": {
          "amount": {
            "display": {
              "value": 900.00,
              "currency": "EUR",
              "timing": "pay_at_pickup"
            },
            "pay": {
              "value": 900.00,
              "currency": "EUR",
              "timing": "pay_at_pickup"
            }
          }
        },
        "deposit": {
          "amount": {
            "display": {
              "value": 300.00,
              "currency": "EUR",
              "timing": "pay_at_pickup"
            },
            "pay": {
              "value": 300.00,
              "currency": "EUR",
              "timing": "pay_at_pickup"
            }
          }
        },
        "fuel_policy": "return_same",
        "mileage": {
          "distance_limit": 300,
          "distance_unit": "kilometers",
          "amount": 0.25,
          "type": "limited"
        },
        "payment": {
          "dates": [
            {
              "at": "2025-11-01",
              "amount": {
                "display": {
                  "value": 50.00,
                  "currency": "EUR",
                  "timing": "pay_online_now"
                },
                "pay": {
                  "value": 50.00,
                  "currency": "EUR",
                  "timing": "pay_online_now"
                }
              }
            }
          ]
        },
        "theft_excess": {
          "amount": {
            "display": {
              "value": 1200.00,
              "currency": "EUR",
              "timing": "pay_at_pickup"
            },
            "pay": {
              "value": 1200.00,
              "currency": "EUR",
              "timing": "pay_at_pickup"
            }
          }
        }
      }
    },
    "order_token": "eyJhIjoiYmNkIn0"
  }
}
```

**After this step you should have:**

* `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](/demand/docs/open-api/3.2-beta/demand-api/orders/create) within this time window.

### Display your order preview page

You can now show the traveller final details of:

* 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](/demand/docs/open-api/demand-api/orders/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

→ Call [/orders/create](/demand/docs/open-api/3.2-beta/demand-api/orders/create) to process the payment.

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

Order create request
You must include:

* The car driver details -`address`, `email`, `name` and `telephone` number.
* `booker` - Specify the `address`, `email`, `name` and `telephone` number details of the person who is making the booking.
* `order_token`:
  * Use the `order_token` returned in the [/orders/preview](/demand/docs/open-api/demand-api/orders/orders/preview) response.
* The selected payment option:
  * `card` - Specify the card details provided by the traveller.
  * `include_receipt` - Set to `true` to generate a receipt that you can provide to the traveller (only available for online payments).
  * `method` - Specify the payment method.
  * `timing` - Choose between `pay_online_now`, `pay_partial_online_now`, `pay_at_pickup`.


Your request body should look like this example.


```json
{
  "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](/demand/docs/open-api/3.2/demand-api/orders/orders/create)

Order create response
The response contains the following information about the order:

* `order` - Unique id number that identifies the order. Use it to [cancel the order](/demand/docs/open-api/demand-api/orders/orders/cancel) or to get information about it in further post-booking tasks.
* `receipt_url` - A link to the payment receipt for the order (if requested).



```json
{
  "request_id": "01fr9ez700exycb98w90w5r9sh",
  "data": {
    "order": "987654321",
    "car": {
      "reservation_id": "CAR-123456789",
      "status": {
        "code": 200,
        "description": "Booking confirmed"
      }
    },
    "payment": {
      "receipt_url": "https://secure.booking.com/payment_receipt.html?bn=987654321&pincode=4321&lang=en",
    }
  }
}
```

🎉 Congratulations, a confirmed booking now exists in the system.

### Recommendation

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

## Integration completion checklist

You should now support:

- ✅ Searching cars by route and date.
- ✅ Displaying real prices & availability.
- ✅ Optional extras upsell.
- ✅ Mandatory pre-booking T&Cs.
- ✅ Order preview with payment timing and method.
- ✅ Booking creation and receipt generation.


Next steps:

- Integrate reporting & labels.


Curious to know more?
* Check the [Orders section](/demand/docs/orders-api/order-preview-create) for more tips on how to preview and create your orders.
* Learn more about [Payment methods](/demand/docs/payments/payments-methods#credit-cards).
* Check [Payments quick guide](/demand/docs/payments/how-to) for best practices.