---
title: "Get Flight Hotel Proposals"
method: GET
path: "/flight-hotel-offers/{proposal_id}"
tags: ["flight-hotel-offers"]
---

# Get Flight Hotel Proposals

`GET /flight-hotel-offers/{proposal_id}`

## Path parameters

- `proposal_id` string, uuid, required

## Response `200`

Successful Response

- FlightHotelProposalsResponse
  - `id` string, uuid, required
  - `conv_trip_id` string, uuid, required
  - `scope` FlightHotelProposalScope, required
    - `schema_version` 1
    - `origin` string, required
    - `destination` string, required
    - `departure_date` string, date, required
    - `return_date` string, date, required
    - `passengers` PassengerCount, required — Passenger breakdown for offers/searches. Simple counts by type.
      - `adults` integer
      - `children` integer
      - `infants_in_seat` integer
      - `infants_on_lap` integer
  - `proposals` union[], required
    - union
      - 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
      - EarnedHotelFlightOffer — The hotel purchase already fulfilled the condition; no flight hold or clock.
        - `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
        - `destination` string, nullable
        - `nights` integer, required
        - `average_stay_total` 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
        - `sample_size` integer, nullable
        - `sample_bounds` Viewport — Map viewport defined by SW and NE corners of the visible area. Sent by the client whenever the user pans or zooms the map.
          - `sw` LatLng, required — Geographic coordinate pair. Used by both pricing and discovery APIs.
            - `latitude` number, required
            - `longitude` number, required
          - `ne` LatLng, required — Geographic coordinate pair. Used by both pricing and discovery APIs.
            - `latitude` number, required
            - `longitude` number, required
        - `hotel_booking_id` string, required
        - `id` string, uuid, required
        - `user_id` string, uuid, required
        - `source` 'confirmed_hotel'
  - `expires_at` string, date-time, nullable, required
  - `accepted_deal_id` string, uuid, nullable
  - `default_deal_id` string, uuid, nullable — Recommended hotel offer: 4-star when available, otherwise the lower middle available tier. Acceptance remains explicit.
  - `accepted_at` string, date-time, nullable
  - `purchase_intent_id` string, uuid, nullable
  - `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

## Other responses

- `422` — Validation Error

## Changes

> 22 revisions in range; 1 not diffed.

- **2026-09-26** `ff95d5d338e4` — 1 info
  - added the optional property `default_deal_id` to the response with the `200` status
- **2026-09-24** `c1e649dcf8e0` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/helloaxel/apis/client-api-gateway/changes/flight-hotel-offers/:proposal_id/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)
