---
title: "Get Booking"
method: GET
path: "/bookings/{booking_id}"
tags: ["bookings"]
---

# Get Booking

`GET /bookings/{booking_id}`

Get booking details by ID.

Looks up booking in both flight and hotel tables.
Returns enriched response with typed fields.

## Path parameters

- `booking_id` string, required

## Response `200`

Successful Response

- union
  - FlightBookingDetailResponse — Enriched flight booking detail for client.
    - `id` string, uuid, required
    - `user_id` string, uuid, required
    - `status` string, required
    - `confirmation_code` string, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `is_axel_booked` boolean — True if booked through Axel (booking_channel='axel')
    - `booking_channel` string, nullable
    - `booking_provider` string, nullable
    - `origin` string, nullable
    - `origin_city` string, nullable
    - `destination` string, nullable
    - `destination_city` string, nullable
    - `departure_date` string, date, nullable
    - `departure_time` string, date-time, nullable
    - `arrival_time` string, date-time, nullable
    - `is_round_trip` boolean
    - `cabin_class` string, nullable
    - `airline_code` string, nullable
    - `airline_name` string, nullable
    - `travelers` string[] — Traveler names
    - `total_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
    - `is_award_booking` boolean
    - `reprice_capability` RepriceCapability — What Axel can do with a booking.
      - `can_reprice` boolean, required — Whether repricing is possible
      - `is_watching` boolean, required — Whether an active watch exists
      - `blocker` 'basic_economy' | 'award_booking' | 'already_departed' | 'departure_too_soon' | 'booking_cancelled' | 'booking_not_active' | 'supplier_not_supported' | 'insufficient_data' | 'non_refundable_hotel' — Reasons Axel can't reprice a booking.
    - `credit_secured` SavingsSecured — Savings captured from a completed reprice.
      - `savings_method` 'card_refund' | 'axel_credit' | 'airline_credit' | 'miles_returned' | 'reduced_payment', required — How customer receives savings from repricing.
      - `amount` 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
      - `miles_amount` integer, nullable — Miles returned
      - `airline_credit_id` string, uuid, nullable — Reference to airline credit record
      - `airline_code` string, nullable — IATA airline code
      - `airline_name` string, nullable — Airline display name
      - `expires_at` string, date, nullable — Credit expiration date
      - `loyalty_program` string, nullable — Loyalty program name
    - `airline_credit_offer` AirlineCreditOffer — Synthetic airline-credit offer shown after sparse flight import.
      - `available` boolean, required
      - `credit_cents` integer, nullable
      - `currency` string, nullable
      - `airline_name` string, nullable
  - HotelBookingDetailResponse — Enriched hotel booking detail for client.
    - `id` string, uuid, required
    - `user_id` string, uuid, required
    - `status` string, required
    - `confirmation_code` string, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `is_axel_booked` boolean — True if booked through Axel (booking_channel='axel')
    - `booking_provider` string, nullable
    - `hotel_name` string, nullable
    - `hotel_chain` string, nullable
    - `city` string, nullable
    - `check_in_date` string, date, nullable
    - `check_out_date` string, date, nullable
    - `nights` integer, nullable
    - `room_type` string, nullable
    - `is_refundable` 'yes' | 'no' | 'unknown' — Whether a booking is refundable. YES = booking can be refunded (may have deadline) NO = booking is non-refundable UNKNOWN = refundability not yet determined
    - `free_cancellation_until` string, date-time, nullable
    - `axel_can_cancel` 'yes' | 'no' | 'unknown' — Whether Axel can cancel a booking on behalf of the user. YES = Axel has credentials/access to cancel NO = User must cancel themselves (e.g., booked through third-party OTA) UNKNOWN = Not yet verified with operator
    - `guests` string[] — Guest names
    - `total_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
    - `is_award_booking` boolean
    - `reprice_capability` RepriceCapability — What Axel can do with a booking.
      - `can_reprice` boolean, required — Whether repricing is possible
      - `is_watching` boolean, required — Whether an active watch exists
      - `blocker` 'basic_economy' | 'award_booking' | 'already_departed' | 'departure_too_soon' | 'booking_cancelled' | 'booking_not_active' | 'supplier_not_supported' | 'insufficient_data' | 'non_refundable_hotel' — Reasons Axel can't reprice a booking.
    - `credit_secured` SavingsSecured — Savings captured from a completed reprice.
      - `savings_method` 'card_refund' | 'axel_credit' | 'airline_credit' | 'miles_returned' | 'reduced_payment', required — How customer receives savings from repricing.
      - `amount` 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
      - `miles_amount` integer, nullable — Miles returned
      - `airline_credit_id` string, uuid, nullable — Reference to airline credit record
      - `airline_code` string, nullable — IATA airline code
      - `airline_name` string, nullable — Airline display name
      - `expires_at` string, date, nullable — Credit expiration date
      - `loyalty_program` string, nullable — Loyalty program name

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