# Check car rental availability Beta

**Use the /cars/availability endpoint to retrieve detailed availability, pricing, and policy information for a specific car rental offer returned by the /cars/search endpoint**.

Cars availability – Beta access
This endpoint is currently **available to selected partners** as part of an early access pilot.

- **Pilot phase** - The API is under active development and may change.
- **Available flows**
  - Search, look and book flow (Type 3) is currently [test-ready in Beta](/demand/docs/open-api/3.2-beta/demand-api/cars).
- **Access** - Only approved pilot partners can use this endpoint. Contact your Partnership Manager to express interest.
- **Updates** - Check the [Changelog](/demand/docs/whats-new/changelog) periodically for the latest updates.


## Overview

The [/cars/availability endpoint](/demand/docs/open-api/3.2-beta/demand-api/cars/availability) returns the latest details for a car rental offer identified in a previous /cars/search response.

The response can include:

- The current vehicle price and price breakdown.
- Payment timing and credit card requirements.
- Cancellation, fuel, mileage, deposit and excess policies.
- Optional extras and their availability.
- Deal and special-offer information.
- Pickup and drop-off route details.
- Available third-party insurance and legal documents.
- Estimated commission, when enabled for the partner.


Use this endpoint before presenting the final offer to the traveller and before starting the booking flow.

## When to use this endpoint

Use /cars/availability after calling /cars/search and before calling /orders/preview.

A typical flow is:

1. Call /cars/search.
2. Let the traveller select a car offer.
3. Call /cars/availability using the selected `offer` and matching `search_token`.
4. Display the latest price, policies, payment requirements and available extras.
5. Optionally select insurance and extras.
6. Call /orders/preview using the availability information.
7. Create the order using /orders/create.


## Request parameters

| Field | Required | Description |
|  --- | --- | --- |
| `offer` | ✔ | The identifier of the car rental offer returned by /cars/search and needed for the next orders/preview request. |
| `search_token` | ✔ | Encoded token returned by /cars/search.* Use the token generated for the same search as the selected offer.

 |
| `currency` | ✔ | A three-letter ISO 4217 currency code (for example `EUR`, `GBP`).* Use the currency associated with the booker’s country, as provided in the /cars/search request.

 |
| `language` | No | An optional IETF language tag, such as `en-gb` or `fr`.* This controls the language of insurance documents where available.
* The default is `en-gb` when the requested language is unavailable or not specified.

 |


* Always use the same `search_token` and `offer` combination returned from your /cars/search call. Do not reuse tokens across different searches.
* Search tokens are time-limited. If the token has expired or is invalid, run /cars/search again and use the new offer and search token.


### Example request

```json

{
  "offer": 740171366,
  "search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7InNlYXJjaF9rZXkiOiJleU...",
  "language": "en-gb",
  "currency": "GBP"
}
```

## Response structure

A successful response returns HTTP `200` and includes a `request_id` for troubleshooting and a `data` object containing the offer details:

| Field | Description |
|  --- | --- |
| `offer` | Identifier of the car rental offer. |
| `currency` | The currency used for the response. |
| `policies` | The policies that apply to the car rental offer. |
| `price` | Vehicle price, payment requirements and additional charges included in the total price. |
| `products` | Optional extras available for the vehicle. |
| `deal` | Applied deal information, or `null` when no deal applies. |
| `special_offer` | A special offer included with the product, or `null` when no special offer applies. |
| `supplier` | Identifier of the car rental supplier. |
| `route` | Pickup and drop-off depot information. |
| `insurance` | Available third-party insurance information, or `null` when insurance is unavailable. |
| `estimated_commission` | Estimated partner commission, when the feature is enabled and a reliable estimate is available. |


## Policies

The `policies` object describes the rules that apply to the selected vehicle.

### Cancellation

The `cancellation.type` field indicates whether the rental is refundable:

* `free_cancellation` – Free cancellation is available under the conditions in `details`.
* `non_refundable` – The rental is non-refundable.


For free-cancellation policies, use the following fields to create a traveller-friendly description:

* `details.context` – The context in which free cancellation applies, such as before_pickup.
* `details.duration` – The applicable period in ISO 8601 duration format, such as `PT48H` or `P7D`.


For example, `PT48H` with `before_pickup` means that free cancellation is available up to 48 hours before pickup.

### Deposit and excess

The following fields can contain monetary amounts or null:

* `deposit.amount` – The amount temporarily pre-authorised or blocked on the traveller’s credit card at the rental location.
* `damage_excess.amount` – The maximum amount the traveller may be charged for damage.
* `theft_excess.amount` – The maximum amount the traveller may be charged if the vehicle is stolen.


Always display the currency returned with the amount.

### Insurance package

`insurance_package` indicates the supplier insurance package included with the vehicle. Possible values are:

* `basic`
* `inclusive`
* `zero_excess`


### Fuel

`fuel` identifies the fuel policy. Possible values include:

* `return_same`
* `return_same_or_prepay_no_refunds`
* `return_same_preauth`
* `free_tank`
* `prepay_no_refunds`
* `prepay_part_refunds`
* `prepay_refunds`


