← Back to all apps

lastminute.com

Productivityby lastminute.com
Launched Jul 3, 2026 on ChatGPT

Access real-time flight and hotel data directly through Claude to search, compare, and book flights, dynamic packages (flight + hotel), and hotels across a global network of airlines and hotel suppliers. Benefit from instant price comparisons, flexible filters, and intelligent recommendations that seamlessly integrate Claude's capabilities into your travel planning. Enhance your workflow with comprehensive flight, dynamic package, and hotel search powered by lastminute.com.

9ChatGPT Tools
1Claude Tools
lastminute.comDeveloper
ProductivityCategory

Use Cases

productivity

Available Tools

Change Flight Selection

change_flight
Full Description

Select or change the flight for an existing hotel selection and generate the booking link. For FLIGHT+HOTEL packages, this is the ONLY tool to use for flight confirmation — both for the pre-selected flight AND for alternative flights. Must be used AFTER get_alternative_flights. Pass the transport_id of the desired flight (pre-selected or alternative) as new_transport_id. Automatically generates and returns the booking link — do NOT call generate_booking_link afterwards. CRITICAL: Before calling, verify the pricing_id matches the CURRENT hotel shown in widgetState.modelContent or in the most recent USER WIDGET ACTION / USER SCREEN UPDATE message. Widget actions DO produce conversation-history entries as JSON acks — the pricing_id in the most recent such ack with status='ok' is AUTHORITATIVE. Older pricing_ids from earlier responses are STALE.

WIDGET-ALREADY-CALLED RULE — when the user clicks a flight in the widget (DP flow), the widget calls this tool ITSELF and emits a USER WIDGET ACTION with action='open_booking_summary' and flow='dp', or a USER SCREEN UPDATE with action='enter_booking_summary_dp'. When such a message is the most recent turn with status='ok', this tool has ALREADY been executed, the booking link is ALREADY generated and visible to the user. DO NOT call change_flight yourself — that would duplicate the action. Absorb the ids (pricing_id, rate_id, transport_id, flight_price) as the current context and wait for the user.

Parameters (2 required)
Required
new_transport_idstring

transport_id of the new flight from get_alternative_flights

pricing_idstring

pricing_id from select_hotel_options response

Generate Booking Link

generate_booking_link
Full Description

Generate a direct booking URL for the selected hotel room option. ⚠️ HOTEL-ONLY bookings: Use this tool to generate the booking link. ⚠️ FLIGHT+HOTEL packages: Do NOT use this tool — use change_flight instead, which handles both flight selection AND booking link generation in one step. change_flight must always be called for DP packages, even for the pre-selected flight. CRITICAL: Before calling, verify the pricing_id matches the CURRENT hotel shown in widgetState.modelContent or in the most recent USER WIDGET ACTION / USER SCREEN UPDATE message. Widget actions DO produce conversation-history entries as JSON acks — the pricing_id in the most recent such ack with status='ok' is AUTHORITATIVE. Older pricing_ids from earlier responses are STALE.

WIDGET-ALREADY-CALLED RULE — when the user clicks a room in the widget (HO flow), the widget calls this tool ITSELF and emits a USER WIDGET ACTION with action='open_booking_summary' and flow='ho', or a USER SCREEN UPDATE with action='enter_booking_summary_ho'. When such a message is the most recent turn with status='ok', this tool has ALREADY been executed, the booking link is ALREADY generated and visible to the user. DO NOT call generate_booking_link yourself — that would duplicate the action. Absorb the ids (pricing_id, rate_id, hotel_internal_id) as the current context and wait for the user.

RATE_ID RULE (critical to avoid 'Rate not found' errors): The rate_id MUST come from the room_options list of the SAME select_hotel_options response that produced the pricing_id you are using. If the user explored multiple hotels in this conversation, each hotel has its own set of rate_ids — they are NOT interchangeable. When the user asks for 'the cheapest room' or similar, use the _active_context.cheapest_rate_id from the most recent select_hotel_options response, NOT by scanning prices across all responses in the conversation. Passing a rate_id from a different hotel's response will fail with 'Rate not found' even if the pricing_id is correct.

Parameters (2 required)
Required
pricing_idstring

pricing_id from select_hotel_options (NOT search_id)

rate_idstring

