---
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
  - `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', 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

## Other responses

- `422` — Validation Error

## Changes

> 19 revisions in range; 1 not diffed.

- **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
- **2026-09-23** `5d2121d26b96` — 14 info
  - added the required property `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/accepted_at` to the response with the `200` status
  - added the required property `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/captured_at` to the response with the `200` status
  - added the required property `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/expired_at` to the response with the `200` status
  - added the required property `obligation/anyOf[subschema #1: FlightHotelObligationResponse]/expiry_started_at` to the response with the `200` status
  - …10 more
- **2026-09-22** `b7b1f6448378` — 1 info
  - endpoint added

[Change 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/201bba08e85c?raw)
