---
title: "Get Opening Flight Fares"
method: GET
path: "/flight-booking/options/opening"
tags: ["flight-booking"]
---

# Get Opening Flight Fares

`GET /flight-booking/options/opening`

## Request

- Base URL: `https://api.helloaxel.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.helloaxel.com/flight-booking/options/opening`
- Auth: HTTP bearer

The fares to show at once for a flight, before the airline's own answer.

GET /flight-booking/options costs one supplier lookup (10 to 18 seconds
cold, Nov 2026). The fare step asks this beside it and shows the answer
while that lookup runs: the stored flight's price on the airline's lowest
fare by name (``options``, one fare), and the airline's other usual fares
by name with no price yet (``pending_fares``). No supplier work.

``options`` is empty when there is nothing to show at once, and the fare
step then waits for the live answer as it always has: the live list is
already cached, the trip is not one airline in economy with a ladder we
hold, the party changed since the search, or a fare hold or limited-time
offer prices this viewer's ladder (their held price must not be preceded
by another one).

The fare here is not a booking option until the live answer confirms it:
the client creates the session on the confirmed fare, never on this one.

## Query parameters

- `observation_id` string, uuid, required: Base flight observation from search results
- `passengers` integer: Number of passengers
- `adults` integer, nullable
- `children` integer, nullable
- `infants_in_seat` integer, nullable
- `infants_on_lap` integer, nullable
- `conv_trip_id` string, uuid, nullable
- `hotel_proposal_set_id` string, uuid, nullable
- `agent_quote` string, nullable: JSON with quote_id and optional search_choices, as on GET /flight-booking/options.
- `locale` string

## Response `200`

Successful Response

