---
title: "Refresh Flight Booking Session"
method: POST
path: "/flight-booking/sessions/{session_id}/refresh"
tags: ["flight-booking"]
---

# Refresh Flight Booking Session

`POST /flight-booking/sessions/{session_id}/refresh`

Refresh a flight booking session with current pricing.

## Path parameters

- `session_id` string, uuid, required

## Response `200`

Successful Response

- FlightBookingSessionRefreshResponse — Response from refreshing a flight booking session.
  - `session` FlightBookingSessionResponse, required — 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
  - `price_changed` boolean, required
  - `previous_price_cents` integer, nullable
  - `new_price_cents` integer, nullable
  - `currency` string, nullable

## 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)