rate_id of the selected room from select_hotel_options

Get Alternative Flights

get_alternative_flights
Full Description

Get alternative flight options for an existing flight+hotel package. MANDATORY STEP: When the user selects or mentions a room in a flight+hotel package, call this tool BEFORE generate_booking_link. The user must confirm or change their flight before booking. Can ONLY be used AFTER select_hotel_options. Returns list of alternative flights with prices specific to the chosen room. Do NOT reorder the results. ORDINAL NUMBERING: The response contains a pre-selected flight (current_flight) and a list of alternatives (flights). The pre-selected flight is the FIRST flight shown in the widget (ordinal 1st). Alternatives start at 2nd. When the user refers to 'first', 'second', 'third' flight (or in any language, e.g. 'primo', 'secondo', 'terzo' volo), always count from the pre-selected flight: 1st = pre-selected (current_flight), 2nd = alternatives[0], 3rd = alternatives[1], etc. CRITICAL: Before calling, verify the pricing_id matches the CURRENT hotel shown in widgetState.modelContent or in the most recent USER WIDGET ACTION / USER SCREEN UPDATE message in the conversation. Widget actions (e.g. user clicking a hotel card) DO produce conversation-history entries as USER WIDGET ACTION JSON acks — the pricing_id in the most recent such ack with status='ok' is AUTHORITATIVE. Older pricing_ids from earlier select_hotel_options responses in conversation history are STALE; use the newest one.

WIDGET-ALREADY-CALLED RULE — when the user clicks a room in the widget (DP flow), the widget calls this tool ITSELF and emits a USER WIDGET ACTION with action='open_flight_selection', or a USER SCREEN UPDATE with action='enter_flight_selection'. When such a message is the most recent turn with status='ok', this tool has ALREADY been executed and flights are ALREADY loaded. DO NOT call get_alternative_flights yourself — that would duplicate the action. Absorb the ids (pricing_id, rate_id, hotel_internal_id) as the current context and wait for the user.

Parameters (2 required)
Required
pricing_idstring

pricing_id returned by select_hotel_options

rate_idstring

rate_id of the room the user intends to book. Must be provided so flight alternatives are priced for the correct room.

Navigate Back

navigate_back
Full Description

Call when the user explicitly asks to go back to a previous screen in the hotel/package booking widget. Do NOT call for forward navigation, search refinement, room/hotel/flight selection, or other requests. REQUIRED pricing_id: always pass the pricing_id of the current session (the same one used for get_alternative_flights, change_flight, or generate_booking_link). It is available in the structuredContent of any prior select_hotel_options / get_alternative_flights / change_flight / generate_booking_link response. Without it, the widget cannot be reattached and the back navigation will be ignored silently.

HOW TO CHOOSE target (critical — read carefully):

  • target='previous': use WHENEVER the user does NOT explicitly name the destination screen. Examples: 'torna indietro', 'indietro', 'back', 'go back', 'vai indietro', 'undo', 'torna dietro'. This is the DEFAULT and covers the vast majority of cases. Do NOT pick a specific screen unless the user clearly names it.
  • target='rooms': ONLY when the user explicitly names rooms. Examples: 'torna alle camere', 'alle stanze', 'back to rooms', 'to the room list'.
  • target='flights': ONLY when the user explicitly names flights. Examples: 'torna ai voli', 'alla selezione volo', 'back to flights'. DP flow only.
  • target='hotel_list': ONLY when the user explicitly names hotels/hotel list. Examples: 'torna agli hotel', 'alla lista hotel', 'back to hotel list', 'to the hotel search results'.

Disambiguation rules:

  • 'torna indietro' from any screen → target='previous' (never 'hotel_list').
  • 'torna indietro di due' → resolve directly to the specific target screen name (e.g. from summary 'di due' = 'rooms').
  • If the user is already on the hotel list and asks to go back, DO NOT call this tool — reply in text that they are already on the first screen.
Parameters (1 required, 2 optional)
Required
pricing_idstring

Pricing session id of the current widget session. MUST be a non-empty string copied verbatim from the structuredContent of the most recent select_hotel_options / get_alternative_flights / change_flight / generate_booking_link / navigate_back response. NEVER pass an empty string, null, or a fabricated value — the call will be rejected.

