# Retrieve Terms & Conditions for Car rental offers

**Learn how to use the /cars/terms-and-conditions endpoint to retrieve structured terms and conditions for a specific car rental offer during the booking flow.**

**|** 
Pre-booking
 **|** 3.2 Beta**|**

Use the [/cars/terms-and-conditions](/demand/docs/open-api/3.2-beta/demand-api/cars/terms-and-conditions) endpoint to retrieve the applicable terms and conditions for a specific car rental offer during the **pre-booking process**.

This endpoint returns both:

* **Key rental information** (such as deposit, mileage, driver requirements).
* **Hierarchical legal terms and conditions.**


## When to use this endpoint

Use this endpoint during the booking flow, after a user selects a car but before the order creation.

**It is mandatory to display terms and conditions at this stage.**

## Use cases

* Show mandatory terms during checkout or booking preview.
* Display key rental conditions (deposit, mileage, insurance, driver rules)
* Help travellers understand restrictions before confirming a booking.
* Support compliance with rental supplier requirements.


## How it works

* You provide a car offer ID, along with the search token (that includes the booking context).
* The API returns:
  * Structured **key information**.
  * Full **terms and conditions tree**.
* Content is returned in the **requested language** (if supported).


### Important notes

* `offer` is required and identifies the selected car rental option.
* `search_token` is required and links the request to the original search session.
* `currency` is required for pricing context.
* `language` is optional (defaults to English if not supported)
* The response includes both **summary data (key_info)** and **full legal structure (terms)**


### Request body

| Field | Required | Type | Description |
|  --- | --- | --- | --- |
| `offer` | ✔ | integer | Unique identifier of the selected car rental offer. |
| `currency` | ✔ | String | Currency in ISO 4217 format (e.g. USD, EUR, GBP). |
| `search_token` | ✔ | string | Token returned by the search endpoint. Links the request to the original search session. |
| `language` | Optional | String | Language in ISO 639-1 format (e.g., `en-us`). Used to localise the response if supported. Defaults to English if not specified or unsupported. |


**Example request:**


```json

{
  "offer": 123456789,
  "currency": "USD",
  "language": "en-us",
  "search_token": "eyJkcml2ZXJzQWdlIjozMCwiZHJvcE9mZkRhdGVUaW1lIjo"
}
```

### Response structure

The response includes:

* `request_id` – Unique identifier for the request.
* `data` – A map of order IDs to their terms and conditions.


#### Key components

Example:


```json
{
  "request_id": "123456789",
  "data": {
    "765255700": {
      "terms": [ ... ]
    },
    "invalid_order": null
  }
}
```

##### Key information (key_info)

Summarised rental conditions used for UI display.

Includes:

* `common` – driver age, insurance, payment methods, rental duration.
* `deposit` – security deposit requirements and accepted cards.
* `damage_excess` – liability and excess coverage.
* `driver_and_license` – required documents and conditions.
* `mileage` – mileage policy.
* `disclaimers` – supplier-level legal notes.


#### Terms object

Hierarchical legal structure representing the full rental agreement.

* Each node includes:
  * `type` (chapter, section, clause, sub_clause, clause_option)
  * `title` and `children`
* Leaf nodes (`clause_option`) contain the final displayable text in text.


**Example response:**


```json
{
  "request_id": "01fr9ez700exycb98w90w5r9sh",
  "data": {
    "key_info": {
      "common": {
        "credit_cards_allowed": true,
        "debit_cards_allowed": true,
        "driver_age": 25,
        "insurance_available": true,
        "rental_duration": 3
      },
      "mileage": {
        "title": "Mileage",
        "subtitle": "Distance included",
        "content": "Unlimited mileage included"
      }
    },
    "terms": [
      {
        "type": "chapter",
        "title": "Rental agreement",
        "children": [
          {
            "type": "section",
            "title": "Driver requirements",
            "children": [
              {
                "type": "clause",
                "title": "Age restrictions",
                "children": [
                  {
                    "type": "sub_clause",
                    "children": [
                      {
                        "type": "clause_option",
                        "text": "Driver must be <b>at least 25 years of age</b> to rent this vehicle."
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}
```

## Best practices

✅ **Always show T&Cs during booking**

* This endpoint is part of the mandatory booking flow UX.


✅ **Use` key_info` for UI-first rendering**

* Use it for summaries, cards, and checkout screens.
* Do not force users to expand full legal tree by default.


✅ **Use `terms` for legal completeness**

* Preserve full hierarchy.
* Do not flatten unless required by UI constraints.


✅ **Respect structure**

* Only clause_option.text contains final legal text.
* Other nodes are structural and must be preserved.


✅ **Handle HTML safely**

* `text` may include basic HTML (for example  tags).
* Ensure safe rendering or sanitisation where required.


### Integration tips

* Treat `key_info` and `terms` as two complementary layers
* Prefer a progressive disclosure UI pattern:
  * Summary first (key_info)
  * Full legal details on demand (terms).


## Next steps

Curious to know more?
* See the [Car tutorial](/demand/docs/cars/3.2/cars-tutorial) for a complete booking flow.
* Refer to the [Cars section](/demand/docs/cars/overview) for details.