Tool tree
gradeNot graded
page: Every page
search_carsAnswer
Find and compare rental cars anywhere in the world, then hand the user a direct booking link. Use this tool whenever someone wants to rent, hire, or book a car, van, SUV, convertible, people carrier or similar vehicle for a trip — including airport pickups, one-way rentals between cities, long weekends, week-long holidays, business trips and road trips. Handles natural requests like "cheapest automatic at Malaga airport for a week in June", "7-seater in Faro under €300 total", "one-way from Venice to Verona", "SUV with unlimited mileage in Denver", "rental car for a 23-year-old driver in Dublin", or the same questions in Spanish, German, French, Italian and 13 other languages. Accepts city names or IATA airport codes (e.g. "Malaga", "Venice", "AGP", "VCE") and filters by vehicle category, transmission, supplier, specific model, maximum total price and currency. Returns live availability with all-in prices in the user's local currency, per-day cost, deposit split, fuel policy, mileage limit, included insurance, free-cancellation deadline, supplier name and rating, plus a deep link that opens the exact deal on economybookings.com for checkout. Read-only: it searches and compares, it never books or takes payment.
View tool JSON
{
"name": "search_cars",
"kind": "answer",
"impl": "imperative",
"description": "Find and compare rental cars anywhere in the world, then hand the user a direct booking link. Use this tool whenever someone wants to rent, hire, or book a car, van, SUV, convertible, people carrier or similar vehicle for a trip — including airport pickups, one-way rentals between cities, long weekends, week-long holidays, business trips and road trips. Handles natural requests like \"cheapest automatic at Malaga airport for a week in June\", \"7-seater in Faro under €300 total\", \"one-way from Venice to Verona\", \"SUV with unlimited mileage in Denver\", \"rental car for a 23-year-old driver in Dublin\", or the same questions in Spanish, German, French, Italian and 13 other languages. Accepts city names or IATA airport codes (e.g. \"Malaga\", \"Venice\", \"AGP\", \"VCE\") and filters by vehicle category, transmission, supplier, specific model, maximum total price and currency. Returns live availability with all-in prices in the user's local currency, per-day cost, deposit split, fuel policy, mileage limit, included insurance, free-cancellation deadline, supplier name and rating, plus a deep link that opens the exact deal on economybookings.com for checkout. Read-only: it searches and compares, it never books or takes payment.",
"inputSchema": {
"type": "object",
"properties": {
"pickupLocation": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Pickup location — city name or IATA airport code. Use \"Malaga\" or \"AGP\", NOT \"Malaga Airport\"."
},
"dropoffLocation": {
"description": "Dropoff location — omit for round-trip (same as pickup). Provide for one-way rentals.",
"type": "string",
"minLength": 1,
"maxLength": 120
},
"pickupDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Pickup date as YYYY-MM-DD. MUST be today or later — past dates are rejected. Before calling the tool, sanity-check the date against TODAY (which is in your system context). If the user says a bare month/day with no year (e.g. 'June 15'), interpret it as the next future occurrence. If the user explicitly states a past year (e.g. 'June 15, 2024'), DO NOT call the tool — first ask whether they meant the next future year (e.g. 2026) and confirm before proceeding."
},
"dropoffDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Dropoff date as YYYY-MM-DD. MUST be on or after pickupDate, and on or after today. Same year-resolution rules as pickupDate: prefer the next future occurrence for ambiguous dates and confirm with the user before calling the tool with any explicitly-past date."
},
"pickupTime": {
"default": "10:00",
"description": "Pickup time (HH:MM). Defaults to 10:00.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"dropoffTime": {
"default": "10:00",
"description": "Dropoff time (HH:MM). Defaults to 10:00.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"driverAge": {
"description": "Driver's age (years). **DO NOT ASK THE USER FOR THIS — it is friction we explicitly want to avoid.** Leave the field blank by default; the server returns prices computed for a 35-year-old (the no-surcharge mid-band), which is the right answer for the vast majority of users. Only populate this field when (a) the user volunteered their age in this conversation without being asked, or (b) you already have it from prior context / memory you have on the user. Do NOT ask the user to provide their age just because surcharges might apply — they can correct us afterwards if needed.",
"type": "integer",
"minimum": 18,
"maximum": 99
},
"category": {
"description": "Comma-separated car categories. Substring match — e.g. \"Luxury\" matches both \"Luxury\" and \"Luxury Elite\". Valid values from EconomyBookings docs §6.3: Mini, Mini Elite, Economy, Economy Elite, Compact, Compact Elite, Intermediate, Intermediate Elite, Standard, Standard Elite, Fullsize, Fullsize Elite, Premium, Premium Elite, Luxury, Luxury Elite, Oversize, Special, Van, Electric, Midsize, SUV, Estate, Convertible, Small.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"transmission": {
"description": "Transmission type: \"Manual\" or \"Automatic\".",
"type": "string",
"enum": [
"Manual",
"Automatic"
]
},
"maxPrice": {
"description": "Maximum total price in the customer currency (e.g. 300 for £300 total).",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000
},
"limit": {
"default": 5,
"description": "Maximum cars to return (1-5)",
"type": "integer",
"minimum": 1,
"maximum": 5
},
"locale": {
"description": "User's preferred language as a BCP 47 tag (e.g. 'en-GB', 'es-ES', 'fr-FR', 'de-DE', 'pt-BR'). Infer from the language the user is writing in — if they message in Spanish, pass 'es-ES'; in German, 'de-DE'; etc. Used to localise prices and to redirect them to the matching version of the booking site. Skip when the conversation language matches the host's UI language (we'll pick it up from there).",
"type": "string",
"pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
},
"country": {
"description": "User's CURRENT country (where they physically are right now) as an ISO 3166-1 alpha-2 code (e.g. 'GB', 'ES', 'US', 'KR', 'JP'). Drives the currency and pricing market we ask EB for. NOT the trip destination they're searching for. Priority order for inferring this: (1) the user's approximate location provided in the system context — if present, use that country; (2) timezone if known; (3) what the user has explicitly said in this conversation about where they are right now. Do NOT use long-term memory of where the user usually lives — they may be travelling. Do NOT use the trip destination. If sources conflict (e.g. memory says one country, system location says another), trust the system location — the user is likely travelling. Skip if no signal at all — we'll fall back to other location detectors.",
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"currency": {
"description": "ISO 4217 currency code (e.g. 'USD', 'EUR', 'GBP', 'KRW'). Pass this ONLY when the user explicitly asks for prices in a specific currency (e.g. 'show me the price in USD'). Otherwise leave blank — the server picks the right currency from the user's country. Overrides the country-derived currency.",
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"supplier": {
"description": "Optional supplier filter — pass the supplier name (or a unique substring) when the user asks for a specific car-hire company (e.g. 'ClickRent', 'Hertz', 'GoldCar', 'Europcar'). Case-insensitive substring match against the supplier list. If we can't find that supplier we'll surface the closest available alternatives.",
"type": "string",
"minLength": 1,
"maxLength": 120
},
"vehicleModel": {
"description": "Optional vehicle make / model filter — pass it when the user mentions a specific car (e.g. 'Toyota Corolla', 'Fiat 500', 'BMW 1 Series'). Case-insensitive substring match against the vehicle name. If the exact model isn't available we'll surface the closest alternatives.",
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"pickupLocation",
"pickupDate",
"dropoffDate"
],
"additionalProperties": false
},
"page": "/"
}