Optional
rate_idstring

Room rate id of the currently selected room, if any. Pass it whenever available (e.g. back from flight_selection or booking_summary) — it is in the structuredContent of the most recent get_alternative_flights / change_flight / generate_booking_link response. Optional but strongly recommended: without it, the widget may fail to reload flight options and fall back to a higher screen.

targetstring

Target screen or 'previous' for one-step back.

Options:previoushotel_listroomsflights
Default: previous

Resolve Destination ID

resolve_destination_id
Full Description

Resolve a city name to its internal destination ID. MUST be called before search_only_hotel. Supported languages: IT, EN, ES, FR, DE, PL, SE, DK, NO, FI (others fall back to EN). Returns id on exact match → follow next_step immediately (call search_only_hotel with destination=id AND destination_name=name). Returns suggestions list on ambiguity → do NOT call search_only_hotel yet. Instead, present the suggestions to the user in a conversational way and ask which destination they meant. Once the user picks one, call search_only_hotel with the chosen destination ID and destination_name. No widget is shown for this step.

Parameters (2 required)
Required
city_namestring

City name to resolve (e.g. 'London', 'Roma', 'Paris')

langstring

2-letter language code (e.g. 'en', 'it'). Case-insensitive.

Search Flight + Hotel Packages

search_flight_and_hotel_package
Full Description

Search for COMBINED flight AND hotel vacation packages. Use for: 'Find me flight and hotel packages from Rome to Madrid', 'vacation package with flights and hotel from FCO to Barcelona'.

IATA codes required for origin and destination (e.g. MIL, FCO, MAD, LON). NEVER pass raw city names. Use 3-letter city codes (MIL, NYC) or airport codes (MXP, JFK).

Returns Markdown table:

| Photo | Hotel | Stars | Rating | Total Price | Distance from Centre | Amenities.

Parameters (4 required, 9 optional)
Required
date_fromstring

Check-in date YYYY-MM-DD (today or later)

date_tostring

Check-out date YYYY-MM-DD (today or later)

destinationstring

Destination IATA code (3 letters). NEVER a city name.

originstring

Departure IATA code (3 letters). City code (MIL, NYC) or airport code (MXP, JFK). NEVER a city name.

Optional
accommodation_facilitiesstring

CSV of facility IDs 0-60: 0=WiFi,3=Parking,4=Pool,6=Spa,7=AdultsOnly,9=Seafront,13=Fitness,25=Golf,46=IndoorPool,56=Bar,58=Restaurant

accommodation_typestring

CSV of type IDs 1-14: 1=Hotels,2=Resorts,3=Apartments,4=Hostels,5=Motels,6=Country Houses,7=Guest Houses,8=B&B,9=Villas,10=Boats&Cruises,11=Campsites,12=Riads,13=Ryokans,14=Aparthotels

adultsstring

Adults per room. Multi-room: 'num_room1;num_room2' (e.g. '2;2')

Default: 1
ch_agesstring

Child ages per room. Multi-room: 'ages_room1;ages_room2' (e.g. '5,8;3'). MUST specify each child's age.

hotel_starsstring

Star rating filter, CSV of integers 1-5. E.g. '4' or '3,4,5'

langstring

Language code: en/it/es/fr/de/nl/pl/se/dk/no/fi/cs/el/hu/ro

Default: en
max_resultsinteger

Max results (default 5)

Default: 5
pricestring

Price filter as string: '300' = max 300, '200,400' = range. Digits and comma only, no currency symbol.

sortstring

Sort order. ALWAYS use 'recommended' unless the user EXPLICITLY says words like 'sort by price', 'cheapest first', 'by rating', etc. Do NOT infer from budget mentions or price range requests.

Options:recommendedpricestarsreview_scoredistance
Default: recommended

Search Flights

search_flights
Full Description

Search flights on lastminute.com.

Use this tool for ANY user request to find, search, compare, browse, or check flights. Do not answer a flight-search request with text only when this tool can be used.

