---
title: "Get Flight Hotel Checkout"
method: GET
path: "/flight-booking/sessions/{session_id}/hotel-offer"
tags: ["flight-booking"]
---

# Get Flight Hotel Checkout

`GET /flight-booking/sessions/{session_id}/hotel-offer`

## Path parameters

- `session_id` string, uuid, required

## Response `200`

Successful Response

- FlightHotelCheckoutResponse
  - `offers` FlightHotelOfferOption[], required
    - `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` FlightHotelOfferSelection, required
    - `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
            - `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
    - `source_observation_id` string, uuid, nullable
    - `proposal_set_id` string, uuid, nullable
  - `obligation` FlightHotelObligationResponse, required
    - `id` string, uuid, required
    - `user_id` string, uuid, required
    - `flight_booking_id` string, required
    - `payment_intent_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
    - `customer_deadline` string, date-time, required
    - `final_cutoff` string, date-time, required
    - `flight_booking_session_id` string, uuid, required
    - `status` 'waiting_hotel' | 'capture_pending' | 'satisfied' | 'expiry_checking' | 'expiring' | 'expired' | 'needs_review' | 'cancelled', required
    - `accepted_at` string, date-time, required
    - `window_started_at` string, date-time, required
    - `qualifying_hotel_purchase_id` string, uuid, nullable, required
    - `hotel_completed_at` string, date-time, nullable, required
    - `captured_at` string, date-time, nullable, required
    - `expiry_started_at` string, date-time, nullable, required
    - `hold_released_at` string, date-time, nullable, required
    - `expired_at` string, date-time, nullable, required
    - `payment_status` string, nullable, required — Persisted flight payment status; not a live Stripe lookup.
    - `flight_cancellation_status` 'not_requested' | 'pending' | 'cancelled' | 'failed', required
    - `flight_cancelled_at` string, date-time, nullable, required
    - `recovery` FlightHotelObligationRecovery, required — Customer-safe recovery guidance; never supplier or payment error text.
      - `code` 'flight_capture_needs_review' | 'flight_expiry_needs_review' | 'flight_cancellation_needs_review' | 'obligation_needs_review', required
      - `action` 'contact_support', required
    - `hotel_search_context` HotelSearchCriteria — Criteria snapshot for a hotel search session/map token. Criteria changes create a new hotel search session; FE should reject stale updates whose criteria_hash does not match the active map instance.
      - `check_in` string, date, required
      - `check_out` string, date, required
      - `guests` HotelSearchGuestConfig, required — Wraps a list of GuestRoom into a typed config object for the discovery API. Reuses the shared GuestRoom model — just adds a container with validation.
        - `rooms` GuestRoomOutput[], required
          - `adults` integer, required — Number of adults
          - `children` object[] — List of children with ages
      - `anchor` HotelSearchAnchor, required — Canonical search anchor for a hotel map session. Extends LocationRadius to keep the existing flat latitude/longitude/radius_km shape while adding the label/type metadata FE needs. This prevents map-first hotel search from falling back to a vague destination code or implicit city centroid.
        - `latitude` number, required
        - `longitude` number, required
        - `radius_km` number, required
        - `label` string, required
        - `source` 'city' | 'neighborhood' | 'hotel' | 'airport' | 'user_phrase' | 'map', required — Source/type of the canonical hotel map search anchor.
        - `place_code` string, nullable
    - `card_hold_cents` integer
    - `credit_applied_cents` integer
    - `credit_status` 'none' | 'applied' | 'restore_pending' | 'restored'
    - `credit_restored_at` string, date-time, nullable
    - `ancillary_amount_cents` integer
    - `ancillary_status` 'none' | 'held' | 'fulfilled' | 'refund_pending' | 'refunded' | 'released'
    - `reminder_sent_at` string, date-time, nullable
    - `sms_reminder_sent_at` string, date-time, nullable

## Other responses

- `422` — Validation Error

## Changes

> 22 revisions in range; 1 not diffed.

- **2026-09-26** `ff95d5d338e4` — 1 warning
  - added the new `cancelled` enum value to the `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/status` response property for the response status `200`
- **2026-09-24** `c1e649dcf8e0` — 10 info
  - added the optional property `accepted/anyOf[subschema #1: FlightHotelOfferSelection]/proposal_set_id` to the response with the `200` status
  - added the optional property `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/ancillary_amount_cents` to the response with the `200` status
  - added the optional property `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/ancillary_status` to the response with the `200` status
  - added the optional property `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/card_hold_cents` to the response with the `200` status
  - …6 more
- **2026-09-24** `201bba08e85c` — 2 info
  - added the optional property `accepted/anyOf[subschema #1: FlightHotelOfferSelection]/conditional_deal` to the response with the `200` status
  - added the optional property `accepted/anyOf[subschema #1: FlightHotelOfferSelection]/source_observation_id` to the response with the `200` status
- …earlier changes not shown

[Full history](https://skmtc.dev/helloaxel/apis/client-api-gateway/changes/flight-booking/sessions/:session_id/hotel-offer/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/ff95d5d338e4?raw)