The values correspond to the fuel policies returned by [/cars/constants](/demand/docs/open-api/3.2/demand-api/cars/constants).

### Mileage

The mileage object describes the distance included in the rental.

* `type` – limited or unlimited.
* `distance_limit` – Maximum distance allowed when the policy is limited. This can be `null`.
* `distance_unit` – kilometers or miles.
* `amount` – Amount charged when the distance limit is exceeded. This can be `null`.
* `currency` – Currency of the excess mileage charge. This can be `null`.


Display the original distance unit returned by the supplier. If you convert it for display, also show the original unit because the rental agreement is based on it.

### Payment

The `payment.timing` field indicates when the vehicle payment is made:

* `pay_online_now`
* `pay_partial_online_now`
* `pay_at_pickup`


Do not use payment timing alone to determine whether a credit card is required. Use `price.credit_card_required` where available.

## Price

The `price` object contains the vehicle price and charge breakdown.

* `base` – Base price of the vehicle.
* `total` – Total price of the vehicle.
* `credit_card_required` – Indicates whether a credit card is required as a guarantee.
* `extra_charges` – Additional charges included in the total price.


The `credit_card_required` field indicates whether a credit card is required as a guarantee:

* `true` –  A credit card must be provided as a guarantee to the supplier.
* `false` – A credit card is explicitly not required.
* `null` – The information is unavailable or not applicable.


Use the currency returned in each monetary amount. Do not assume that the display amount and payment amount are always the same.

## Optional products

The `products` array lists optional extras available for the vehicle, such as additional drivers, child seats and GPS devices.

Each product can include:

* `id` – Unique identifier of the optional product. Use this identifier when selecting the product for the order.
* `type` – Type of optional extra (e.g., baby_seat_included, gps)
* `mode` – How the price is calculated:
  * `each_per_day`
  * `each_per_rental`
  * `per_day`
  * `per_rental`
* `maximum_available` – Maximum number of units that can be selected for the booking.
* `price.unit_amount.display`– Amount displayed to the traveller for one unit.
* `price.unit_amount.pay` – Amount to be paid, including payment timing.


The `pay` object can include:

* `value`
* `currency`
* `timing`


Calculate the total product price according to the product’s mode. For example, `each_per_day` means that the unit price is multiplied by the selected quantity and the number of rental days.

## Deals and special offers

### Deals

The `deal` object contains information about applied deals. It is `null` when no deal applies.

It can include:

* `tags` – Applied deal tags, such as `black_friday`, `getaway_deal` or `mobile_rate`.
* `discount_percentage` – Discount percentage applied.
* `public_price` – Original price before the discount.


See the [Deals guide](/demand/docs/cars/cars-discounts) for more details.

### Special offers

`special_offer` identifies a special offer included with the vehicle. Possible values include:

* `one_additional_driver`
* `two_additional_drivers`
* `three_additional_drivers`
* `all_additional_drivers`
* `gps`
* `baby_or_child_seat`
* `priority_pickup`
* `wifi_device`
* `sim_card`
* `upgrade`
* `black_friday`
* `getaway_deal`
* `mobile_rate`


The value is `null` when no special offer applies.

## Route

The `route` object identifies the pickup and drop-off locations for the offer.

Each route point can include:

* `depot` – Identifier of the depot.
* `depot_location_type` – Type of location, such as `in_terminal`, `car_rental_centre`, `shuttle_bus` or `meet_greet`.


Use this information together with [/cars/depots](/demand/docs/open-api/3.2/demand-api/cars/depots) to display the relevant pickup and drop-off details.

## Insurance

The insurance object contains a bookable third-party insurance product when insurance is available for the selected offer and enabled for the partner. It is `null` when insurance is unavailable.

When present, the object includes:

* `quote_reference` – Unique reference for the insurance quote. The quote expires after 90 minutes.
* `name` – Display name of the insurance product.
* `id` – Insurance product identifier.
* `price.display` – Price displayed to the traveller.
* `price.pay` – Amount to be paid and payment timing.
* `coverage_amount` – Maximum coverage amount.
* `documents` – Legal insurance documents.


The `documents` array contains the legal documents available for the insurance product, including `policy_document` and, where applicable, `ipid`.

Display or link to the legal documents before the traveller confirms the insurance product.

If mandatory insurance documents are unavailable in the requested language, the `insurance` object is omitted. See the [Insurance dedicated guide](/demand/docs/cars/3.2/cars-insurance-guide) for details.

## Estimated commission

The optional `estimated_commission` object contains a predictive estimate of the commission the partner may earn if the traveller books the vehicle.

It is returned only when:

* The estimated commission feature is enabled for the partner.
* A reliable estimate is available.


The estimate includes an `amount` and `currency`. It is not returned when the feature is unavailable or when an estimate cannot be produced.

## Example response

