book_car
ChatGPTReserve a rental car (pay-at-pickup — nothing is charged at booking). Confirm vendor, class, dates, locations, and total price with the user before calling. Search ids expire in ~15 minutes; book promptly after search_cars.
book_flight
ChatGPTBook the selected flight using the user's saved payment method and returns a PNR confirmation. For round-trip, book the return flight_id — it books both legs.
book_hotel
ChatGPTBook the selected hotel room using the user's saved payment method and returns a reservation confirmation. Confirm price and cancellation policy with the user before calling.
cancel_account_deletion_request
ChatGPTCancel your pending account deletion request, leaving your account active.
cancel_booking
ChatGPTCancel a flight, hotel, or car rental booking. Two-step flow: first call with confirmed=false to see cancellation details (refund, fees, policy), then confirmed=true to execute. Irreversible — always confirm with user before executing. Requires booking_management skill key.
forget
ChatGPTForget a stored preference or memory (a #id from read_memory) when the traveler asks you to drop it or says it is no longer true. A correction ("window now, not aisle") is remember(replaces=…), not forget.
get_booking_detail
ChatGPTGet full detail on a specific booking — enriched content (all PNRs, manage-booking link, ticket info, seats, baggage, hotel amenities, car specs). Pass diagnose=true to also run a live supplier cross-check that tells you whether a booking is really confirmed/ticketed, in a security review, awaiting company approval, or already confirmed. Without diagnose, returns enriched detail only (no supplier round-trip).
get_bookings
ChatGPTRetrieve the user's confirmed flight and hotel bookings with live status and confirmation codes.
get_hotel_rooms
ChatGPTLoad the bookable room options for one or more hotels with prices, bed types, and cancellation policies. These rates ARE bookable quotes (unlike search_hotels which only previews a 'from' anchor). ALWAYS call this tool to surface room options once the user has picked a hotel (or a small shortlist) — the search_hotels brief alone is not enough to book. Present the top 3 rooms as a numbered list and wait for the user to pick — typically the cheapest refundable, the cheapest overall, and one notable upgrade. Do NOT call book_hotel on a room you chose yourself, even if the user said 'book the cheapest' or 'book the best'. See the hotel_search skill for the full presentation rule.
list_managed_travelers
ChatGPTList the people you're authorized to book and search for on their behalf — travelers who granted you delegate access in Otto. Returns each traveler's id, name, and email. To act for one of them, pass their id as the on_behalf_of argument on a search or book tool. Returns an empty list if no one has granted you access.
query_flights
ChatGPTFilter the previously returned flight search results with SQL to find specific options by price, time, airline, stops, or seat availability. ALWAYS call this tool to present or refine flight options — search_flights alone returns only a summary brief and a queryable handle; this tool is the only path to the actual flight rows. Call it immediately after search_flights completes to present the first set of options, and again whenever the user refines criteria (e.g. switches airline, narrows times, asks for cheaper fares). Do NOT keep polling task_status after search completes — once the task_status response carries a result with a handle, your next step is this tool. Present results conversationally; keep summaries concise (top 2–4 options with price, route, and a single distinguishing detail each).
read_loyalty_programs
ChatGPTRead your stored frequent flyer and hotel loyalty program numbers.
read_memory
ChatGPTRead what Otto knows about the traveler: stored travel preferences and remembered facts, each with a #id that remember(replaces=…) and forget take. Read it at conversation start; it informs every decision.
read_notification_settings
ChatGPTHow you get Otto's notifications: channels on per category (email, push, …) and which recommended channel is off. Read-only — changes happen on the Otto settings page.
read_preferences
ChatGPTRead your stored travel preferences as a human-readable summary.
read_skill
ChatGPTRead a skill guide before using tools. ALL other tools require skill keys from this tool. Call this ONCE per flow. The response bundles every key needed for the tools the skill unlocks (including universal prerequisites). MANDATORY: every subsequent tool call must include `skill_keys` set to the exact `keys` list from this response. Pass the whole list — do NOT pick a single string, do NOT omit the param, do NOT regenerate the keys. The same keys list works for every tool the skill unlocks during this conversation. Do NOT call read_skill again to fetch a missing prerequisite key; the bundle already includes it. After reading, immediately proceed with the user's request using the unlocked tools — do NOT re-confirm with the user before running a read-only search. Available skills: booking_management, car_booking, car_search, flight_booking, flight_exchange, flight_search, getting_started, hotel_booking, hotel_exchange, hotel_search, preferences, seat_selection
render_cars
ChatGPTDraw rental-car options as an interactive card. Pass the search_cars rows to show, in the order to show them (pass each row back as you received it). Rendering only: the card lists exactly those cars in that order — no ranking, no server-written recommendation; reasons are yours to add. At most 6 cars. A Select click reaches you as a Card selection note naming the car_id; see the car_rendering skill.
render_flights
ChatGPTDraw flight options from a search handle as an interactive card. Pass either the offer_ids to show, in the order to show them, or a SQL SELECT over the handle (same views as query_flights). Rendering only: the card lists exactly the rows you name, in your order, with each departure's other fares under it — no ranking, no server-written recommendation; reasons (required, 1-3 per departure) say why you picked each. At most 6 departures. A Select click reaches you as a Card selection note; see the flight_rendering skill.
render_hotel_rooms
ChatGPTDraw one hotel's rooms as an interactive card. Pass the get_hotel_rooms rooms to show, in the order to show them (pass each room back as you received it). One property per card. Rendering only: no ranking, no server-written recommendation; reasons are yours to add. At most 6 rooms. A Select click reaches you as a Card selection note naming the room_id; see the hotel_room_rendering skill.
render_hotels
ChatGPTDraw hotel options as an interactive card. Pass the search_hotels rows to show, in the order to show them (pass each row back as you received it). Rendering only: the card lists exactly those properties in that order — no ranking, no server-written recommendation; reasons are yours to add. At most 6 properties. A Select click reaches you as a Card selection note naming the hotel_id; see the hotel_rendering skill.
request_account_deletion
ChatGPTFile a request to delete your Otto account, after two exact typed confirmations. This never deletes anything: it creates a request a company admin must approve. Relay the returned message verbatim and pass back exactly what the user types next.
search_cars
ChatGPTSearch rental cars at a location. Returns pay-at-pickup options, cheapest first. Driver age comes from the user's saved profile (date of birth) — there is no age parameter. If the profile has no DOB the search returns PROFILE_INCOMPLETE; ask the user to complete their profile rather than guessing an age. All rates are paid at the counter — booking only guarantees the reservation.
search_flights
ChatGPTSearch live, bookable flight inventory between two airports for given dates and cabin. Returns a queryable handle plus a brief — use query_flights next to filter results.
search_hotels
ChatGPTSearch live, bookable hotel inventory by location and dates. Returns up to 50 hotels sorted by price. Each hotel's nightly_rate / total_rate is the lowest available rate Spotnana found at the property — a 'from' preview for sorting and shortlisting, NOT the rate the user books. The actual bookable rate ladder is only available via get_hotel_rooms. Render search-hotels prices as 'from $X/night' in prose so the user understands the anchor. ALWAYS call this tool to present hotel options the moment the user asks for hotels, and again whenever they refine criteria (e.g. switches brand, narrows location, asks within budget). Present results conversationally; keep summaries concise (top 4 options with name, 'from' price, and a single distinguishing detail each).
task_status
ChatGPTPoll an async task with long-polling. Blocks up to timeout_ms waiting for progress. Returns current step, progress, and final result when complete.
write_loyalty_program
ChatGPTAdd or remove a frequent flyer or hotel loyalty program number.
write_preference
ChatGPTAdd, remove, or update travel preferences using plain language.
book_flight
Claudebook_hotel
Claudecancel_booking
Claudeget_bookings
Claudeget_hotel_rooms
Claudequery_flights
Clauderead_loyalty_programs
Clauderead_preferences
Clauderead_skill
Claudesearch_flights
Claudesearch_hotels
Claudetask_status
Claudewrite_loyalty_program
Claudewrite_preference
Claude