RULES:

  • Pass departure and arrival translated in IATA Code.
  • Set language to the language of the user's CURRENT message. Detect it from the message text itself — do NOT inherit from previous turns, do NOT default to Italian or any other language.
  • If the request specifies dates, times, stops, airports, airlines, cabin class, ranking, or filters, pass them through using the matching tool arguments.
  • ranking_best and explicit filters are mutually exclusive — use one or the other.
  • After the tool returns results, keep the assistant reply brief. Do not list flights, prices, airlines, or booking links in text because the widget presents the detailed results.
  • If required inputs are missing, ask only for the missing flight-search fields.
Parameters (3 required, 21 optional)
Required
arrivalstring

Arrival airport or city, as written by the user but Translated in IATA code

departurestring

Departure airport or city written by the user but Translated in IATA code

start_datestring

Departure date YYYY-MM-DD (must be today or later)

Optional
adultsinteger

Number of adults (default 1)

Default: 1
airlines_excludestring

Filter: comma-separated airline IATA codes to exclude

airlines_includestring

Filter: comma-separated airline IATA codes to include (e.g. 'FR' for Ryanair)

arrival_airportsstring

Filter: comma-separated arrival IATA codes (e.g. 'LHR,LGW')

arrival_time_endstring

Filter: latest arrival HH:MM

arrival_time_startstring

Filter: earliest arrival HH:MM

children_agesstring

Comma-separated ages 2-11 (e.g. '5,8')

currencystring

ISO 4217 currency code (default EUR)

Default: EUR
departure_airportsstring

Filter: comma-separated departure IATA codes (e.g. 'MXP,LIN')

departure_time_endstring

Filter: latest departure HH:MM (e.g. '12:00' for morning)

departure_time_startstring

Filter: earliest departure HH:MM (e.g. '06:00' for morning)

end_datestring

Return date YYYY-MM-DD for roundtrip

flight_classstring

Cabin class

Options:ECONOMYPREMIUM_ECONOMYBUSINESSFIRST_CLASS
infants_agesstring

Comma-separated ages 0-1 (e.g. '0,1')

languagestring

Language of the user's current message. MUST match what the user is writing NOW: en/it/es/fr/de/nl/pl/se/dk/no/fi/pt/hu/cs/ro/el

max_duration_minutesstring

Filter: max total flight duration in minutes (e.g. '300' = 5 hours)

max_price_centsstring

Filter: maximum price in cents (e.g. '10000' = 100 EUR)

max_resultsinteger

Max results 1-20 (default 10)

Default: 10
max_stopsstring

Filter: max stops, '0' = direct only, '1' = max 1 stop

min_price_centsstring

Filter: minimum price in cents (e.g. '5000' = 50 EUR)

ranking_bestboolean

Smart ranking by price+duration+stops. Mutually exclusive with filters.

Default: False

Search Hotels

search_only_hotel
Full Description

Search for hotel-only stays (no flights).

ONLY VALID ARGUMENTS: destination, destination_name, date_from, date_to, adults, ch_ages, lang, currency, sort, max_results, accommodation_type, accommodation_facilities, price, hotel_stars NEVER SEND: checkin, checkout, check_in, check_out, arrival_date, departure_date, country, locale, guests, room_qty, rooms, children_number, children_age, languagecode, order_by, page_number, limit, sort_by

CORRECT: {"destination":"130522","destination_name":"Rome","date_from":"2026-04-20","date_to":"2026-04-25","adults":"2","lang":"it","sort":"recommended","max_results":8} CORRECT (EN with USD pricing): {"destination":"130522","destination_name":"Rome","date_from":"2026-04-20","date_to":"2026-04-25","adults":"2","lang":"en","currency":"USD","sort":"recommended","max_results":8} WRONG: {"destination":"130522","checkin":"2026-04-20","checkout":"2026-04-25","adults":2,"limit":8,"sort":"popularity"} FIXED: {"destination":"130522","destination_name":"Rome","date_from":"2026-04-20","date_to":"2026-04-25","adults":"2","lang":"it","sort":"recommended","max_results":8}

HARD RULES:

  • adults MUST be a string: "2" not 2. Do NOT send adults as integer.
  • sort default = "recommended". Never use "popularity", "rating", "best", "popular".
  • currency is OPTIONAL and effective ONLY in two cases: lang=en (values: GBP, USD, EUR) or lang=de/fr (value: CHF, for users in Switzerland). For any other lang+currency combination it is silently ignored.
  • Send only fields strictly needed. Do not add optional fields unless required.
  • destination_name is REQUIRED: always forward the 'name' field from resolve_destination_id.

