adultsinteger | null
For hotels: number of adults (checkout_ref.adults).
arrival_avia_idstring | integer | null
Accepted from checkout_ref (avia orders-API city id, used by register_checkout_passengers); ignored here — safe to forward.
arrival_city_idinteger | null
For rail: destination city id (arrival_st).
arrival_etrain_idinteger | null
For etrain: destination station id for tutu.ru commuter schedule pages (st2).
arrival_geo_city_idinteger | null
For avia: arrival city id (legs[-1].segments[-1].to.city_id, also in checkout_ref.arrival_geo_city_id). Required for the mtp-deeplink purchase URL.
arrival_geo_point_idinteger | null
For rail: destination segment geo-point id (checkout_ref.arrival_geo_point_id). Required for the rail explicit/train deeplink.
arrival_idinteger | null
For bus: destination route id for search[to] on bus.tutu.ru/seats. Prefer this field from checkout_ref.
arrival_station_codestring | null
For rail: destination station code (arr_st). For etrain this is retained as a compatibility/debug field.
arrival_stop_idinteger | null
For bus: display/debug destination stop geo-point id. Older checkout_ref objects used this as search[to]; new objects should also pass arrival_id.
arrival_stop_namestring | null
For bus: display name for the destination stop. Accepted for pass-through compatibility; URL building uses arrival_id when present.
card_idstring | null
For rail straight-to-cart: checkout_ref.card_id metadata (optional).
car_numberstring | integer | null
For rail straight-to-cart: the chosen car (cars[].car_number from get_rail_seatmap).
check_instring | null
For hotels: check-in date YYYY-MM-DD (checkout_ref.check_in).
check_outstring | null
For hotels: check-out date YYYY-MM-DD (checkout_ref.check_out).
checkout_partsobject[] | null
For avia SEPARATE-TICKET offers (is_multi_pnr): forward checkout_ref.checkout_parts verbatim. It carries one entry per TICKET (departure_geo_city_id, arrival_geo_city_id, departure_at, plus from/to/flights labels) and the tool returns one purchase link per ticket (kind="deeplink_parts"). THIS tool cannot cover such an itinerary with one link — omit this and it can only hand back the search page. (That is this link hand-off's limit, not the trip's: where register_checkout_passengers is registered, the same checkout_ref fills ONE cart for the whole itinerary.) Present on multi-PNR offers only; other offers and other transports ignore it.
children_agesinteger[] | null
For hotels: child ages (checkout_ref.children_ages), if any.
city_fromstring | null
For bus: origin city name.
city_tostring | null
For bus: destination city name.
departure_atstring | null
ISO-8601 departure datetime from the offer's first segment (e.g. 2026-04-30T13:30:00+03:00). Used by rail (date), etrain (date), and bus (search[on] + trip[start_time]).
departure_avia_idstring | integer | null
Accepted from checkout_ref (avia orders-API city id, used by register_checkout_passengers); ignored here — safe to forward.
departure_city_idinteger | null
For rail: origin city id (departure_st).
departure_etrain_idinteger | null
For etrain: origin station id for tutu.ru commuter schedule pages (st1).
departure_geo_city_idinteger | null
For avia: departure city id (legs[0].segments[0].from.city_id, also in checkout_ref.departure_geo_city_id). Required for the mtp-deeplink purchase URL.
departure_geo_point_idinteger | null
For rail: origin segment geo-point id (checkout_ref.departure_geo_point_id = legs[0].segments[0].from.geo_point_id). Required for the rail explicit/train deeplink.
departure_idinteger | null
For bus: origin route id for search[from] on bus.tutu.ru/seats. Prefer this field from checkout_ref.
departure_station_codestring | null
For rail: origin station code (dep_st, e.g. 2000001). For etrain this is retained as a compatibility/debug field.
departure_stop_idinteger | null
For bus: display/debug origin stop geo-point id. Older checkout_ref objects used this as search[from]; new objects should also pass departure_id.
departure_stop_namestring | null
For bus: display name for the origin stop. Accepted for pass-through compatibility; URL building uses departure_id when present.
fallback_urlstring | null
For hotels: the pre-filled hotel page (checkout_ref.fallback_url / best_offer.checkout_url) — this is what hotels checkout returns.
fare_typestring | integer | null
For rail straight-to-cart: the chosen fare type — pass the seatmap fares[].fare_type string (REFUNDABLE→1, NON_REFUNDABLE→2) or Tutu's integer code directly. ALWAYS pass it when the user picked a fare: omitted, the cart opens on the default (refundable) fare, which is pricier than a chosen non-refundable one. Unknown labels are omitted from the URL (tell the user to confirm the fare in the cart).
gender_typestring | integer | null
For rail straight-to-cart, gender-policy coupes only: which gender the compartment is sold as — MALE/FEMALE (ask the user; MIXED/NO_GENDER and ints 0..3 also accepted). Omit for regular cars.
hotel_aliasstring | null
For hotels: the hotel's /h_<alias>/ slug (checkout_ref.hotel_alias, also best_offer/row alias from search_hotels or hotel.alias from get_offer_details). Required to build the explicit/hotel deeplink; without it the branch degrades to the pre-filled hotel page (fallback_url).
hotel_geo_idstring | integer | null
For hotels: the hotel's geo id (checkout_ref.hotel_geo_id). Display/debug; the page URL comes from fallback_url.
is_round_tripboolean | null
For avia: pass checkout_ref.is_round_trip. A direct round-trip offer builds a TWO-leg deeplink (both legs in one cart) — the tool joins the per-leg hashes and adds the return departure from return_departure_at. Connecting round-trips return the search page because explicit/avia currently supports one flight per direction. Forward return_departure_at from checkout_ref alongside this flag; without it the tool falls back to the search page. Other transports ignore this field.
offer_hashstring | object | null
For avia: the stringified JSON from offer.variants[i].offer_hash; the deeplink hashes are extracted from it to build the purchase URL. A direct round-trip offer_hash carries both legs — the tool joins them and needs return_departure_at too. For bus: the offer_hash string used as trip[hash] in the checkout URL. If your host auto-parses the JSON back into a dict, pass it as a dict — we'll normalise it.
offer_pack_hashstring | null
For hotels straight-to-cart: a ROOM rate's rooms[].rates[].offerpack_hash from get_offer_details — pass it once the user picked a specific room and the deeplink mints the cart for that pack (checkout=true), falling back to the hotel page if the pack expired (fallback_to_details=true). NB the listing best_offer.offerpack_hash does NOT mint a cart (the redirector falls back to the hotel page); only a room-rate hash from get_offer_details does. Omit to open the hotel page for the user to pick a room.
passengersinteger
For the bus fallback seats_url: number of passengers to prefill. Rail deeplinks/order URLs do not preselect passengers or seats.
passengers_adultinteger | null
Accepted from a bus checkout_ref (the adult share of the searched party, checked by register_checkout_passengers); ignored here — safe to forward.
passengers_childinteger | null
For avia: number of children (2–11 yrs) (checkout_ref.passengers_child). See passengers_full.
passengers_fullinteger | null
For avia: number of adults the search was for (checkout_ref.passengers_full). Pass it so the deeplink requests the SAME party you quoted — omit and Tutu defaults the cart to one adult, so a multi-passenger total won't match. Forward passengers_full/child/infant from checkout_ref together.
passengers_infantinteger | null
For avia: number of infants (<2 yrs, lap) (checkout_ref.passengers_infant). See passengers_full.
product_typeenum | null
Product type of the offer. railway and rail are accepted as synonyms. Optional when passing transport from checkout_ref.
result_idstring | null
For rail straight-to-cart: checkout_ref.result_id metadata (optional).
return_departure_atstring | null
For round-trip avia: ISO-8601 departure of the RETURN leg's first segment (checkout_ref.return_departure_at = legs[1].segments[0].departure_at, e.g. 2026-07-19T10:00:00+03:00). Required to build a two-leg direct round-trip deeplink; omit for one-way.
search_idstring | null
checkout_ref.search_id — the searchId of the search the offer came from. REQUIRED for the bus straight-to-cart mode; optional metadata for rail.
search_results_urlstring | null
For avia: the avia.tutu.ru search-results URL emitted in checkout_ref.search_results_url. Always returned alongside the deeplink so the user can fall back to browsing the listing page.
seat_countinteger | null
For bus straight-to-cart: number of passengers. Defaults to the number of seat_numbers passed.
seat_numbersstring | integer[] | null
Straight-to-cart seat choice, ONE seat per passenger. For rail: seats[].number values from get_rail_seatmap (all in the same car_number). For bus: ids from get_offer_details seat_selection.available_seat_ids. Pass ONLY seats the user explicitly confirmed — the link skips the seat wizard.
segment_hashstring | null
For rail straight-to-cart: the offer's segment hash (checkout_ref.segment_hash). Required together with offer_hash, car_number and seat_numbers to mint the cart.
service_classstring | integer | null
For avia: cabin class of the chosen variant. Three input shapes accepted: Tutu's upstream code (ECONOMIC/PREMIUM_ECONOMY/BUSINESS/FIRST — preferred, lives on each variant as variants[i].service_class and on the cheapest in checkout_ref.service_class), IATA letter (Y/S/C/F — what search_avia was called with), or the raw deeplink integer (1=Economy, 2=PremiumEconomy, 3=Business, 4=First). When overriding offer_hash for a non-cheapest fare family, also override this from the same variant — and keep passing is_round_trip from checkout_ref (a fare swap doesn't change the offer's round-trip-ness).
train_numberstring | null
For rail: the Express-3 train number such as 022А. Copy it from offer.checkout_ref.train_number — do NOT read segments[].voyage_no, which is the passenger display number and differs from the bookable number for through-trains (e.g. displays 060*Г, books 059Г).
transportenum | null
Backward-compatible alias for product_type; matches the transport key emitted in checkout_ref.