# Car availability

Retrieve detailed availability information for a specific car rental offer.
Use this endpoint after performing a car search to:
- Retrieve up-to-date pricing.
- View cancellation, payment, fuel, and mileage policies.
- List optional extras available for the selected offer.

You must provide the `offer` ID and the `search_token` returned by the car search request.

Endpoint: POST /cars/availability
Version: 3.3
Security: BearerAuth

## Security:

  - `BearerAuth` (unknown)
    http bearer string

## Header parameters:

  - `X-Affiliate-Id` (integer, required)
    Include here your Affiliate identifier number

## Request fields (application/json):

  - `offer` (integer, required)
    This ID identifies the car rental offer and its associated policies. Include it when calling the /cars/availability endpoint.

  - `search_token` (string, required)
    Encoded string returned by the car search response. This token is valid only for car rental requests and must be passed exactly as received.

  - `currency` (string | null, required)
    A three-letter code that uniquely identifies a monetary currency as defined by the ISO 4217 standard. The full list can be obtained by calling common/payments/currencies.
    Example: EUR

  - `language` (string)
    A [IETF language tag code](https://en.wikipedia.org/wiki/IETF_language_tag) that uniquely identifies a supported human language or dialect. **Note:** Demand API only accepts lowercase for the language codes. Examples: "nl" for Dutch/Nederlands or "en-us" for English (US). To retrieve the full list of supported languages, call the `/common/languages` endpoint.
    Example: en-us

## Response 200:

  - `200` (unknown)
    Availability details retrieved successfully.

## Response 200 fields (application/json):

  - `request_id` (string)
    Uniquely identifies the request. Please provide this identifier when contacting support.

  - `data` (object)

  - `data.offer` (integer)
    This ID identifies the car rental offer and its associated policies. Include it when calling the /cars/availability endpoint.

  - `data.currency` (string | null)
    A three-letter code that uniquely identifies a monetary currency as defined by the ISO 4217 standard. The full list can be obtained by calling common/payments/currencies.
    Example: EUR

  - `data.policies` (object)
    The policies that apply to this product.

  - `data.policies.cancellation` (object)
    The cancellation policy that applies to this product.

  - `data.policies.cancellation.details` (object | null)
    Provides the policy details if the cancellation is free. For example:
1. duration='PT48H' and context=BEFORE_PICKUP means 'Free cancellation is available up to 48 hrs before pick up'.
2. duration='P7D' and context=WITHIN_GIVEN_TIME_PERIOD_OF_BOOKING means 'Free cancellation is available within 7 days of booking'

  - `data.policies.cancellation.details.context` (string)
    The context in which the cancellation policy applies. For example 'before_pickup'
    Enum: "before_pickup", "within_given_time_period_of_booking"

  - `data.policies.cancellation.details.duration` (string)
    The duration until which the cancellation is free. This is in ISO-8601/Duration format.

  - `data.policies.cancellation.type` (string)
    The type of cancellation present. For example 'free_cancellation' or 'non-refundable'.
    Enum: "free_cancellation", "non-refundable"

  - `data.policies.damage_excess` (object)

  - `data.policies.damage_excess.amount` (any)
    The maximum amount a traveller may be charged for damages to the car during the rental period, as specified by the rental agreement.

  - `data.policies.deposit` (object)

  - `data.policies.deposit.amount` (any)
    The amount of money that will be temporarily pre-authorised or blocked on the traveller’s credit card at the rental location as a security deposit, to cover potential damage or extra charges.

  - `data.policies.insurance_package` (string)
    The supplier insurance package that applies to this product.
    Enum: "basic", "inclusive", "zero_excess"

  - `data.policies.fuel` (string)
    The fuel policy that applies to this product. Maps to the `fuel_policies` constant returned by the /cars/constants endpoint.
    Enum: "return_same", "return_same_or_prepay_no_refunds", "return_same_preauth", "free_tank", "prepay_no_refunds", "prepay_part_refunds", "prepay_refunds", "unknown"

  - `data.policies.mileage` (object)
    The mileage policy that applies to this product.

  - `data.policies.mileage.distance_limit` (number | null)
    The maximum distance allowed before additional charges apply.

  - `data.policies.mileage.distance_unit` (string)
    The unit of measurement for the distance limit. For example 'km' or 'miles'.
    Enum: "kilometers", "miles"

  - `data.policies.mileage.amount` (any)
    The amount that must be paid if the distance limit is exceeded.

  - `data.policies.mileage.currency` (any)
    The currency of the amount that must be paid if the distance limit is exceeded.

  - `data.policies.mileage.type` (string)
    The type of mileage policy applied.
    Enum: "limited", "unlimited"

  - `data.policies.payment` (object)
    The payment policy that applies to this product.

  - `data.policies.payment.timing` (string)
    The applied payment timing. For example 'pay_online_now'.
    Enum: "pay_online_now", "pay_partially_online", "pay_at_pickup"

  - `data.policies.theft_excess` (object)

  - `data.policies.theft_excess.amount` (any)
    The maximum amount a traveller may be charged in the event of car theft during the rental period, as outlined in the rental agreement.

  - `data.price` (object)
    The price that applies to this vehicle.

  - `data.price.credit_card_required` (boolean | null)
    Indicates whether a credit card is required as a guarantee for this vehicle.
- true: A credit card must be provided and will be passed to the supplier for guarantee purposes. Applies to vehicles with 'payment.timing = pay_at_pickup'.
- false: A credit card is explicitly not required.
- null: Information not available or not applicable (for example, pay-online-now vehicles where credit card requirements are currently unknown).

  - `data.price.extra_charges` (array)
    The charge breakdown. Includes taxes and fees included in the drive away price.

  - `data.price.extra_charges.charge` (string)
    The type of this charge.

  - `data.products` (array)
    A list of optional extras (e.g. child seats, GPS) available for this vehicle.

  - `data.products.id` (string)
    Unique identifier of the product.

  - `data.products.type` (string)
    Specifies the type of optional extra or service associated with the vehicle. For example, gps for a navigation system, baby_seat for a child seat, or wifi_router for mobile internet. Some values may represent similar extras because suppliers use different naming conventions for the same or comparable products.
    Enum: "additional_driver", "baby_seat", "bluetooth_handsfree_kit", "booster_seat", "child_booster_seat", "child_seat", "child_seat_isofix", "etc_card_electronic_toll_collection_card", "excess_protection", "fast_track", "gps", "infant_seat", "luggage_rack", "personal_travel_assistant", "queue_jump", "roof_rack", "ski_box", "ski_rack", "skierized_equipment", "snow_chains", "snow_tyres", "wifi_mobile", "wifi_router"

  - `data.products.maximum_available` (number)
    Maximum number of units of this product that can be selected per booking.

  - `data.products.mode` (string)
    Defines how the product price is calculated. This determines whether pricing is applied per unit, per day, or for the full rental period.
    Enum: "each_per_day", "each_per_rental", "per_day", "per_rental"

  - `data.products.price` (object)
    Pricing information for the product, including display price and payment details.

  - `data.products.price.unit_amount` (object)
    Price object containing the amount shown to the traveller (display) and the actual payment amount (pay) with timing information.

  - `data.products.price.unit_amount.display` (object)
    A monetary amount with currency code.

  - `data.products.price.unit_amount.display.value` (number)
    The numeric value of the amount.

  - `data.products.price.unit_amount.pay` (object)
    A monetary amount with currency code and the timing of payment. Use timing to indicate whether the amount is paid online now, partially online, or at pickup.

  - `data.products.price.unit_amount.pay.value` (number)
    The numeric value of the amount.

  - `data.products.price.unit_amount.pay.timing` (string)
    The payment timing.
    Enum: "pay_online_now", "pay_partially_online", "pay_at_pickup"

  - `data.deal` (object | null)
    This specifies the deal tagging for the product.

  - `data.deal.discount_percentage` (integer)
    Discount percentage of the applied deals.

  - `data.deal.tags` (array)
    The tags of all the applied deals.

  - `data.special_offer` (string | null)
    The special offer included with this product, if any. This can be an additional service, a free upgrade, or a promotional feature provided by the supplier. If no special offer applies, the value is null.
    Enum: "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"

  - `data.supplier` (number)
    The unique identifier for the car rental supplier.

  - `data.route` (object)
    Defines the actual route associated with the product.

  - `data.route.dropoff` (object)
    Defines the product pick up / drop off route point.

  - `data.route.dropoff.depot` (integer)
    Unique identifier of a depot. Retrieve the full list by calling the (/cars/depots](#/cars/depots).
    Example: 5944

  - `data.route.dropoff.depot_location_type` (string)
    The type of location for the depot.
    Enum: "in_terminal", "car_rental_centre", "outside_terminal", "airport_hotel", "shuttle_bus", "meet_greet", "trainstation", "downtown"

  - `data.insurance` (object | null)
    Detailed third-party insurance quote for this car rental. Returned only for eligible partner configurations (e.g., partners with a signed insurance contract), and when insurance is available for the selected offer (null if not available).
This object represents a bookable insurance product and includes pricing, coverage, and policy documentation.

  - `data.insurance.quote_reference` (string, required)
    Unique reference for this insurance quote. Expires after 90 minutes.

  - `data.insurance.name` (string, required)
    The display name of the insurance product.

  - `data.insurance.id` (string, required)
    The identifier for the type of insurance product.

  - `data.insurance.coverage_amount` (object)
    The maximum coverage amount provided by the insurance product.

  - `data.insurance.documents` (array, required)
    Legal documents for this insurance product. Always returned when the insurance object is present, and always contains the `policy_document` entry. The `ipid` entry is only included when an IPID applies (EEA and UK countries) and is available in the requested language.

  - `data.insurance.documents.name` (string, required)
    The insurance document type.
    Enum: "policy_document", "ipid"

  - `data.insurance.documents.url` (string, required)
    URL of the insurance document.

  - `data.estimated_commission` (object | null)
    Estimated commission the partner may earn if the traveller books this car. Expressed in the selected currency and based on predictive modelling at search time. Only returned when the predicted commission feature is enabled for the partner. Omitted when the feature is unavailable or when a reliable estimate cannot be produced.

## Response 400:

  - `400` (unknown)
    The request is invalid or missing required parameters. Refer to the [Error handling section](/demand/docs/support/error-handling/about-errors) for more details.

## Response 400 fields (application/json):

  - `request_id` (string, required)
    Uniquely identifies the request. Please provide this identifier when contacting support.

  - `errors` (array, required)

  - `errors.id` (string, required)

  - `errors.message` (string, required)

## Response 500:

  - `500` (unknown)
    Internal Server Error. The request failed due to a server-side issue. Please retry or contact support if the issue persists.

## Response 500 fields (application/json):

  - `request_id` (string, required)
    Uniquely identifies the request. Please provide this identifier when contacting support.

  - `errors` (array, required)

  - `errors.id` (string, required)

  - `errors.message` (string, required)

## Response 400 examples:

  - `Invalid offer ID` (unknown)

  - `Search token expired` (unknown)

  - `Invalid token` (unknown)

## Response 500 examples:

  - `Generic server error` (unknown)

