Last updated

Search for car rentals

Learn how to use the /cars/search endpoint to find and retrieve car rentals that match travellers’ preferences, routes, and date ranges.


→ Use the /cars/search endpoint to retrieve a list of cars available within a given route, date range, or set of filters.

This endpoint:

  • Covers a wide range of traveller needs — from budget-friendly city cars to luxury SUVs.
  • Finds and returns the optimum set of matching rental options so travellers can quickly choose the right vehicle.
  • Increases the likelihood of converting searches into bookings by showing relevant, well-priced products.

This guide explains how to structure your request, filter and sort results, handle pagination, and interpret the search response.


How it works

The request defines search parameters to find available cars. The response returns a list of matching cars, including prices, policies, and metadata about the search results.

Example use case:

Retrieve cars in Amsterdam Airport Schiphol (AMS) available between 5–10 November 2025, filtered by automatic transmission, limited mileage and price.

Search request example

3.1 request example:


{
  "booker": { "country": "nl" },
  "currency": "EUR",
  "driver": { "age": 36 },
  "filters": {
    "transmission_type": "automatic",
    "mileage_type": "limited",
    "depot_location_type": "in_terminal"
  },
  "route": {
    "pickup": {
      "datetime": "2025-11-05T11:05:00",
      "location": { "airport": "AMS" }
    },
    "dropoff": {
      "datetime": "2025-11-10T11:05:00",
      "location": { "airport": "AMS" }
    }
  },
  "payment": {
    "timings": ["pay_now"]
  }
}

Search inputs

FieldFormatRequiredDescription
booker.countrystringYesTwo-letter country code (ISO 3166-1 alpha-2) in lowercase. Determines traveller context for pricing and taxes. Get this code running the /common/locations/country endpoint.
driver.ageintegerYesAge of the driver (18–99). Affects availability and price. Minimum: 18 - Maximum 99.
currencystringYesISO 4217 code (e.g. EUR). Currency for pricing. Retrieve codes using /common/payments/currencies.
route.pickupobjectYesPick-up location and datetime. ISO 8601 date and time format: YYYY-MM-DDThh:mm:ss. See location options below.
route.dropoffobjectYesDrop-off location and datetime.
Location optionsobjectAirport code / coordinates / city IDSpecify pick-up and drop-off by:
• Airport: { "airport": "AMS" }
• Coordinates: { "coordinates": { "latitude": 52.309456, "longitude": 4.762266 } }
• City ID: { "city": -2140479 }
(Use /common/locations/cities for the full list.)
FiltersobjectNoSee section below for optional filters (transmission, mileage, depot type, car category, number of seats, suppliers).
Payment.timingsarray of stringsNo• In v3.1 use pay_now, part_pay, pay_local
• In v3.2 use pay_online_now, pay_partial_online_now and pay_at_pickup. Filter by payment timing.
maximum_resultsintegerNo10–500, multiple of 10, default 100. Max number of results.
Pagination / sortingobjectNosort.by (price, distance, review_score), sort.direction (ascending, descending). Use page for pagination token from metadata.next_page.
  • Only one of airport, coordinates, or city should be used per pickup/dropoff location.
  • pickup.datetime must be ≤ dropoff.datetime.
  • Maximum maximum_results is 500.

Optional filters

Filters help tailor results to traveller preferences and vehicle features.

Examples:

  • air_conditioning – true (only cars with AC) or false.
  • car_categories – Filter by car type (e.g., "compact", "suvs", "premium").
  • depot_location_type – Location of the rental depot (e.g., "in_terminal", "downtown").
  • mileage_type – "limited" or "unlimited".
  • number_of_seats – Minimum required seats.
  • transmission_type – "automatic" or "manual".
  • supplier_ids – Retrieve cars from specific suppliers (max 10 IDs).

Payment filters - Narrow results based on the desided payment timing:

  • pay_now – Full online payment at booking.
  • part_pay – Partial payment upfront, balance later.
  • pay_local – Payment at the depot directly.
v3.2 payment timings

If you are using v3.2 the payment timings are: pay_online_now, pay_partial_online_now and pay_at_pickup

