---
title: "Reconcile Flight Booking Session Travelers"
method: POST
path: "/flight-booking/sessions/{session_id}/reconcile-travelers"
tags: ["flight-booking"]
---

# Reconcile Flight Booking Session Travelers

`POST /flight-booking/sessions/{session_id}/reconcile-travelers`

## 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/sessions/{session_id}/reconcile-travelers`
- Auth: HTTP bearer

Reconcile selected travelers against session pricing.

## Path parameters

- `session_id` string, uuid, required

## Request body

- FlightBookingSessionReconcileTravelersRequest: Request body for POST /{session_id}/reconcile-travelers.
  - `traveler_profile_ids` string[]
  - `infant_travel_modes` object

## Response `200`

Successful Response

- FlightBookingSessionReconcileTravelersResponse: Response from traveler reconciliation / repricing.
  - `status` 'session_unchanged' | 'session_repriced' | 'requires_infant_choice' | 'fare_unavailable', required
  - `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
    - `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[]
    - `review_invite` ReviewInvite: What the web needs to show the "Enjoying Axel?" card for one booking.
      - `trigger` 'second_booking' | 'repricing_win' | 'repricing_backfill'
      - `review_url` string
      - `email_invited` boolean, required
      - `booking_id` string, required
      - `booking_kind` 'flight' | 'hotel', required
      - `created_at` string, date-time, 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
    - `public_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_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
    - `member_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
    - `hotel_offer_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
    - `hotel_offer_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
    - `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' | 'hotel_saving', 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.
    - `hotel_offer_acceptance` FlightHotelOfferSelection
      - `offer_id` string, required
      - `qualification_conditions` HotelQualificationConditions, required: Versioned JSON; new fields require explicit schema/evaluator support.
        - `schema_version` integer, required
        - `all` HotelStarRatingCondition[], required
          - `field` 'hotel.star_rating', required
          - `operator` 'eq' | 'gte', required
          - `value` number, required
      - `accepted_terms_version` string, required
      - `accepted_terms_text` string, required
      - `booking_window_seconds` integer, required
      - `completion_buffer_seconds` integer, required
      - `accepted_at` string, date-time, required
      - `conditional_deal` FlightHotelConditionalDeal: Trusted producer snapshot, persisted before display; never public input.
        - `id` string, uuid, required
        - `user_id` string, uuid, required
        - `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
        - `expires_at` string, date-time, required
        - `obligation` FlightHotelOfferOption, required: Server-configured checkout choice; the customer only submits its identity.
          - `offer_id` string, required
          - `qualification_conditions` HotelQualificationConditions, required: Versioned JSON; new fields require explicit schema/evaluator support.
            - `schema_version` integer, required
            - `all` HotelStarRatingCondition[], required
              - …
          - `accepted_terms_version` string, required
          - `accepted_terms_text` string, required
          - `booking_window_seconds` integer, required
          - `completion_buffer_seconds` integer, required
      - `source_observation_id` string, uuid, nullable
      - `proposal_set_id` string, uuid, nullable
    - `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.
    - `fare_hold` FareHoldBlock: The ``fare_hold`` node on every session response.
      - `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[]
              - …
            - `segments` FareHoldFlightSegment[]
              - …
        - `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
      - `pricing` FareHoldPricing: What the shared resolver decided for this checkout under the hold. ``reason`` is the resolver's word; ``applies`` is True only for ``ok``. ``held_fare`` is the rung of ``FareHoldSummary.held_fares`` the resolver matched this checkout to (None when the hold does not apply or on a legacy single-fare hold); ``held_fares_count`` is how many rungs the hold carries, so a surface can say "and 2 other fares" without the list.
        - `applies` boolean, required
        - `reason` 'ok' | 'not_active' | 'expired' | 'itinerary_mismatch' | 'fare_mismatch' | 'party_mismatch' | 'pax_mismatch' | 'currency_mismatch' | 'invalid_held_total' | 'invalid_live_total' | 'cabin_unknown' | 'cabin_mismatch', required
        - `price_dropped` boolean, required
        - `flight` FareHoldFlightPricing, required
          - `held_cents` integer, required
          - `live_cents` integer, required
          - `charge_cents` integer, required
        - `items` FareHoldPricedItem[]
          - `disposition` 'honored' | 'customer_min' | 'dropped_unavailable', required
          - `kind` 'bag' | 'seat', nullable
          - `traveler_profile_id` string, nullable
          - `seat` string, nullable
          - `quantity` integer, nullable
          - `held_cents` integer, required
          - `live_cents` integer, nullable
          - `charge_cents` integer, nullable
          - `absorbed_cents` integer, required
          - `current_product_id` string, nullable
          - `current_passenger_id` string, nullable
          - `anchor` FareHoldHeldLineAnchor: 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
          - `matched_on` 'anchor' | 'legacy_key', nullable
        - `charge_total_cents` integer, required
        - `live_total_cents` integer, required
        - `absorbed_cents` integer, required
        - `expires_at` string, date-time, nullable
        - `held_fare` FareHoldHeldFare: One rung of a whole-flight hold, at its own arm-time party total.
          - `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
        - `held_fares_count` integer
      - `offer` FareHoldOffer, required: 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
      - `restore` FareHoldRestoreOutcome[]
        - `kind` 'bag' | 'seat', required
        - `designator` string, nullable
        - `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
        - `disposition` 'restored_at_held' | 'restored_live_cheaper' | 'already_in_basket' | 'kept_customer_choice' | 'gone' | 'unknown' | 'ambiguous', required
        - `held_cents` integer, required
        - `live_cents` integer, nullable
        - `message` string, required
        - `detail` string, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `previous_price_cents` integer, nullable
  - `new_price_cents` integer, nullable
  - `currency` string, nullable
  - `required_infant_choices` string[]
  - `unavailable_reason` string, nullable: Machine-readable cause when status is fare_unavailable (e.g. 'no_matching_fare_option', 'party_mismatched_reprice'). Lets clients show party-aware recovery copy instead of blaming inventory for every reprice failure. None otherwise.
  - `traveler_passenger_mix` PassengerCount: Passenger breakdown for offers/searches. Simple counts by type.
    - `adults` integer
    - `children` integer
    - `infants_in_seat` integer
    - `infants_on_lap` integer
  - `priced_passenger_mix` PassengerCount: Passenger breakdown for offers/searches. Simple counts by type.
    - `adults` integer
    - `children` integer
    - `infants_in_seat` integer
    - `infants_on_lap` integer
  - `party_changed` boolean: True when traveler_passenger_mix differs from priced_passenger_mix.
  - `fare_match` string, nullable: How the repriced fare was matched to the session's fare: 'exact', 'equivalent', 'name', 'single_option' or 'cabin_fallback'. None when no reprice ran or it could not match.

## Other responses

- `422`: Validation Error

## Changes

> 82 revisions in range; 1 not diffed.

- **2026-10-09** `91d34328554f`: 1 breaking, 3 warning, 1 info
  - the `trigger` response property const value `second_booking` was removed for the status `200`
  - added the new `repricing_backfill` enum value to the `session/review_invite/anyOf[subschema #1: ReviewInvite]/trigger` response property for the response status `200`
  - added the new `repricing_win` enum value to the `session/review_invite/anyOf[subschema #1: ReviewInvite]/trigger` response property for the response status `200`
  - added the new `second_booking` enum value to the `session/review_invite/anyOf[subschema #1: ReviewInvite]/trigger` response property for the response status `200`
  - …1 more
- **2026-10-07** `6d10c134a61d`: 1 warning, 9 info
  - added the new `fee_required` enum value to the `session/fare_hold/anyOf[subschema #1: FareHoldBlock]/offer/reason/anyOf[subschema #1]/` response property for the response status `200`
  - added the optional property `fare_match` to the response with the `200` status
  - added the optional property `party_changed` to the response with the `200` status
  - added the optional property `priced_passenger_mix` to the response with the `200` status
  - …6 more
- **2026-10-02** `6ff2a6d7970a`: 1 info
  - added the optional property `session/review_invite` to the response with the `200` status
- **2026-09-30** `d698bc4c58ea`: 1 info
  - added the optional property `session/fare_policy` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/helloaxel/apis/client-api-gateway/changes/flight-booking/sessions/:session_id/reconcile-travelers/post.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/5d2bae0deed4?raw)
