Skip to content
Scrappa Get API key
Rentalcars API 1 credit/request

Rentalcars Offer API Documentation

GET https://scrappa.co/api/rentalcars/offer

Get one offer from a search with its pickup and dropoff depot. Rentalcars has no route for a single offer, so this endpoint runs the search again and returns the offer with the matching vehicle_id. Send the same search parameters you used for the search. Offers change over time, so an offer can be gone on a later call. Then the endpoint returns 404 and does not bill. One search returns at most 500 offers. The pagination object shows total_offers, offer_cap and capped. The market (cor) and the currency decide the prices. The response echoes both values in the market object. Scrappa is not affiliated with Rentalcars.com. This is an unofficial API.

Rentalcars Offer API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/rentalcars/offer
Auth header
x-api-key
Cost
1 credit/request
pickup_location = BER pickup_date = 2026-12-01 dropoff_date = 2026-12-04
Response preview
200 OK
{
    "meta": {
        "attempts": 1,
        "duration_ms": 3,
        "endpoint_family": "offer"
    },
    "offer": {
        "car": {
            "fuel": "N/A",
            "doors": 4,
            "seats": 4,
            "groups": [],
            "car_class": "XXMR",
            "image_url": "https://cdn2.rcstatic.com/images/car_images/new_images/wildcards/ghost_car_lrg.jpg",
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

4 required parameters needed before sending a request.

6 optional filters available.

pickup_location string Required

Pickup place. A 3-letter IATA airport code or "lat,lng". Example: BER.

Example value BER
pickup_date string Required

Pickup date in Y-m-d format. It must not be in the past. Example: 2026-12-01.

Example value 2026-12-01
dropoff_date string Required

Dropoff date in Y-m-d format. It must not be before the pickup date.

Example value 2026-12-04
vehicle_id string Required

The vehicle_id of an offer from the search response.

Example value 859050623
dropoff_location string Optional

Dropoff place. Same format as the pickup place. Default: the pickup place.

Example value example
pickup_time string Optional

Pickup time in H:i format. Default: 10:00.

Example value example
dropoff_time string Optional

Dropoff time in H:i format. Default: 10:00.

Example value example
drivers_age integer Optional

Age of the driver, from 18 to 99. Default: 30.

Example value 10
cor string Optional

Country of residence as a 2-letter code, or auto. It sets the market and the prices. With auto no market is sent and the offers follow the exit country. Use auto when you want to pass the search_key and vehicle_id to /terms. Default: gb.

Example value example
currency string Optional

Currency code for prices. Default: EUR.

Example value USD

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

meta offer market search_key pickup_depot dropoff_depot search_parameters
JSON Response
200 OK
{
    "meta": {
        "attempts": 1,
        "duration_ms": 3,
        "endpoint_family": "offer"
    },
    "offer": {
        "car": {
            "fuel": "N/A",
            "doors": 4,
            "seats": 4,
            "groups": [],
            "car_class": "XXMR",
            "image_url": "https://cdn2.rcstatic.com/images/car_images/new_images/wildcards/ghost_car_lrg.jpg",
            "categories": [
                "special"
            ],
            "transmission": "MANUAL",
            "make_and_model": "Wild Card",
            "suitcase_count": 2,
            "large_suitcases": 2,
            "small_suitcases": 1,
            "air_conditioning": true
        },
        "fees": [
            {
                "per": null,
                "name": "DAMAGE_EXCESS",
                "type": null,
                "amount": 1200,
                "source": "MAPPED",
                "currency": "EUR",
                "distance": null,
                "unlimited": null,
                "tax_included": true,
                "distance_unit": null,
                "always_payable": true,
                "payable_locally": false,
                "included_in_total": false
            },
            {
                "per": null,
                "name": "DEPOSIT",
                "type": null,
                "amount": 250,
                "source": "MAPPED",
                "currency": "EUR",
                "distance": null,
                "unlimited": null,
                "tax_included": true,
                "distance_unit": null,
                "always_payable": true,
                "payable_locally": false,
                "included_in_total": false
            }
        ],
        "rank": 3,
        "price": {
            "total": 221.78,
            "deposit": 221.78,
            "per_day": 73.93,
            "currency": "EUR",
            "discount": 0,
            "base_total": 186.8,
            "base_currency": "GBP",
            "drive_away_total": 221.78
        },
        "source": "rest",
        "deposit": {
            "amount": 250,
            "currency": "EUR"
        },
        "mileage": {
            "per": "PER_RENTAL",
            "type": "LIMITED",
            "unlimited": false,
            "distance_unit": "KM",
            "extra_currency": "EUR",
            "extra_per_unit": 0.37,
            "included_distance": 900
        },
        "pay_when": "PAY_NOW",
        "supplier": {
            "id": "17",
            "name": "Alamo",
            "type": "INTEGRATED",
            "logo_url": "https://cdn2.rcstatic.com/sp/images/suppliers/17_logo_200.png"
        },
        "insurance": {
            "products": []
        },
        "promotions": [],
        "vehicle_id": "859050623",
        "fuel_policy": {
            "type": "RETURN_SAME"
        },
        "pickup_type": "CAR_RENTAL_CENTRE",
        "depot_rating": {
            "scope": "depot",
            "average": 7.5,
            "locating": 7.7,
            "condition": 7.3,
            "efficiency": 7.2,
            "cleanliness": 8.3,
            "num_ratings": 953,
            "collect_time": 7.1,
            "drop_off_time": 8,
            "value_for_money": 7
        },
        "theft_excess": {
            "amount": 1200,
            "currency": "EUR"
        },
        "damage_excess": {
            "amount": 1200,
            "currency": "EUR"
        },
        "pickup_depot_id": "4829006",
        "dropoff_depot_id": "4829006",
        "proposition_type": "BR",
        "free_cancellation": true,
        "provisional_extras": [
            {
                "type": "BABY_SEAT",
                "price": {
                    "amount": 46.49509179677124,
                    "currency": "EUR"
                }
            },
            {
                "type": "CHILD_SEAT",
                "price": {
                    "amount": 46.49509179677124,
                    "currency": "EUR"
                }
            }
        ],
        "credit_card_required": false,
        "special_offer_message": "Car equipped with all-season tyres."
    },
    "market": {
        "country": "GB",
        "currency": "EUR"
    },
    "search_key": "eyJkcml2ZXJzQWdlIjozMCwiZHJvcE9mZkRhdGVUaW1lIjoiMjAyNi0xMS0yN1QxMDowMDowMCIsImRyb3BPZmZMb2NhdGlvbiI6IkJFUiIsImRyb3BPZmZMb2NhdGlvblR5cGUiOiJJQVRBIiwicGlja1VwRGF0ZVRpbWUiOiIyMDI2LTExLTI0VDEwOjAwOjAwIiwicGlja1VwTG9jYXRpb24iOiJCRVIiLCJwaWNrVXBMb2NhdGlvblR5cGUiOiJJQVRBIiwicmVudGFsRHVyYXRpb25JbkRheXMiOjMsInNlcnZpY2VGZWF0dXJlcyI6WyJJTkNMVURFX05VTUJFUl9PRl9TVUlUQ0FTRVMiLCJSRVRVUk5fRVhUUkFTX1dJVEhfUFJJQ0lOR19JTl9NVUxUSV9DQVJfUkVTUE9OU0UiLCJBUFBMRV9DQVJEX0VOQUJMRUQiXSwic2lnbmF0dXJlIjoiUFNmZFFUenJMUTNaVG1aT0JqYlNXdzVTckVRdHFlWXJCNWg5R3ZGb2s3Zz0ifQ==",
    "pickup_depot": {
        "id": "4829006",
        "city": "Berlin",
        "iata": "BER",
        "name": "Berlin Brandenburg Airport Willy Brandt",
        "rating": {
            "scope": "depot",
            "average": 7.5,
            "locating": 7.7,
            "condition": 7.3,
            "efficiency": 7.2,
            "cleanliness": 8.3,
            "num_ratings": 953,
            "collect_time": 7.1,
            "drop_off_time": 8,
            "value_for_money": 7
        },
        "address": "1 Melli-Beese-Ring, Sch\u00f6nefeld, Berlin, Germany, 12529",
        "latitude": 52.364206,
        "longitude": 13.508656,
        "location_id": "466611",
        "pickup_type": "CAR_RENTAL_CENTRE",
        "supplier_id": "17",
        "country_code": "DE",
        "pickup_instructions": null,
        "drop_off_instructions": null,
        "distance_from_search_km": null
    },
    "dropoff_depot": {
        "id": "4829006",
        "city": "Berlin",
        "iata": "BER",
        "name": "Berlin Brandenburg Airport Willy Brandt",
        "rating": {
            "scope": "depot",
            "average": 7.5,
            "locating": 7.7,
            "condition": 7.3,
            "efficiency": 7.2,
            "cleanliness": 8.3,
            "num_ratings": 953,
            "collect_time": 7.1,
            "drop_off_time": 8,
            "value_for_money": 7
        },
        "address": "1 Melli-Beese-Ring, Sch\u00f6nefeld, Berlin, Germany, 12529",
        "latitude": 52.364206,
        "longitude": 13.508656,
        "location_id": "466611",
        "pickup_type": "CAR_RENTAL_CENTRE",
        "supplier_id": "17",
        "country_code": "DE",
        "pickup_instructions": null,
        "drop_off_instructions": null,
        "distance_from_search_km": null
    },
    "search_parameters": {
        "engine": "rentalcars_offer",
        "market": "gb",
        "currency": "EUR",
        "vehicle_id": "859050623",
        "drivers_age": 30,
        "rental_days": 3,
        "pickup_datetime": "2026-11-08T10:00:00",
        "pickup_location": "BER",
        "dropoff_datetime": "2026-11-11T10:00:00",
        "dropoff_location": "BER",
        "pickup_location_type": "IATA",
        "dropoff_location_type": "IATA"
    }
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

422

Validation Error

A parameter is missing or invalid. No request is made upstream. Not billed.

{
    "errors": {
        "pickup_location": [
            "A pick-up location is required: an airport IATA code or \"latitude,longitude\"."
        ]
    },
    "message": "A pick-up location is required: an airport IATA code or \"latitude,longitude\"."
}
422

Request Rejected

Rentalcars rejected the search values, for example a filter value that is not in available_filters. Not billed.

{
    "meta": {
        "attempts": 1,
        "billable": false,
        "retryable": false,
        "duration_ms": 900,
        "endpoint_family": "offer"
    },
    "error": {
        "code": "rentalcars_request_rejected",
        "message": "Rentalcars rejected the request. Check the parameters."
    }
}
404

Offer Not Found

No offer matches the vehicle_id or the supplier in this search and market. Not billed.

{
    "meta": {
        "attempts": 1,
        "billable": false,
        "retryable": false,
        "duration_ms": 900,
        "endpoint_family": "offer"
    },
    "error": {
        "code": "rentalcars_offer_not_found",
        "message": "No matching offer was found."
    }
}
503

Rentalcars Temporarily Unavailable

Rentalcars did not answer in time. Retry after a short pause. Other 503 codes start with rentalcars_ too, for example rentalcars_invalid_response. Not billed.

{
    "meta": {
        "attempts": 1,
        "billable": false,
        "retryable": true,
        "duration_ms": 900,
        "endpoint_family": "offer"
    },
    "error": {
        "code": "rentalcars_upstream_unavailable",
        "message": "Rentalcars is temporarily unavailable. Please retry."
    }
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Try It Live

Test this endpoint in our interactive playground with real data.