Example - Filters

"filters": {
  "transmission_type": "automatic",
  "mileage_type": "limited",
  "depot_location_type": "in_terminal",
  "car_categories": ["economy", "compact"],
  "number_of_seats": 5,
  "supplier_ids": [7455, 1234]
}

Example - Pagination and sorting

"maximum_results": 50,
"sort": {
  "by": "price"
},
"page": "eyJhbGciOiJIUzI1NiJ9..."

See the pagination guide for more details.

Response

The response contains a list of matching cars and metadata about the search:

3.1 response example:


{
  "request_id": "01h00fr9y7qkbxtc6kyv97j49z",
  "data": [
    {
      "car": 122655,
      "policies": {
        "cancellation": {
          "type": "free_cancellation",
          "details": {
            "context": "before_pickup",
            "duration": "P7D"
          }
        },
        "damage_excess": 3000,
        "deposit": 1500,
        "insurance_package": "basic",
        "fuel": "return_same",
        "mileage": {
          "distance": 200,
          "distance_unit": "kilometers",
          "amount": 12.54,
          "type": "limited"
        },
        "payment": {
          "timing": "pay_now"
        },
        "theft_excess": 3000
      },
      "price": {
        "total": "121.90",
        "currency": "EUR",
        "extra_charges": [
          {
            "charge": "aged_fee",
            "total_amount": 21.9
          },
          {
            "charge": "one_way_fee",
            "total_amount": 50
          }
        ]
      },
      "route": {
        "dropoff": {
          "depot": 112314,
          "depot_location_type": "airport_hotel"
        },
        "pickup": {
          "depot": 112314,
          "depot_location_type": "airport_hotel"
        }
      },
      "supplier": 7455,
      "url": {
        "app": "booking://page",
        "web": "https://example.com"
      }
    }
  ],
  "metadata": {
    "next_page": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7Im1heGltdW1fcmVzdWx0cyI6MTAsIm9mZnNldCI6MTB9LCJhdWQiOiJDQVJTX1NVUFBMSUVSUyIsImV4cCI6MTY4MzY0NzMwNX0.y7NmH48mm7lImd2WxsHdotj6n-dVQAzJCGCnIJCKy3A",
    "total_results": 122
  },
  "search_token": "eyJhbGciOiJIUzI1NiJ9.eyJwIjp7ImJvb2tlciI6eyJjb3VudHJ5IjoidXMifX0sImF1ZCI6Ii9ob3RlbHMvc2VhcmNoIiwiZXhwIjoxNzUwMDAwMDAwfQ.XYZ123AbcDefGHIjklMNOpqrsTUVwxYZ456789"
}
Product coverage
  • Not all cars visible on the Booking.com website are available via the Demand API.
  • The API delivers a consistent, integrator-friendly subset of inventory optimised for connected trip solutions.

The search_token

The search_token stores the search context associated with the request.

  • Include it in your v3.2 Beta requests, to cars/availability, orders/preview and orders/create endpoints.
  • This reduces the need to resend the entire search payload, such as the route, filters, or booker country.

How to use it:

  1. The first search request includes a search_token value in the response.
  2. Include the search_token in subsequent requests to cars/availability, orders/preview and orders/create endpoints (from v3.2 Beta) instead of resending the full search criteria.
search_token expiration

The search_token expires after 90 minutes.

When no data is returned

If the search returns no cars:

  • Check that the pickup/dropoff location and datetime are valid and have available vehicles.
  • Review filters — overly strict transmission, mileage, or seat filters can exclude all results.
  • Verify that airport codes or city IDs are supported.

If you still receive empty results, try broadening the search criteria or temporarily removing filters.


Best practices

Best practiceDescription
✅ Optimise for performance
  • Limit maximum_results to 20–50 for faster responses.
  • Use pagination tokens instead of fetching all results at once.
✅ Deliver relevant results
  • Combine geographic (airport, coordinates, city) and qualitative (transmission, mileage, car categories) filters.
  • Use sort.by according to traveller needs (for example, price for value, distance for convenience).
✅ Maintain consistency

Curious to know more?