---
title: "Get In Progress Flight Booking Session"
method: GET
path: "/flight-booking/sessions/in-progress"
tags: ["flight-booking"]
---

# Get In Progress Flight Booking Session

`GET /flight-booking/sessions/in-progress`

Fetch latest active or failed non-expired flight-booking session.

## Query parameters

- `conv_trip_id` string, uuid, nullable — Scope the lookup to one conversational trip. Without it the lookup returns the user's most recent resumable session across every trip, which the checkout resume gate then has to reject on weaker evidence.

## Response `200`

Successful Response

- FlightBookingSessionResponse — Persisted flight-booking checkout session.
  - `id` string, uuid, required
  - `user_id` string, uuid, required
  - `observation_id` string, uuid, required
  - `checkout_step` 'info' | 'ancillaries' | 'payment' | 'processing' | 'confirmed' | 'failed', required
  - `status` 'active' | 'awaiting_payment' | 'processing' | 'completed' | 'failed' | 'abandoned' | 'manual_recovery_required', required
  - `payload` object, required
  - `pricing_breakdown` FlightPricingBreakdown — Typed price summary for an Axel-booked flight.
    - `supplier_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
    - `price_after_axel_deal` 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
    - `final_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
    - `discounts` FlightDiscountLineItem[] — Typed discount line items in the order they were applied.
      - `type` 'axel_deal' | 'member_deal' | 'promo_code' | 'axel_negotiation', required — Discount source. Frontend can use this as a stable discriminator.
      - `label` string, required — Human-readable display label for the discount.
      - `amount` 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
      - `code` string, nullable — Promo code when this line is a promo_code discount.
      - `percentage` union — Configured promo percentage when this line is a percentage promo.
        - integer
        - number
      - `basis` 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
      - `offer_id` string, nullable — Limited-time offer id when this line comes from a time-limited Axel Deal.
      - `status` string, nullable — Offer status when this line comes from a time-limited offer.
      - `expires_at` string, date-time, nullable — Expiration timestamp for time-limited discount lines.
  - `active_negotiation_offer` FlightNegotiationOfferResponse — A time-limited locked-price Axel Deal for one flight itinerary.
    - `id` string, uuid, required
    - `user_id` string, uuid, required
    - `conv_trip_id` string, uuid, required
    - `observation_id` string, uuid, required
    - `status` 'active' | 'expired' | 'redeemed' | 'cancelled' | 'delivery_failed', required
    - `percentage` integer
    - `itinerary_fingerprint` string, required
    - `cabin` string, nullable
    - `departure_date` string, nullable
    - `passenger_count` integer, nullable
    - `total_savings_percentage` string, nullable
    - `google_flights_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_deal_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
    - `locked_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_deal_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_discount` 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
    - `free_percentage` integer, nullable
    - `member_percentage` integer, nullable
    - `member_deal_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_locked_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_limited_time_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
    - `offered_at` string, date-time, required
    - `expires_at` string, date-time, required
    - `cooldown_until` string, date-time, required
    - `selected_activity_at` string, date-time, nullable
    - `source_wake_id` string, nullable
    - `first_channel` 'sms' | 'email', nullable
    - `final_channel` 'sms' | 'email', nullable
    - `sms_attempted_at` string, date-time, nullable
    - `email_attempted_at` string, date-time, nullable
    - `delivered_at` string, date-time, nullable
    - `message_id` string, nullable
    - `idempotency_key` string, nullable
    - `failure_reason` string, nullable
    - `booking_id` string, nullable
    - `redeemed_at` string, date-time, nullable
    - `metadata_json` object, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, 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
  - `fare_family_name` string, nullable, required
  - `fare_family_source` string, nullable
  - `fare_family_id` string, nullable
  - `booking_id` string, nullable, required
  - `operator_task_id` string, uuid, nullable, required
  - `expires_at` string, date-time, required
  - `payment_method_id` string, nullable, required
  - `stripe_customer_id` string, nullable, required
  - `payment_intent_id` string, nullable, required
  - `charged_amount_cents` integer, nullable, required
  - `currency` string, nullable, required
  - `payment_status` string, nullable, required
  - `failure_reason` string, nullable, required
  - `idempotency_key` string, nullable, required
  - `discount_tier` 'flight_only' | 'bundle' — Pricing tier this session is priced at (FAC-942). A 'yes' staying declaration cuts a 'bundle'-tier successor session; the tier never downgrades. Nothing hotel-shaped is persisted on the session — the declaration's 'why' lives in trip_facts.hotel_intent.
  - `traveler_names` string[] — Resolved passenger names from traveler_profile_ids in payload
  - `required_traveler_fields` TravelerField[] — Traveler profile fields the client must collect before payment.
  - `adult_gate_exempt` boolean — True when the session owner is on the legal-approved allowlist exempt from the 18+ accompanying-adult gate. Clients must skip their traveler-form adult-age check when set; the server-side payment gate applies the same allowlist.
  - `optional_traveler_fields` TravelerField[] — Traveler-identity fields the client may offer for this flight (e.g. KTN, loyalty). Never blocks payment, distinct from required_traveler_fields.
  - `purchase_intent_id` string, uuid, nullable — Durable single-use purchase commitment this session belongs to (ENG-24229). None for sessions created before the intent rollout.
  - `purchase_intent_status` 'open' | 'committing' | 'booked', nullable — Current lifecycle of the session's purchase intent. 'booked' means the commitment was already consumed — clients must render the existing booking instead of a payment surface.
  - `purchase_intent_booking_id` string, nullable — Booking that consumed the purchase intent. May belong to a sibling session of the same commitment.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[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-service-production.skmtc.workers.dev/v1/apis/helloaxel/client-api-gateway/revisions/d3c4c29fede7/schema)
