Tool description (what the LLM sees)
Tool description (what the LLM sees)
Search live car rental availability and return bookable offers. Each offer's offer_id is a trip item token, pass it verbatim to trip(add_item) as trip_item_token to put the rental in a cart, then checkout as normal. There is NO car-specific booking tool.
WHEN TO USE THIS TOOL:
- The user wants to rent a car / hire a car / needs a vehicle between two dates.
- You already know the pick-up place, the pick-up and return date-times, the driver's age, and the driver's country of residence. driver_age and residence_country are REQUIRED and both change the price, ask for them, never guess.
NAMING THE PLACE (exactly one of three, per end):
- airport_code, a 3-letter IATA code ("LYS"). Prefer this whenever the user named an airport; it needs no resolution step.
- place, free text ("lyon part dieu", "Lyon city centre"). Resolved server-side. If the text matches several genuinely different rental locations, the response comes back with status "ambiguous_place" and a candidates list INSTEAD of offers. Put the candidates to the user and retry with the chosen candidate's name, never auto-pick one, because "Lyon" is an airport, a rail station and a downtown office that book three different counters.
- geo, {latitude, longitude, range} for "near me". ROUND-TRIP ONLY: omit drop_off and set drop_off_date_time.
Provider ids (location, city, branch, supplier) are not accepted on this surface.
DATE-TIMES: branch-local "YYYY-MM-DDTHH:MM:SS" with NO timezone. A "Z" or an offset is rejected, the rental desk works in its own local time. Responses carry each branch's IANA time_zone, which is the only way to turn a local time into an instant.
ONE-WAY vs ROUND TRIP: omit drop_off and set drop_off_date_time to return the car to the pick-up branch. For a one-way rental, send drop_off with its own place and date_time.
RESPONSE: offers[], each with offer_id ("car_…"), expires_at (~30 minutes, after that, search again), on_request (the supplier confirms manually, so booking settles asynchronously), price, vehicle, package, and pick_up/drop_off branches. total_found / offers_shown / offers_omitted declare any truncation; when offers were dropped, narrow the search rather than paging.
RENTAL COMPANY: package.supplier_name is the rental company the customer physically collects the car from, Avis, Hertz, Europcar, Sixt. Surface it with every offer you present: it is one of the things travelers decide on, and two otherwise identical offers are often different companies at different desks. Do not confuse it with vehicle.name (the car model, "or similar" unless model_guaranteed) or package.name (the rate plan, e.g. "Fully Inclusive").
MONEY: price.pay_now is the ONLY amount Jinko ever charges. due_at_desk is collected by the rental desk and is display-only, deposit is a card hold, estimated_total is the supplier's FX-movable estimate. Never sum them into a total.
IMPORTANT:
- An EMPTY cancellation_fees list means the supplier published no schedule. That is UNKNOWN, never "free cancellation". A coverage's excess of null means "not stated", not "no excess".
- requires_flight_number on a branch is the supplier's policy, and NEITHER value is collectable today: Jinko has no field to carry a flight number. "always" means this branch cannot be booked at all, prefer an offer from another branch. "out_of_hours_pickup" is reported but never enforced, because Auto Europe's rate rules carry no opening hours to test the pick-up against.
- Booking a car also needs the booking contact's honorific, pass contact.title (e.g. "mr", "ms", "mrs") on trip(upsert_travelers). It is matched against Auto Europe's own title vocabulary, so an unusual value may not resolve. The readiness gate refuses a car cart without a title, before any card is charged.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
pick_up | object | Yes | Where and when the car is collected. The place is exactly one of airport_code, place or geo. |
pick_up.date_time | string | Yes | Pick-up date-time, BRANCH-LOCAL and zone-less: “2026-09-12T10:00:00”. Never send a “Z” or an offset. |
pick_up.airport_code | string | No | IATA airport code (e.g. “LYS”). The primary path, it needs no resolution hop, so prefer it whenever the user named an airport. |
pick_up.place | string | No | Free-text location, a city, district, station or landmark (“lyon part dieu”). Resolved server-side. When the text matches several genuinely different rental locations the response carries candidates INSTEAD of offers: put those to the user and retry with the chosen candidate’s name (qualify it with the city, “City Centre, Lyon”, when two candidates share a name). Never auto-pick a candidate. |
pick_up.geo | object | No | Coordinates plus a radius, for “near me” searches. ROUND-TRIP ONLY: drop_off must be omitted, or name the exact same place. |
pick_up.geo.latitude | number | Yes | Latitude in decimal degrees. |
pick_up.geo.longitude | number | Yes | Longitude in decimal degrees. |
pick_up.geo.range | integer | Yes | Search radius around the coordinates (minimum 50). The provider returns the 30 closest branches. |
drop_off | object | No | Where the car is returned, for a one-way rental. OMIT for a round trip (returned to the pick-up branch) and set drop_off_date_time instead. |
drop_off.date_time | string | No | Drop-off date-time, branch-local. May instead be given as the top-level drop_off_date_time; set only one. |
drop_off.airport_code | unknown | No | |
drop_off.place | unknown | No | |
drop_off.geo | unknown | No | |
drop_off_date_time | string | No | Return date-time when drop_off is omitted, branch-local. A rental with no end has no price, so one of this or drop_off.date_time is REQUIRED. |
driver_age | integer | Yes | The driver’s age at pick-up (18-99). Price-affecting and REQUIRED, ask the user rather than guessing. It is baked into the rate and is never asked again at booking. |
residence_country | string | Yes | The driver’s country of residence, ISO 3166-1 alpha-2. REQUIRED: it changes both the price and which suppliers will rent at all. |
currency | string | No | ISO 4217 display currency (e.g. “EUR”). Defaults to the caller’s country/locale, else USD, so a mixed cart stays single-currency. |
lang | string | No | BCP-47 language tag for provider text (package names, fuel policy), e.g. “en-gb”. |
user_intent | string | No | The end user’s current request in their own words, e.g. “find a cheap flight to Tokyo in mid-June”. Pass it as-is when short; otherwise condense the goal and constraints into 1-2 sentences. Strip personal identifiers (names, emails, phone numbers, addresses, payment details), replace them with placeholders like “[name]”. Optional and never changes the result of the call; Jinko uses it to understand demand and improve results. |
