Car Rental API

Every rental offer for one pickup, in one call and no paging

The Car Rental API aggregates rental offers as clean JSON.

no credit card1,000 free credits · instant API key · live in 10 seconds
Missing a Car Rental endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
C
/car-rental/v1

3 active endpoints, on 1 and 2 credit tiers.

  • POST/car-rental/v1/cars/search
  • POST/car-rental/v1/cars/autocomplete
  • POST/car-rental/v1/cars/reviews

What Car Rental endpoints does ReefAPI ship?

3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

3 endpoints

cars/search

2 cr

aggregated rental-car offers for a location + dates → offers[]{vehicle(name/category/ACRISS/t…

required
optional
query, place_id, city_id, country_id, pickup_date, dropoff_date, pickup_time, dropoff_time, currency, residence_country, driver_age, drop_query, drop_place_id, drop_city_id, drop_country_id, max_offers, include_facets, prefer_airport, category, supplier, transmission, min_seats, max_price, min_supplier_rating, free_cancellation_only, unlimited_mileage_only, sort, include_supplier_summary

cars/autocomplete

1 cr

resolve a location string (query) → place/city/country IDs (for cars/search).

required
query
optional

cars/reviews

1 cr

DiscoverCars customer reviews for a location → reviews[]{rating(0-10), text, author, author_c…

required
optional
query, location_url, country_only, min_rating, with_text_only, max_reviews

Every parameter, every allowed value →

Car Rental API

3 of 3 endpoints, ready to run

View docs ↗

The whole comparison board for one pickup: every supplier's offer with the total price, the vehicle and its ACRISS code, the mileage and fuel policy, the deposit, and the coverage that costs extra. Omit the dates and it books you about a month out.

2 credits0 required · 15 optional
POST/car-rental/v1/cars/search
ok18749 ms · 25 records · sample
{
  "ok": true,
  "meta": {
    "api": "car-rental",
    "endpoint": "cars/search",
    "mode": "live",
    "latency_ms": 18749,
    "record_count": 25,
    "cache_hit": false,
    "completeness_pct": 100
  },
  "data": {
    "count": 25,
    "supplier_count": 4,
    "currency": "EUR",
    "offers": [
      {
        "offer_id": "VGG9",
        "vehicle": {
          "name": "Fiat 500",
          "category": "Mini",
          "acriss": "MBMR",
          "transmission": "manual",
          "seats": 4,
          "doors": 3,
          "bags": 1,
          "air_conditioning": true,
          "fuel_type": null,
          "guaranteed_model": false,
          "image": "https://www.discovercars.com/images/car/110/220.png"
        },
        "price": {
          "amount": 44.64,
          "currency": "EUR",
          "formatted": "€44.64",
          "rental_days": 3,
          "daily": 14.88
        },
        "supplier": {
          "name": "Record go",
          "key": "record-go",
          "logo": "https://www.discovercars.com/PartnerFiles/81/logo_140x70.png?v=8642",
          "rating": {
            "score": 7.9,
            "label": "Average",
            "review_count": 11594
          },
          "rating_detailed": {
            "valueForMoney": 7.78,
            "valueForMoneyColor": "yellow-400-new",
            "valueForMoneyLabel": "7.8",
            "findPickup": 7.43,
            "findPickupColor": "yellow-400-new",
            "findPickupLabel": "7.4",
            "workEfficiency": 7.57,
            "workEfficiencyColor": "yellow-400-new",
            "workEfficiencyLabel": "7.6",
            "timeSpentPickingUp": 7.65,
            "timeSpentPickingUpColor": "yellow-400-new",
            "timeSpentPickingUpLabel": "7.7",
            "timeSpentDroppingOff": 8.57,
            "timeSpentDroppingOffColor": "green-600-new",
            "timeSpentDroppingOffLabel": "8.6",
            "carCleanliness": 8.38,
            "carCleanlinessColor": "green-600-new",
            "carCleanlinessLabel": "8.4",
            "carCondition": 8.18,
            "carConditionColor": "green-600-new",
            "carConditionLabel": "8.2",
            "avgValue": 7.94,
            "locationReviewCount": 1513,
            "countryReviewCount": 11594,
            "worldReviewCount": 31910
          },
          "pickup_address": "RecordGo, C. Cigoitia, 1, San Blas-Canillejas, 28042 Madrid",
          "coords": {
            "key": "40_4493_-3_5798",
            "lat": "40.4493",
            "lng": "-3.5798"
          }
        },
        "pickup": {
          "location": "Madrid Airport (MAD)",
          "is_airport": true,
          "type": "Free shuttle service",
          "type_icon": "bus"
        },
        "mileage": {
          "unlimited": false,
          "label": "Limited",
          "unspecified": false,
          "day_limit": "250 km/day included mileage"
        },
        "fuel_policy": "Full to full",
        "payment_type": "Pay now",
        "deposit": {
          "key": "zero",
          "title": "Deposit-free option available",
          "amount": "€1,100.00"
        },
        "coverage": null,
        "extras": [
          {
            "id": "extra-3",
            "price": 38.849999999999994
          },
          {
            "id": "extra-4",
            "price": 38.849999999999994
          },
          {
            "id": "extra-5",
            "price": 38.849999999999994
          }
        ],
        "free_cancellation": true,
        "instant_confirmation": true,
        "badges": [],
        "book_url": "https://www.discovercars.com/en/offer/c383d352-850d-4b10-8c53-034a1a826302-VGG9?sq=eyJQaWNrdXBMb2NhdGlvbklkIjoxODc1LCJEcm9wT2ZmTG9jYXRpb25JZCI6MTg3NSwiUGlja3VwRGF0ZVRpbWUiOiIyMDI2LTA5LTI3VDEwOjAwOjAwIiwiRHJvcE9mZkRhdGVUaW1lIjoiMjAyNi0wOS0zMFQxMDowMDowMCIsIlJlc2lkZW5jZUNvdW50cnkiOiJVUyIsIkRyaXZlckFnZSI6MzUsIkhhc2giOiIwYTQ0NTY1NGY0ZTYwOGRhYTYwZTZlZjZlNGEyMjE2NiJ9"
      },
      {
        "offer_id": "RXMA",
        "vehicle": {
          "name": "Toyota Aygo",
          "category": "Mini",
          "acriss": "MCMR",
          "transmission": "manual",
          "seats": 4,
          "doors": 4,
          "bags": 1,
          "air_conditioning": true,
          "fuel_type": null,
          "guaranteed_model": false,
          "image": "https://www.discovercars.com/images/car/7189/220.png"
        },
        "price": {
          "amount": 46.39,
          "currency": "EUR",
          "formatted": "€46.39",
          "rental_days": 3,
          "daily": 15.46
        },
        "supplier": {
          "name": "Click&Rent",
          "key": "click-rent",
          "logo": "https://www.discovercars.com/PartnerFiles/1041/logo_140x70.png?v=6918",
          "rating": {
            "score": 7.2,
            "label": "Below Average",
            "review_count": 3231
          },
          "rating_detailed": {
            "valueForMoney": 7.55,
            "valueForMoneyColor": "yellow-400-new",
            "valueForMoneyLabel": "7.6",
            "findPickup": 6.55,
            "findPickupColor": "yellow-400-new",
            "findPickupLabel": "6.6",
            "workEfficiency": 7.09,
            "workEfficiencyColor": "yellow-400-new",
            "workEfficiencyLabel": "7.1",
            "timeSpentPickingUp": 6.04,
            "timeSpentPickingUpColor": "yellow-400-new",
            "timeSpentPickingUpLabel": "6.0",
            "timeSpentDroppingOff": 7.37,
            "timeSpentDroppingOffColor": "yellow-400-new",
            "timeSpentDroppingOffLabel": "7.4",
            "carCleanliness": 7.76,
            "carCleanlinessColor": "yellow-400-new",
            "carCleanlinessLabel": "7.8",
            "carCondition": 7.72,
            "carConditionColor": "yellow-400-new",
            "carConditionLabel": "7.7",
            "avgValue": 7.15,
            "locationReviewCount": 229,
            "countryReviewCount": 3231,
            "worldReviewCount": 9494
          },
          "pickup_address": "Hotel Madrid Airport Suites Affiliated By Meliá,  Calle De Lola Flores 20",
          "coords": {
            "key": "40_4455_-3_5428",
            "lat": "40.4455",
            "lng": "-3.5428"
          }
        },
        "pickup": {
          "location": "Madrid Airport (MAD)",
          "is_airport": true,
          "type": "Free shuttle service",
          "type_icon": "bus"
        },
        "mileage": {
          "unlimited": false,
          "label": "Limited",
          "unspecified": false,
          "day_limit": "200 km/day included mileage"
        },
        "fuel_policy": "Full to full",
        "payment_type": "Pay now",
        "deposit": {
          "key": "average",
          "title": "Average deposit",
          "amount": "€1,000.00"
        },
        "coverage": null,
        "extras": null,
        "free_cancellation": true,
        "instant_confirmation": true,
        "badges": [
          "online_check_in"
        ],
        "book_url": "https://www.discovercars.com/en/offer/c383d352-850d-4b10-8c53-034a1a826302-RXMA?sq=eyJQaWNrdXBMb2NhdGlvbklkIjoxODc1LCJEcm9wT2ZmTG9jYXRpb25JZCI6MTg3NSwiUGlja3VwRGF0ZVRpbWUiOiIyMDI2LTA5LTI3VDEwOjAwOjAwIiwiRHJvcE9mZkRhdGVUaW1lIjoiMjAyNi0wOS0zMFQxMDowMDowMCIsIlJlc2lkZW5jZUNvdW50cnkiOiJVUyIsIkRyaXZlckFnZSI6MzUsIkhhc2giOiIxODU3MzE2ZWZjODc0MWZhOGQ3NGJhMzg1ODUxZDVlZiJ9"
      },
      {
        "offer_id": "8HY2",
        "vehicle": {
          "name": "Fiat 500",
          "category": "Economy",
          "acriss": "ECMR",
          "transmission": "manual",
          "seats": 4,
          "doors": 3,
          "bags": 1,
          "air_conditioning": true,
          "fuel_type": null,
          "guaranteed_model": false,
          "image": "https://www.discovercars.com/images/car/110/220.png"
        },
        "price": {
          "amount": 46.39,
          "currency": "EUR",
          "formatted": "€46.39",
          "rental_days": 3,
          "daily": 15.46
        },
        "supplier": {
          "name": "Click&Rent",
          "key": "click-rent",
          "logo": "https://www.discovercars.com/PartnerFiles/1041/logo_140x70.png?v=6918",
          "rating": {
            "score": 7.2,
            "label": "Below Average",
            "review_count": 3231
          },
          "rating_detailed": {
            "valueForMoney": 7.55,
            "valueForMoneyColor": "yellow-400-new",
            "valueForMoneyLabel": "7.6",
            "findPickup": 6.55,
            "findPickupColor": "yellow-400-new",
            "findPickupLabel": "6.6",
            "workEfficiency": 7.09,
            "workEfficiencyColor": "yellow-400-new",
            "workEfficiencyLabel": "7.1",
            "timeSpentPickingUp": 6.04,
            "timeSpentPickingUpColor": "yellow-400-new",
            "timeSpentPickingUpLabel": "6.0",
            "timeSpentDroppingOff": 7.37,
            "timeSpentDroppingOffColor": "yellow-400-new",
            "timeSpentDroppingOffLabel": "7.4",
            "carCleanliness": 7.76,
            "carCleanlinessColor": "yellow-400-new",
            "carCleanlinessLabel": "7.8",
            "carCondition": 7.72,
            "carConditionColor": "yellow-400-new",
            "carConditionLabel": "7.7",
            "avgValue": 7.15,
            "locationReviewCount": 229,
            "countryReviewCount": 3231,
            "worldReviewCount": 9494
          },
          "pickup_address": "Hotel Madrid Airport Suites Affiliated By Meliá,  Calle De Lola Flores 20",
          "coords": {
            "key": "40_4455_-3_5428",
            "lat": "40.4455",
            "lng": "-3.5428"
          }
        },
        "pickup": {
          "location": "Madrid Airport (MAD)",
          "is_airport": true,
          "type": "Free shuttle service",
          "type_icon": "bus"
        },
        "mileage": {
          "unlimited": false,
          "label": "Limited",
          "unspecified": false,
          "day_limit": "200 km/day included mileage"
        },
        "fuel_policy": "Full to full",
        "payment_type": "Pay now",
        "deposit": {
          "key": "average",
          "title": "Average deposit",
          "amount": "€1,000.00"
        },
        "coverage": null,
        "extras": null,
        "free_cancellation": true,
        "instant_confirmation": true,
        "badges": [
          "online_check_in"
        ],
        "book_url": "https://www.discovercars.com/en/offer/c383d352-850d-4b10-8c53-034a1a826302-8HY2?sq=eyJQaWNrdXBMb2NhdGlvbklkIjoxODc1LCJEcm9wT2ZmTG9jYXRpb25JZCI6MTg3NSwiUGlja3VwRGF0ZVRpbWUiOiIyMDI2LTA5LTI3VDEwOjAwOjAwIiwiRHJvcE9mZkRhdGVUaW1lIjoiMjAyNi0wOS0zMFQxMDowMDowMCIsIlJlc2lkZW5jZUNvdW50cnkiOiJVUyIsIkRyaXZlckFnZSI6MzUsIkhhc2giOiIxN2Y4OGQ3YTM1N2JmN2Q3MzM0NDM1ZjQ2Y2Q1ZDMzNyJ9"
      }
    ],
    "facets": {
      "carGroups": [
        {
          "key": "car-group-small",
          "min": "€44.64",
          "minRaw": 44.64,
          "order": 1,
          "title": "Small cars",
          "default": "Small cars",
          "prefix": "car-group",
          "bags": 1,
          "seats": 4
        },
        {
          "key": "car-group-medium",
          "min": "€50.28",
          "minRaw": 50.28,
          "order": 2,
          "title": "Medium cars",
          "default": "Medium cars",
          "prefix": "car-group",
          "bags": 2,
          "seats": 5
        },
        {
          "key": "car-group-large",
          "min": "€62.96",
          "minRaw": 62.96,
          "order": 3,
          "title": "Large cars",
          "default": "Large cars",
          "prefix": "car-group",
          "bags": 2,
          "seats": 5
        }
      ],
      "supplier": [
        {
          "key": "supplier-alamo",
          "min": "€95.11",
          "minRaw": 95.11,
          "priority": 1,
          "title": "Alamo",
          "prefix": "supplier"
        },
        {
          "key": "supplier-alquicoche",
          "min": "€164.81",
          "minRaw": 164.81,
          "priority": 1,
          "title": "Alquicoche",
          "prefix": "supplier"
        },
        {
          "key": "supplier-avis",
          "min": "€144.64",
          "minRaw": 144.64,
          "priority": 1,
          "title": "Avis",
          "prefix": "supplier"
        }
      ],
      "rating": [
        {
          "key": "rating-85",
          "min": "€49.62",
          "minRaw": 49.62,
          "title": "Very Good 8.5+",
          "default": "Very Good",
          "group": "excellent",
          "labelGroup": "8.5+",
          "prefix": "rating"
        },
        {
          "key": "rating-80",
          "min": "€49.62",
          "minRaw": 49.62,
          "title": "Good 8+",
          "default": "Good",
          "group": "very-good",
          "labelGroup": "8+",
          "prefix": "rating"
        },
        {
          "key": "rating-75",
          "min": "€44.64",
          "minRaw": 44.64,
          "title": "Average 7.5+",
          "default": "Average",
          "group": "good",
          "labelGroup": "7.5+",
          "prefix": "rating"
        }
      ],
      "mileage": [
        {
          "key": "mileage-18",
          "min": "€49.62",
          "minRaw": 49.62,
          "title": "Unlimited",
          "default": "Unlimited",
          "prefix": "mileage"
        },
        {
          "key": "mileage-56",
          "min": "€44.64",
          "minRaw": 44.64,
          "title": "Limited",
          "default": "Limited",
          "prefix": "mileage"
        }
      ],
      "fuelPolicy": [
        {
          "key": "fuel-policy-4",
          "min": "€44.64",
          "minRaw": 44.64,
          "order": 2,
          "default": "Full to full",
          "title": "Full to full",
          "desc": "The fuel tank will be full or partly full when you pick up your car. Just replace the fuel you used before dropping your car off and you won't be charged any additional fuel fees.",
          "desc-inline": "The car will have a full tank of fuel — return it with a full tank to avoid extra charges.",
          "prefix": "fuel-policy"
        },
        {
          "key": "fuel-policy-3",
          "min": "€95.11",
          "minRaw": 95.11,
          "order": 3,
          "default": "Same to same",
          "title": "Same to same",
          "desc": "The fuel tank will be partly full when you pick up your car. Just replace the fuel you used before dropping your car off and you won't be charged any additional fuel fees.",
          "desc-inline": "Return the car with the same amount of fuel it had at pick-up to avoid extra charges.",
          "prefix": "fuel-policy"
        }
      ],
      "seats": [
        {
          "key": "seats-4",
          "min": "€44.64",
          "minRaw": 44.64,
          "title": "4 seats",
          "default": "4 seats",
          "prefix": "seats"
        },
        {
          "key": "seats-5",
          "min": "€47.92",
          "minRaw": 47.92,
          "title": "5 seats",
          "default": "5 seats",
          "prefix": "seats"
        },
        {
          "key": "seats-6",
          "min": "€232.95",
          "minRaw": 232.95,
          "title": "6 seats",
          "default": "6 seats",
          "prefix": "seats"
        }
      ],
      "carSpecifications": [
        {
          "key": "air-conditioning-y",
          "min": "€44.64",
          "minRaw": 44.64,
          "order": 9,
          "title": "Air Conditioning",
          "default": "Air Conditioning",
          "prefix": "air-conditioning"
        },
        {
          "key": "transmission-a",
          "min": "€52.81",
          "minRaw": 52.81,
          "title": "Automatic Transmission",
          "default": "Automatic Transmission",
          "prefix": "transmission"
        },
        {
          "key": "transmission-m",
          "min": "€44.64",
          "minRaw": 44.64,
          "title": "Manual Transmission",
          "default": "Manual Transmission",
          "prefix": "transmission"
        }
      ],
      "paymentType": [
        {
          "key": "payment-type-pt-1",
          "min": "€62.03",
          "minRaw": 62.03,
          "title": "Pay part now",
          "default": "Pay part now",
          "desc": "Part of the rental price is payable at the time of booking and the rest is payable at pick-up.",
          "desc-inline": "Pay part now with the rest due at pick-up.",
          "prefix": "payment-type"
        },
        {
          "key": "payment-type-pt-2",
          "min": "€44.64",
          "minRaw": 44.64,
          "title": "Pay now",
          "default": "Pay now",
          "desc": "The full price of the rental is payable at the time of booking. You can cancel for a full refund up to 48 hours before pick-up.",
          "desc-inline": "Pay the full rental costs upfront.",
          "prefix": "payment-type"
        }
      ],
      "deposit": [
        {
          "key": "deposit-no-deposit",
          "groups": [],
          "groupMax": "no-deposit",
          "min": "€122.37",
          "minRaw": 122.37,
          "title": "No deposit",
          "default": "No deposit",
          "prefix": "deposit"
        },
        {
          "key": "deposit-low",
          "groups": [],
          "groupMax": "low",
          "min": "€95.11",
          "minRaw": 95.11,
          "title": "Low deposit",
          "default": "Low deposit",
          "prefix": "deposit"
        },
        {
          "key": "deposit-average",
          "groups": [],
          "groupMax": "average",
          "min": "€44.64",
          "minRaw": 44.64,
          "title": "Average deposit",
          "default": "Average deposit",
          "prefix": "deposit"
        }
      ],
      "priceRange": [
        {
          "key": "price-range",
          "min": "€44.64",
          "order": 5,
          "title": "Price range",
          "default": "",
          "prefix": "price-range"
        },
        {
          "key": "price-range",
          "min": "€46.39",
          "order": 5,
          "title": "Price range",
          "default": "",
          "prefix": "price-range"
        },
        {
          "key": "price-range",
          "min": "€46.39",
          "order": 5,
          "title": "Price range",
          "default": "",
          "prefix": "price-range"
        }
      ],
      "carBrand": [
        {
          "key": "car-brand-guaranteed-model",
          "min": "€995.96",
          "minRaw": 995.96,
          "title": "Guaranteed model",
          "default": "Guaranteed model",
          "shortcut": "guaranteed-model",
          "prefix": "car-brand"
        },
        {
          "key": "car-brand-name-mercedes-benz",
          "min": "€995.96",
          "minRaw": 995.96,
          "title": "Mercedes-Benz",
          "default": "Mercedes-Benz",
          "shortcut": "mercedes-benz",
          "prefix": "car-brand-name"
        }
      ],
      "locationType": [
        {
          "key": "location-type-5",
          "min": "€55.77",
          "minRaw": 55.77,
          "order": 1,
          "default": "In terminal",
          "title": "In terminal",
          "desc": "The car rental desk is located in the terminal.",
          "desc-inline": "The rental desk and car are in the terminal.",
          "prefix": "location-type"
        },
        {
          "key": "location-type-2",
          "min": "€123.42",
          "minRaw": 123.42,
          "order": 3,
          "default": "Meet & Greet",
          "title": "Meet & Greet",
          "desc": "You will be met and taken to the car rental desk by a representative of the supplier.",
          "desc-inline": "A representative will take you to the car.",
          "prefix": "location-type"
        },
        {
          "key": "location-type-3",
          "min": "€44.64",
          "minRaw": 44.64,
          "order": 4,
          "default": "Free shuttle service",
          "title": "Free shuttle service",
          "desc": "Take a shuttle bus to get to the car rental desk.",
          "desc-inline": "You’ll take the supplier’s shuttle bus to the rental desk.",
          "prefix": "location-type"
        }
      ]
    },
    "total_available": 575,
    "suppliers": [
      {
        "supplier": "Record go",
        "key": "record-go",
        "logo": "https://www.discovercars.com/PartnerFiles/81/logo_140x70.png?v=8642",
        "rating": 7.9,
        "rating_label": "Average",
        "review_count": 11594,
        "offer_count": 57,
        "cheapest_price": 44.64
      },
      {
        "supplier": "Click&Rent",
        "key": "click-rent",
        "logo": "https://www.discovercars.com/PartnerFiles/1041/logo_140x70.png?v=6918",
        "rating": 7.2,
        "rating_label": "Below Average",
        "review_count": 3231,
        "offer_count": 48,
        "cheapest_price": 46.39
      },
      {
        "supplier": "Centauro",
        "key": "centauro",
        "logo": "https://www.discovercars.com/PartnerFiles/6/logo_140x70.png?v=4867",
        "rating": 8.6,
        "rating_label": "Very Good",
        "review_count": 6470,
        "offer_count": 11,
        "cheapest_price": 49.62
      }
    ],
    "price_range": {
      "min": 44.64,
      "max": 1128.94,
      "currency": "EUR"
    },
    "query": "Madrid Airport",
    "pickup_location": {
      "place_id": 1875,
      "city_id": 473,
      "country_id": 26,
      "label": "Madrid Airport (MAD), Madrid, Spain",
      "is_airport": true
    },
    "dropoff_location": {
      "place_id": 1875,
      "city_id": 473,
      "country_id": 26,
      "label": "Madrid Airport (MAD), Madrid, Spain",
      "is_airport": true
    },
    "pickup_datetime": "2026-09-27T10:00:00",
    "dropoff_datetime": "2026-09-30T10:00:00",
    "one_way": false,
    "guid": "957c5cad-8512-4f5b-8650-102eee2de776",
    "search_url": "https://www.discovercars.com/en/search/957c5cad-8512-4f5b-8650-102eee2de776?sq=eyJQaWNrdXBMb2NhdGlvbklkIjoxODc1LCJEcm9wT2ZmTG9jYXRpb25JZCI6MTg3NSwiUGlja3VwRGF0ZVRpbWUiOiIyMDI2LTA5LTI3VDEwOjAwOjAwIiwiRHJvcE9mZkRhdGVUaW1lIjoiMjAyNi0wOS0zMFQxMDowMDowMCIsIlJlc2lkZW5jZUNvdW50cnkiOiJVUyIsIkRyaXZlckFnZSI6MzUsIkhhc2giOiIifQ%3D%3D&searchVersion=2"
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Car Rental API works

Car Rental is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /car-rental/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Resolve the pickup, pull the whole board, then check who you are buying from

There is no paging to write here — the search returns the entire comparison board in one response. Three calls, measured against Madrid Airport while writing this.

01autocomplete
POST/car-rental/v1/cars/autocomplete
{"query": "Madrid"}

Ten places in under two seconds — the airport, 'Madrid (all locations)', Atocha station and the rest — each with the place, city and country ids that let you skip the free-text resolution later.

02search
POST/car-rental/v1/cars/search
{"query": "Madrid Airport", "pickup_date": "2026-09-18", "dropoff_date": "2026-09-21", "currency": "EUR"}

531 offers from 17 suppliers in 7.6 seconds, sorted cheapest first, with a facet block breaking the same board down by category, supplier, mileage, fuel policy, seats and price band. Add max_offers only if you want less.

03reviews
POST/car-rental/v1/cars/reviews
{"query": "Madrid", "max_reviews": 50}

Forty-four reviews and an average of 9.23 for the location, each carrying the ten-point score, the free text, a full timestamp and the model the reviewer actually drove.

Every price in a market for one pickup, the small print attached to each of them, and the reputation of the supplier behind the cheapest.

request
curl -X POST https://api.reefapi.com/car-rental/v1/cars/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"Madrid Airport","currency":"EUR","pickup_date":"2026-10-12","dropoff_date":"2026-10-15","max_offers":40}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "car-rental",
    "endpoint": "cars/search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

What the numbers on an offer actually mean

The most expensive mistake with this engine is reading price.amount as a nightly rate. It is not. Every row below was measured on 2026-08-27 from the same pickup point (Madrid Airport) over the same 10-13 October window, changing one parameter at a time so each effect is attributable.

Field or parameterWhat it holdsMeasured
price.amountThe TOTAL for the whole rental, in `currency`Fiat 500, 10-13 Oct = 44.19 EUR. Same car, 10-16 Oct = 65.17 EUR. Six days is not double three days.
price.dailyamount divided by price.rental_days, computed for you44.19 over 3 days = 14.73. On the six-day search the same car is 10.86 a day.
driver_ageChanges the quote, it does not just annotate itAge 35 = 44.19 EUR. Age 20, identical car and dates = 90.52 EUR.
drop_queryOne-way. The drop fee sits inside price.amount, never itemizedMAD to MAD = 44.19 EUR. MAD to Barcelona Airport = 234.19 EUR, and one_way flips to true.
vehicle.acrissFour-letter ACRISS class codeEXAE (Fiat 500), EDAR (Peugeot 208), CDMR (Hyundai i30)
Location idsplace_id + city_id + country_id from cars/autocomplete, not IATA codesMadrid Airport = place_id 1875, city_id 473, country_id 26
max_offersTruncates offers[]. total_available is the real result sizemax_offers 3 returned count 3 with total_available 585
currencyRequotes, it does not just relabelSame Fiat 500: 44.19 EUR, 51.49 USD
deposit.amountA formatted display string with symbol and separators, not a numberA 1,200.00 euro hold, returned as text, alongside deposit.key 'average'
coverage.totalOptional damage cover, priced separately from price.amount26.96 EUR on the 44.19 EUR Fiat 500 offer

offer_id is scoped to one search, not to a car. The Fiat 500 that came back as offer_id ZECZ on one call was HQWE on the next call with identical parameters, and the top-level guid changed with it. Treat supplier.name plus vehicle.acriss plus price.amount as an offer's identity across runs, and follow book_url while the search is still fresh.

What the number covers, what it does not, and the parameter that doubles it

Measured on 2026-08-28 against Madrid Airport, two date windows, two driver ages and two currencies. One of these lines goes against us.

One call is the whole board, with no paging at all

Omit max_offers and the response carried 531 offers from 17 suppliers in a single 7.6-second call, with the total_available field matching the count exactly. Capping it at forty returned the forty cheapest, from five suppliers — so the cap is a cheapest-first slice, not a page. There is no cursor to walk and no risk of a partial board, which is unusual enough in this category to be the reason to use this engine.

The price is the rental total, and it tells you the day count itself

€46.94 came back with rental_days 3 and daily 15.65 in the same block. You never divide and you never guess whether a number is per day: both are there, next to a formatted string and the ISO currency. price_range on the response gives the floor and ceiling of the whole board — €46.94 to €1,184.97 on our run.

What is NOT in the price sits on the same row

This is the part a comparison table usually hides. On one €46.94 offer: coverage.total was €24.51 of extra insurance not included in that price, deposit was 'Average deposit, €1,000.00', mileage was 'Limited, 200 km/day included mileage', the fuel policy was 'Full to full', payment_type was 'Pay now', and free_cancellation and instant_confirmation were both explicit booleans. The cheap number and the real number are both on the row.

🔴 driver_age is a price parameter, and it nearly doubles the number

Against anyone who leaves it at the default. Same location, same dates, same currency, age 21 instead of the default 35: the identical car from the identical supplier went from €48.50 to €98.38, and another from €46.94 to €96.45. The market shrank at the same time, from 529 offers across five suppliers to 435 across four. If your users are not all thirty-five, this field is not optional.

In season, the same car costs about twice as much

September against December from the same airport: twelve of the forty cheapest offers appeared in both windows, and every one of them rose steeply — €74.12 to €123.02, €65.52 to €146.88, €59.54 to €141.76, €50.40 to €139.89. The floor of the whole board moved from €46.94 to €118.16.

Ask twice, get the same board

Two identical searches minutes apart shared thirty-seven of forty offers, keyed on vehicle and supplier, and the price was identical on all thirty-seven. The board is stable enough to diff directly; only the total_available count drifted, by two.

Currency converts at the source, on the whole response

EUR against USD on the same search: thirty-seven offers in common and every one converted — €48.50 to $56.50, €46.94 to $54.68, €67.03 to $78.08. One currency per call, applied to the offers, the price range and the supplier rollup alike.

Every offer names its supplier and that supplier's reputation

Each row carries the supplier's name, its rating on a ten-point scale with a plain-English label — 7.2 'Below Average' on 3,231 reviews — and a detailed breakdown scoring how easy the pickup was to find, how long it took, the car's cleanliness and its condition as separate numbers. Beside the offers a per-supplier rollup gives each supplier's cheapest price and offer count, which is the comparison most people actually want.

It is slow, and it is slow for a reason you can see

Calls ran between six and fifteen seconds, and the response reports how many polls it needed — two, on the run we timed. It is aggregating a live board across suppliers rather than reading one page, so budget seconds rather than milliseconds and take the whole board in one call instead of many.

What comes back, and what does not

Public offers from the comparison board, their small print, and public customer reviews of a location with the reviewer's country and the car they drove. Not a reservation, not a supplier's own back-office rate, and no account of yours anywhere in the path — the identity you send is a ReefAPI key.

What people build with Car Rental

The jobs this data is most often used for.

3

endpoints

1/2

credits per call

01

Travel apps call cars/search to compare rental prices by vehicle class.

02

Price monitors track daily rates across suppliers.

03

Apps use cars/reviews to surface supplier quality.

What Car Rental data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/car-rental/v1/cars/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"Madrid Airport","currency":"EUR","pickup_date":"2026-10-12","dropoff_date":"2026-10-15","max_offers":40}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/car-rental/v1/cars/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "Madrid Airport",
  "currency": "EUR",
  "pickup_date": "2026-10-12",
  "dropoff_date": "2026-10-15",
  "max_offers": 40
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Car Rental.

Get a free key →
Is price.amount per day or for the whole rental?

For the whole rental. A Madrid Airport search for 10-13 October returned a Fiat 500 at 44.19 EUR; the same car for 10-16 October came back at 65.17 EUR. If the number were nightly, six days would have cost the same per night as three. The per-night figure is supplied separately as price.daily (14.73 and 10.86 in those two searches), and price.rental_days tells you what it was divided by.

Do I pass an IATA airport code like MAD or LHR?

No. Locations are aggregator place ids, resolved by cars/autocomplete. Asking it for London returned ten rows: Gatwick (place_id 1600), Heathrow (1712), London all-locations (570), Stansted (1603), London City (1785), St Pancras station (6946), then East London in South Africa. Each row carries place_id, city_id, country_id, an is_airport flag and a type of airport, downtown or railway. You can also pass free-text `query` and let the engine resolve it, in which case prefer_airport decides between airport and downtown, and the row it picked comes back as pickup_location.

I passed a transmission value that is not in the enum and got zero offers with ok:true. Why?

transmission, category and supplier are applied as filters against the offer set after it is fetched, so an unrecognized value matches nothing rather than being ignored. Sending transmission 'hovercraft' on a Madrid search returned ok:true, count 0, supplier_count 0 and price_range null, while total_available still read 587. Compare total_available against count: a healthy total_available with a zero count means a filter, not a lack of cars.

Why does the suppliers rollup report more offers than I received?

The per-supplier rollup is computed over the full result set, not over the rows you kept. A search with max_offers 3 returned three offers but a rollup entry for Centauro reading offer_count 9. Drop max_offers to see the real spread: the uncapped Madrid Airport search for 10-13 October returned 585 offers across 17 suppliers, with the cheapest per supplier ranging from 44.19 EUR up to 198.60 EUR.

Are insurance and extras included in the price?

No. extras came back null on every offer measured. coverage.total is a separate figure for optional damage cover (26.96 EUR on the 44.19 EUR Fiat 500), and deposit is the card hold the supplier will place, returned as a formatted display string plus a deposit.key such as 'average'. fuel_policy (measured 'Full to full') and mileage (unlimited true or false, with a label) are the two terms that most often explain a gap between two otherwise identical prices.

How stable is offer_id, and can I cache a quote?

Not stable at all. Two identical searches minutes apart returned the same Fiat 500 as ZECZ and then HQWE, each with a fresh top-level guid. book_url embeds that search's guid, so a cached quote expires with the search rather than with the price. Re-run the search when you need a live number, and match rows across runs on supplier.name plus vehicle.acriss.

What is in facets, and do I need it?

facets is the site's own filter sidebar, returned when include_facets is true: carGroups, supplier, rating, mileage, fuelPolicy, seats, carSpecifications, paymentType, deposit, priceRange, carBrand and locationType. Each bucket carries its cheapest price, so on one Madrid search carGroups showed small cars from 44.19 EUR and SUVs from 54.95 EUR, and mileage split into Unlimited from 44.19 EUR versus Limited from 57.62 EUR. It is the cheap way to size a market before pulling all 585 offers.

What rating scale do suppliers use, and can I filter on it?

A 0-10 score with a word label and a review count: one Madrid supplier came back at 8.6, labelled Very Good, over 6,443 reviews. min_supplier_rating filters on that scale. A rating_detailed block splits the same score into valueForMoney, findPickup, workEfficiency, timeSpentPickingUp, timeSpentDroppingOff, carCleanliness and carCondition, and separates locationReviewCount (698 for that Madrid desk) from countryReviewCount (6,443). Worth checking, because a strong national score can sit on a thin local sample.

What is the Car Rental API?

Car Rental API is a ReefAPI endpoint group for compare rental cars, prices and availability worldwide. It returns live JSON through POST requests under /car-rental/v1.

Is the Car Rental API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Car Rental calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Car Rental login or account?

No login to Car Rental is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Car Rental data?

The page example is captured from a live cars/search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Car Rental API use?

Car Rental actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Car Rental from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call car-rental actions with the same key, credit pool and JSON envelope used by normal REST requests.

8 Travel & Lodging APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Car Rental, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-28.