```json
{
  "request_id": "01k1deq3e5b41da80f28yybhz0",
  "data": {
    "offer": 740171366,
    "currency": "GBP",
    "policies": {
      "cancellation": {
        "type": "free_cancellation",
        "details": {
          "context": "before_pickup",
          "duration": "PT48H"
        }
      },
      "deposit": {
        "amount": 1500
      },
      "damage_excess": {
        "amount": 1500
      },
      "theft_excess": {
        "amount": 1500
      },
      "insurance_package": "inclusive",
      "fuel": "return_same",
      "mileage": {
        "type": "limited",
        "distance_limit": 200,
        "distance_unit": "miles",
        "amount": 0.3,
        "currency": "GBP"
      },
      "payment": {
        "timing": "pay_online_now"
      }
    },
    "price": {
      "base": 74.4,
      "total": 194.4,
      "credit_card_required": false,
      "extra_charges": [
        {
          "charge": "aged_driver_fee",
          "total_amount": 120
        }
      ]
    },
    "products": [
      {
        "id": "14383444201010",
        "type": "additional_driver",
        "maximum_available": 3,
        "mode": "each_per_rental",
        "price": {
          "unit_amount": {
            "display": {
              "value": 20,
              "currency": "GBP"
            },
            "pay": {
              "value": 20,
              "currency": "GBP",
              "timing": "pay_at_pickup"
            }
          }
        }
      }
    ],
    "deal": null,
    "special_offer": "upgrade",
    "supplier": 3486,
    "route": {
      "pickup": {
        "depot": 243816,
        "depot_location_type": "meet_greet"
      },
      "dropoff": {
        "depot": 243816,
        "depot_location_type": "meet_greet"
      }
    },
    "insurance": {
      "quote_reference": "38ddeef-a7fb-4e24-a1e2-66fc3af23d76#1t0juiba8h6n2",
      "name": "Full Protection",
      "id": "999",
      "price": {
        "display": {
          "value": 114.24,
          "currency": "GBP"
        },
        "pay": {
          "value": 114.24,
          "currency": "EUR",
          "timing": "pay_online_now"
        }
      },
      "coverage_amount": {
        "value": 60000,
        "currency": "EUR"
      },
      "documents": [
        {
          "name": "policy_document",
          "url": "https://example.com/policy-document.pdf"
        },
        {
          "name": "ipid",
          "url": "https://example.com/ipid.pdf"
        }
      ]
    },
    "estimated_commission": {
      "amount": 12.5,
      "currency": "GBP"
    }
  }
}
```

The display `currency` and payment currency may differ. Always use the currency returned in each amount.

## Best practices

✅ Use the matching offer and search token.

* Always send the `offer` ID and the `search_token` returned by the same /cars/search response. If the token is invalid or expired, run the search again.


✅ Display payment requirements clearly.

* Use both:
  * `policies.payment.timing`
  * `price.credit_card_required`


This allows travellers to understand when payment is due and whether a credit card is required as a guarantee.

✅ Preserve the original currencies and units.

* Display the currency and mileage unit returned by the API.
* If you convert values for localisation, also show the original value where it is relevant to the rental agreement.


✅ Handle optional values.

The following fields may be `null` or omitted depending on the offer and partner configuration:

* `deal`
* `insurance`
* `estimated_commission`
* `credit_card_required`
* Deposit and excess amounts.
* Mileage distance limits and excess charges.


✅ Store identifiers required for order creation.

* `offer`
* `search_token`
* Product `id` values for selected extras.
* Insurance `quote_reference` when insurance is selected.


These values may be required by /orders/preview and /orders/create.

✅ Interpret cancellation rules:

* Use the `context` and `duration` fields to generate user-friendly cancellation messages (for example: “Free cancellation up to 48 hours before pickup”).


✅ Log the `request_id`:

* Log `request_id` for troubleshooting and include it when contacting support.


## Common errors

| Code | Meaning | Resolution |
|  --- | --- | --- |
| `400 Bad Request` | Missing or invalid `offer`, `search_token`, or `currency`. | Check the parameter values and formats. |
| `403 Forbidden` | Missing or invalid `X-Affiliate-Id`. | Ensure your affiliate credentials are correctly set. |
| `404 Not Found` | The offer is no longer available. | Re-run /cars/search to retrieve updated offers. |
| `429 Too Many Requests` | Too many requests were sent within a short period. | Implement rate limiting and retries with exponential backoff. |
| `500 Internal Server Error` | An unexpected error occurred. | Retry after a short delay. If the issue persists, report the `request_id`. |


See the [Demand API Error handling guide](/demand/docs/support/error-handling/about-errors) for details.

## Next steps

After retrieving availability and displaying the latest offer details:

1. Let the traveller select any optional extras or insurance.
2. Use /orders/preview to validate the selected offer and calculate the final order price.
3. Use /orders/create to create the order.


* For a complete integration flow, see the [Car rental tutorial](/demand/docs/cars/3.2/cars-tutorial).
* Refer to the [Orders](/demand/docs/open-api/demand-api/orders) and [payments](/demand/docs/payments/how-to) guides to make your first car rental order.