# Search car rentals

Use this endpoint to retrieve the available car rentals matching the search criteria.

Endpoint: POST /cars/search
Version: 3.2
Security: BearerAuth

## Header parameters:

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

## Request fields (application/json):

  - `booker` (object, required)
    Defines the booker context.

  - `booker.country` (string, required)
    A two-letter code that uniquely identifies a country. This code is defined by the ISO 3166-1 alpha-2 standard (ISO2) as described here: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2. The full list can be obtained by calling common/locations/countries.
    Example: nl

  - `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

  - `driver` (object, required)
    Defines the driver context.

  - `driver.age` (integer, required)
    Driver age. Affects the availability and price of the products.

  - `filters` (object)
    Defines the filtering criteria for refining the request results. It allows you to specify various parameters to narrow down the available car rental options based on specific attributes.

  - `filters.air_conditioning` (boolean)
    Filters the results to include car rentals with or without air conditioning. Setting this value to true will only return vehicles with air conditioning, while false will exclude them.

  - `filters.car_categories` (array)
    Filters the results based on the selected car categories.

  - `filters.depot_location_type` (string)
    Filters the results based on the type of depot location where the vehicle is picked up or dropped off.
    Enum: "in_terminal", "car_rental_centre", "outside_terminal", "airport_hotel", "shuttle_bus", "meet_greet", "trainstation", "downtown"

  - `filters.fuel_types` (array)
    Filters the results by one or more fuel types.

  - `filters.mileage_type` (string)
    Filters the results based on the mileage type associated with the rental vehicle.
    Enum: "limited", "unlimited"

  - `filters.number_of_seats` (integer)
    Filters the results based on the number of seats in the vehicle. This allows you to specify a vehicle that can accommodate a specific number of passengers.

  - `filters.price` (object)
    Filters the results to include only vehicles whose total rental price falls within the specified range (inclusive). Prices are evaluated in the requested currency.

  - `filters.price.maximum` (number)
    Returns only vehicles with a total rental price less than or equal to this value, in the requested currency. Omit to indicate no upper limit.

  - `filters.price.minimum` (number)
    Returns only vehicles with a total rental price greater than or equal to this value, in the requested currency. Omit to indicate no lower limit.

  - `filters.rating` (object)
    Filter vehicles by the minimum review score of the depot.

  - `filters.rating.minimum_review_score` (integer)
    Return only vehicles from depots with a review score greater than or equal to the specified value. Valid values range from 1 to 10.

  - `filters.supplier_ids` (array)
    Filters the results based on the supplier ID of the vehicle. This allows you to retrieve vehicles from specific suppliers. A maximum of 10 supplier IDs can be provided.

  - `filters.transmission_type` (string)
    Filters the results based on the transmission type of the vehicle.
    Enum: "automatic", "manual"

  - `maximum_results` (integer)
    The maximum number of results to return for car searches.

  - `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 in the same Demand API version you are using.
    Example: en-us

  - `page` (string)
    Pagination token used to retrieve the next page of results. Obtained from `next_page`.

  - `payment` (object)

  - `payment.timings` (array)
    Filters the results to include only car rentals that offer the specified payment timings. Use this parameter to search for cars based on the timing of payment (e.g., payment upfront, partial payment, or payment at the depot).

  - `route` (object, required)
    Defines the route context.

  - `route.pickup` (object, required)
    Defines the pickup or dropoff route point.

  - `route.pickup.datetime` (string, required)
    Pickup / dropoff datetime. Must be a local datetime without timezone offset, in the format yyyy-MM-dd'T'HH:mm:ss.
    Example: 2026-11-01T11:05:00

  - `route.pickup.location` (object, required)
    Defines the pickup or dropoff location. Provide exactly one of airport, coordinates, or city.

  - `route.pickup.location.airport` (string)
    A three-letter code that uniquely identifies an airport as defined by the International Air Transport Association (IATA). The full list can be obtained by calling  common/locations/airports.
    Example: AMS

  - `route.pickup.location.coordinates` (object)

  - `route.pickup.location.coordinates.latitude` (number)

  - `route.pickup.location.coordinates.longitude` (number)

  - `route.pickup.location.city` (integer)
    A signed integer number that uniquely identifies a city. The full list can be obtained by calling common/locations/cities.

  - `sort` (object)
    Defines how the search results are sorted. If omitted, results are sorted by the recommended option.

  - `sort.by` (string, required)
    The criterion used to sort the search results.
    Enum: "recommended", "price", "distance", "review_score"

  - `sort.direction` (string)
    Deprecated. Specifies the sort direction. This field is no longer used and will be removed in a future version.
    Enum: "ascending", "descending"

## Response 200 fields (application/json):

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

  - `data` (array, required)

  - `data.car` (integer)
    This ID corresponds to a specific car model and supplier (fleet) combination, as returned by the /cars/details endpoint. Cache the details keyed by this ID and use it to match search results to your cached data.

  - `data.categories` (array)
    The categories assigned to the car.

  - `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.public_price` (number)

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

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

  - `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 | null)
    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.damage_excess.amount` (number)
    The amount to be charged.

  - `data.policies.damage_excess.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.deposit` (object | null)
    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.deposit.amount` (number)
    The amount to be charged.

  - `data.policies.insurance_package` (string)
    The supplier insurance package applied to this product by default. Use the insurance object instead when third-party insurance products are configured in your account.
    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"

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

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

  - `data.policies.mileage.distance_limit` (number | null)
    The maximal distance limit allowed for this product before additional fees 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.type` (string, required)
    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, required)
    The applied payment timing. For example 'pay_online_now'.
    Enum: "pay_online_now", "pay_partial_online_now", "pay_at_pickup"

  - `data.policies.theft_excess` (object | null)
    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.policies.theft_excess.amount` (number)
    The amount to be charged.

  - `data.price` (object)
    The price components of this product.

  - `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.route` (object)
    Defines the actual route associated with the product.

  - `data.route.pickup` (object)
    Defines the product pickup / dropoff route point.

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

  - `data.route.pickup.depot_location_type` (string)
    Type of depot location where the vehicle is picked up or dropped off. For example, 'shuttle_bus', 'in_terminal', etc.
    Enum: "in_terminal", "car_rental_centre", "outside_terminal", "airport_hotel", "shuttle_bus", "meet_greet", "trainstation", "downtown"

  - `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 will be 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.insurance` (object | null)
    Third-party insurance product for this car rental. Only present for eligible partner configurations. Null if not available.

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

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

  - `data.insurance.price` (object)
    The price of the insurance product for the full rental period.

  - `data.supplier` (integer)
    Uniquely identifies a vehicle supplier. The full list can be obtained by calling [/cars/suppliers](#/cars/suppliers).

  - `data.url` (object)
    Urls to the relevant pages.

  - `data.url.app` (string)
    URL for the related page on Booking App.

  - `data.url.web` (string)
    URL for the related page on cars.booking.com.

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

  - `metadata` (object)
    Metadata about the request.

  - `metadata.next_page` (string)
    Indicates that more results are available. Use this pagination token to retrieve the next page of results (via parameter `page`).

  - `metadata.total_results` (integer)
    The total number of results available.

  - `search_token` (string)
    Encoded string that must be passed in subsequent requests to identify the context of the car search. Note: It is specific to Car rentals and differs from other tokens used in booking flows.

## 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 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)