PRE-STEP (mandatory): call resolve_destination_id first to get the numeric ID.

  • success=true → use 'id' as destination AND 'name' as destination_name, call this tool immediately.
  • success=false → present suggestions conversationally to the user, ask which they meant, then call this tool with the chosen ID and name. Do NOT open any widget until this tool is called.

destination: numeric ID from resolve_destination_id (e.g. '130522') or IATA code as fallback. NEVER a raw city name.

Parameters (4 required, 10 optional)
Required
date_fromstring

Check-in YYYY-MM-DD. Use 'date_from', NOT 'checkin' or 'arrival_date'.

date_tostring

Check-out YYYY-MM-DD. Use 'date_to', NOT 'checkout' or 'departure_date'.

destinationstring

Numeric ID from resolve_destination_id (e.g. '130522'), or IATA code (e.g. 'MAD'). NEVER a city name.

destination_namestring

Human-readable city name returned by resolve_destination_id (e.g. 'London'). REQUIRED: always forward the 'name' field from resolve_destination_id.

Optional
accommodation_facilitiesstring

CSV of facility IDs 0-60

accommodation_typestring

CSV of type IDs 1-14

adultsstring

Adults as STRING (e.g. "2", not 2). NOT 'room_qty', NOT 'guests'. Multi-room: '2;2'.

Default: 1
ch_agesstring

Child ages per room (e.g. '5,8'). Multi-room: '5,8;3'.

currencystring

Optional. 3-letter ISO code. EFFECTIVE ONLY in two cases: (a) when lang=en — values: GBP (UK pricing), USD (US pricing), EUR (Eurozone pricing); (b) when lang=de or lang=fr AND the user is asking about Switzerland — value: CHF (Swiss pricing). For any other language this field is silently ignored. Pass it ONLY when the user explicitly asks to see prices in a specific currency.

hotel_starsstring

Star rating CSV (e.g. '4' or '3,4,5')

langstring

2-letter language code: en/it/es/fr/de/nl/pl/se/dk/no/fi/cs/el/hu/ro. NOT 'locale'.

Default: en
max_resultsinteger

Integer 1-20 (default 5).

Default: 5
pricestring

Price filter: '300' = max, '200,400' = range

sortstring

Default: 'recommended'. Never use 'popularity', 'rating', 'best'. Only change if user explicitly requests a sort order.

Options:recommendedpricestarsreview_scoredistance
Default: recommended

Get Hotel Room Options

select_hotel_options
Full Description

Get detailed room options for a specific hotel. Call when the user asks to select or view a specific hotel from the current search results. CRITICAL: If a hotel widget is already open (widgetState contains search_id), use that search_id directly — do NOT start a new search. Calling this tool with the SAME search_id as the active widget will UPDATE the widget in-place to show the room selection view (no new widget opened). Returns: hotel info, flights (if DP package), room options sorted by price. IMPORTANT: After this tool returns, the widget screen changes to ROOM SELECTION — the user is no longer on the hotel list. Read the current_screen and next_step fields in the response to know what to do. For hotel-only: call generate_booking_link with pricing_id and rate_id when the user picks a room. For flight+hotel: call get_alternative_flights. Do NOT call select_hotel_options again after it succeeds — the rooms are already loaded.

WIDGET-ALREADY-CALLED RULE — when the user clicks a hotel card directly in the widget (instead of asking you via chat), the widget calls this tool ITSELF and emits a USER WIDGET ACTION message with action='open_hotel_rooms' or a USER SCREEN UPDATE message with action='enter_room_selection'. When you see such a message in the most recent turn with status='ok', this tool has ALREADY been executed by the widget, the rooms are ALREADY loaded, and the user is ALREADY on the room_selection screen. DO NOT call select_hotel_options yourself in response — that would duplicate the action. Instead, ABSORB the ids from the JSON payload (hotel_internal_id, hotel_name, pricing_id, search_id) as the user's CURRENT context, and wait for the user's next real message. The ids in the ack OVERRIDE any older ids for the same role from earlier conversation turns.

Parameters (2 required)
Required
hotel_internal_idinteger

internal_id_hotel from search results

search_idinteger

search_id from the previous search result