- FlightBookingOptionsResponse: Response for GET /flight-booking/options and /flight-booking/options/opening.
  - `viewer_is_member` boolean, nullable: Whether this fare ladder is priced for an existing Member who owes no joining fee.
  - `passenger_mix` PassengerCount: Passenger breakdown for offers/searches. Simple counts by type.
    - `adults` integer
    - `children` integer
    - `infants_in_seat` integer
    - `infants_on_lap` integer
  - `options` FlightBookingOption[], required
    - `baggage` string[]
    - `baggage_policy` FareBaggagePolicy: Structured fare baggage policy, with raw supplier text preserved.
      - `source` 'serpapi_google_flights' | 'unknown'
      - `quotes` FareBaggageQuote[]
        - `bag_type` 'personal_item' | 'carry_on' | 'checked' | 'checked_first' | 'checked_second' | 'unknown'
        - `quantity` integer, nullable: Bag count when the supplier text states one; 0 for explicit restrictions.
        - `is_included` boolean
        - `is_restriction` boolean
        - `fee_amount` string, nullable
        - `fee_currency` string, nullable
        - `fee_basis` 'round_trip' | 'one_way' | 'per_segment' | 'unknown'
        - `pax_basis` 'per_pax' | 'total' | 'unknown'
        - `fee_amount_per_direction` string, nullable: Per-passenger one-way fee amount when it can be normalized from the supplier quote. For round-trip totals, this is half of fee_amount.
        - `source_key` 'together' | 'departing' | 'returning' | 'unknown'
        - `raw_text` string, required
    - `features` string[]
    - `fare_policy` FarePolicy
      - `facts` FarePolicyFact[]
        - `category` 'personal_item' | 'carry_on' | 'checked_bags' | 'seat_selection' | 'changes' | 'refunds' | 'seat_upgrade' | 'same_day_changes' | 'priority_boarding' | 'wifi' | 'meals' | 'lounge' | 'entertainment' | 'rewards', required
        - `state` 'included' | 'fee' | 'not_included' | 'not_available' | 'conditional' | 'unknown'
        - `quantity` integer, nullable: Included bag count, only when established by evidence.
        - `evidence` string[]: Supplier statements or curated airline-policy references, including qualifications.
        - `details` string[]: Qualifications the customer must see alongside the summary.
        - `reason` 'not_provided' | 'conflicting_evidence' | 'conditional' | 'varies_by_leg', nullable
      - `unclassified` string[]
    - `fare_take` FareTake
      - `id` string, required
      - `text` string, required
      - `emphasis` string, nullable
    - `observation_id` string, required: Content DB observation ID for this fare option
    - `fare_name` string, required: Fare family display name (e.g. 'Main Cabin')
    - `flight_cabins` FlightCabinView[]: The cabin on each flight, in itinerary order; a word only where it is a fact.
      - `origin` string, nullable
      - `destination` string, nullable
      - `marketing_carrier` string, nullable
      - `operating_carrier` string, nullable
      - `flight_number` string, nullable
      - `cabin` string, nullable: Normalized cabin key when confirmed, else None.
      - `cabin_label` string, nullable: Customer-facing word, e.g. 'Business'.
      - `confirmed` boolean
      - `inferred` boolean: Deduced from the premium search for the same flights (that product costs more; on a leg it labels First a cheaper Business fare books economy). Shown as a fact, never used to open a seat map, outranked by the ticket.
      - `source` string, nullable
    - `cabin_check` string, nullable: confirmed_same, confirmed_mixed or not_confirmed: whether every flight's cabin is a fact and whether they agree.
    - `public_price` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `customer_price` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `customer_price_per_person` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `price` Money, required: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `price_per_person` Money, required: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `flight_only_price` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `flight_only_price_per_person` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `member_price` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `member_price_per_person` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `savings_share_prices` FlightSavingsSharePrices
      - `public_price` Money, required: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
        - `amount` integer, required
        - `currency` string, required
      - `axel_rate_price` Money, required: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
        - `amount` integer, required
        - `currency` string, required
      - `customer_price` Money, required: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
        - `amount` integer, required
        - `currency` string, required
      - `member_price` Money, required: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
        - `amount` integer, required
        - `currency` string, required
    - `hotel_flight_discount` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `hotel_flight_member_discount` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `limited_time_offer_id` string, uuid, nullable: Active limited-time Axel offer applied to this fare option.
    - `limited_time_price` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `limited_time_price_per_person` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `limited_time_expires_at` string, date-time, nullable: When the locked limited-time offer expires.
    - `limited_time_locked` boolean: True on the option whose exact dollar price the active limited-time offer locks (the originally quoted fare). Other options carry the offer's percentage discount but no dollar guarantee.
    - `fare_hold_id` string, nullable: Active fare hold whose held price applies to this option.
    - `fare_hold_price` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `fare_hold_price_per_person` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `fare_hold_expires_at` string, date-time, nullable: When the free 24h fare hold lapses.
    - `bundle_price_per_person` Money: Immutable money value stored as integer minor units. Amount is always stored in the smallest currency unit (cents, yen, pesos, etc). This avoids floating-point precision issues and matches payment processor standards. Examples: $19.99 USD -> Money(amount=1999, currency="USD") ¥1000 JPY -> Money(amount=1000, currency="JPY") $1000.00 CLP -> Money(amount=1000, currency="CLP") Serializes to {"amount": 1999, "currency": "USD"}. IMPORTANT: Use Money.from_decimal() for user-facing amounts like "$19.99". The constructor expects integer minor units (cents).
      - `amount` integer, required
      - `currency` string, required
    - `book_with` string: Booking channel (e.g. 'Delta Air Lines')
    - `separate_tickets` boolean
    - `raw_option_title` string, nullable: Raw Google/SerpAPI fare option title when supplied.
    - `option_title_present` boolean: Whether the supplier supplied a fare option title.
    - `fallback_label_used` boolean: Whether fare_name is a cabin/default fallback instead of supplier text.
    - `fallback_label` string, nullable
    - `fare_family_id` string, nullable
    - `fare_family_source` string, nullable
    - `fare_family_blocker_reason` string, nullable
    - `verified_cabin` string, nullable
    - `source_evidence` object, nullable: Selected fare evidence carried from Content observation.
  - `pending_fares` FlightBookingPendingFare[]: With price_source 'opening' only: the airline's other usual fares by name, in order, their prices still to come from the live answer.
    - `baggage` string[]
    - `baggage_policy` FareBaggagePolicy: Structured fare baggage policy, with raw supplier text preserved.
      - `source` 'serpapi_google_flights' | 'unknown'
      - `quotes` FareBaggageQuote[]
        - `bag_type` 'personal_item' | 'carry_on' | 'checked' | 'checked_first' | 'checked_second' | 'unknown'
        - `quantity` integer, nullable: Bag count when the supplier text states one; 0 for explicit restrictions.
        - `is_included` boolean
        - `is_restriction` boolean
        - `fee_amount` string, nullable
        - `fee_currency` string, nullable
        - `fee_basis` 'round_trip' | 'one_way' | 'per_segment' | 'unknown'
        - `pax_basis` 'per_pax' | 'total' | 'unknown'
        - `fee_amount_per_direction` string, nullable: Per-passenger one-way fee amount when it can be normalized from the supplier quote. For round-trip totals, this is half of fee_amount.
        - `source_key` 'together' | 'departing' | 'returning' | 'unknown'
        - `raw_text` string, required
    - `features` string[]
    - `fare_policy` FarePolicy
      - `facts` FarePolicyFact[]
        - `category` 'personal_item' | 'carry_on' | 'checked_bags' | 'seat_selection' | 'changes' | 'refunds' | 'seat_upgrade' | 'same_day_changes' | 'priority_boarding' | 'wifi' | 'meals' | 'lounge' | 'entertainment' | 'rewards', required
        - `state` 'included' | 'fee' | 'not_included' | 'not_available' | 'conditional' | 'unknown'
        - `quantity` integer, nullable: Included bag count, only when established by evidence.
        - `evidence` string[]: Supplier statements or curated airline-policy references, including qualifications.
        - `details` string[]: Qualifications the customer must see alongside the summary.
        - `reason` 'not_provided' | 'conflicting_evidence' | 'conditional' | 'varies_by_leg', nullable
      - `unclassified` string[]
    - `fare_name` string, required: Fare family display name (e.g. 'Main Cabin')
    - `fare_family_id` string, nullable
  - `google_flights_url` string, nullable: Google Flights page for the selected itinerary's booking options, captured verbatim from the supplier response (FAC-912). Optional: absent for cached/legacy evaluations — render-if-present.
  - `price_source` 'live' | 'stored_fallback' | 'opening': Whether these fare prices are a live supplier reprice ('live'), the backend-owned stored-flight fallback ('stored_fallback'), served when live fare families do not load (FAC-934), or the stored flight's price on the airline's lowest fare by name ('opening'), answered at once while the live reprice runs. An 'opening' fare is confirmed by the live answer before a session is created on it.
  - `fare_hold_offer` FareHoldOffer: Server-driven decision on what the hold slot shows. ``available`` renders the tappable line; ``membership_required`` renders the locked member-benefit row; every other reason renders nothing (the client never re-derives these from flags or membership state).
    - `available` boolean, required
    - `reason` 'membership_required' | 'membership_unavailable' | 'paused' | 'already_held' | 'cap_reached' | 'session_not_holdable' | 'departs_too_soon' | 'fee_required', nullable
    - `min_departure_lead_hours` integer, nullable
    - `hold_hours` integer, nullable
    - `fee_cents` integer, nullable
    - `fee_currency` string, nullable
  - `fare_hold` FareHoldSummary: One fare_holds row as clients see it. Money is integer cents.
    - `id` string, uuid, required
    - `status` 'active' | 'redeemed' | 'released' | 'expired', required
    - `armed_at` string, date-time, required
    - `expires_at` string, date-time, required
    - `basis_tier` 'free' | 'member' | 'acquisition', required
    - `currency` string, required
    - `held_flight_cents` integer, required
    - `held_items_total_cents` integer
    - `held_items` FareHoldHeldLine[], nullable
      - `kind` 'bag' | 'seat', required
      - `anchor` FareHoldHeldLineAnchor, required: Which flight (seat) or journey (bag) a held line rides. ``schemas.domain.ancillary_identity.SegmentAnchor.as_dict()``.
        - `carrier` string, nullable
        - `flight_number` string, nullable
        - `origin` string, nullable
        - `destination` string, nullable
        - `departure_date` string, nullable
      - `designator` string, nullable
      - `bag` FareHoldHeldBag
        - `checked` boolean, nullable
        - `cabin` boolean, nullable
        - `weight_norm` string, nullable
        - `display_name` string, nullable
      - `quantity` integer, required
      - `traveler_profile_id` string, nullable
      - `held_amount_cents` integer, required
      - `currency` string, required
    - `held_fares` FareHoldHeldFare[], nullable
      - `fare_family_id` string, nullable
      - `fare_label` string, nullable
      - `cabin` string, nullable
      - `held_flight_cents` integer, required
      - `currency` string, required
      - `source` 'session' | 'ladder', required
      - `selected` boolean
    - `itinerary_fingerprint` string, required
    - `fare_match` FareHoldFareMatch: Arm-time fare identity (``schemas.domain.fare_hold_identity.build_fare_match``).
      - `itinerary_fingerprint` string, nullable
      - `fare_family_id` string, nullable
      - `fare_label` string, nullable
      - `cabin` string, nullable
      - `observation_id` string, nullable
    - `pax_count` integer, required
    - `passenger_mix` PassengerCount: Passenger breakdown for offers/searches. Simple counts by type.
      - `adults` integer
      - `children` integer
      - `infants_in_seat` integer
      - `infants_on_lap` integer
    - `flight_summary` FareHoldFlightSummary: Display-only card facts snapshotted at arm time. Built by ``services.fare_hold_service.build_flight_summary``: nulls where the session payload was thin, never a guess. Forwards everything the payload has so the card can grow without a backend change.
      - `origin` string, nullable
      - `destination` string, nullable
      - `departure_date` string, nullable
      - `return_date` string, nullable
      - `carrier` string, nullable
      - `flight_numbers` string[]
      - `fare_label` string, nullable
      - `origin_city` string, nullable
      - `destination_city` string, nullable
      - `trip_type` 'one_way' | 'round_trip' | 'multi_city', nullable
      - `is_international` boolean, nullable
      - `carriers` string[]
      - `fare_family_id` string, nullable
      - `cabin` string, nullable
      - `requested_cabin` string, nullable
      - `fare_features` string[]
      - `baggage_notes` string[]
      - `book_with` string, nullable
      - `separate_tickets` boolean, nullable
      - `source` string, nullable
      - `observed_at` string, date-time, nullable
      - `seats_available` integer, nullable
      - `total_stops` integer, nullable
      - `total_duration_minutes` integer, nullable
      - `legs` FareHoldFlightLeg[]
        - `direction` 'outbound' | 'return' | 'leg', required
        - `origin` string, nullable
        - `destination` string, nullable
        - `origin_city` string, nullable
        - `destination_city` string, nullable
        - `departure_date` string, nullable
        - `departure_time` string, nullable
        - `arrival_date` string, nullable
        - `arrival_time` string, nullable
        - `stops` integer
        - `duration_minutes` integer, nullable
        - `carrier` string, nullable
        - `carriers` string[]
        - `cabin` string, nullable
        - `fare_family` string, nullable
        - `fare_family_id` string, nullable
        - `flight_numbers` string[]
        - `overnight` boolean, nullable
        - `layovers` FareHoldFlightLayover[]
          - `airport` string, nullable
          - `city` string, nullable
          - `duration_minutes` integer, nullable
        - `segments` FareHoldFlightSegment[]
          - `origin` string, nullable
          - `destination` string, nullable
          - `origin_city` string, nullable
          - `destination_city` string, nullable
          - `origin_terminal` string, nullable
          - `destination_terminal` string, nullable
          - `departure_date` string, nullable
          - `departure_time` string, nullable
          - `arrival_date` string, nullable
          - `arrival_time` string, nullable
          - `duration_minutes` integer, nullable
          - `carrier` string, nullable
          - `marketing_carrier` string, nullable
          - `operating_carrier` string, nullable
          - `flight_number` string, nullable
          - `raw_flight_number` string, nullable
          - `marketing_flight_number` string, nullable
          - `cabin` string, nullable
          - `raw_supplier_cabin` string, nullable
          - `cabin_confidence` string, nullable
          - `booking_class` string, nullable
          - `fare_family` string, nullable
          - `fare_family_id` string, nullable
          - `aircraft` string, nullable
          - `overnight` boolean, nullable
          - `often_delayed` boolean, nullable
    - `conv_trip_id` string, uuid, nullable
    - `source_session_id` string, uuid, required
    - `observation_id` string, uuid, nullable
    - `card_observation_id` string, uuid, nullable
    - `last_live_cents` integer, nullable
    - `last_quoted_at` string, date-time, nullable
    - `last_quote_reason` 'ok' | 'fare_gone' | 'unknown', nullable
    - `dismissed_at` string, date-time, nullable
    - `redeemed_booking_id` string, uuid, nullable
    - `ended_at` string, date-time, nullable
    - `fee_cents` integer, nullable
    - `fee_currency` string, nullable
    - `fee_paid_at` string, date-time, nullable

## Other responses

- `422`: Validation Error

## Changes

> 126 revisions in range; 1 not diffed.

- **2026-11-13** `c9aa63a9f88d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/helloaxel/apis/client-api-gateway/changes/flight-booking/options/opening/get.md)

---

[API](https://skmtc.dev/helloaxel/apis/client-api-gateway.md) - [All operations](https://skmtc.dev/helloaxel/apis/client-api-gateway/llms.txt) - [OpenAPI document](https://skmtc.dev/helloaxel/apis/client-api-gateway/revisions/c9aa63a9f88d?raw)
