---
title: "Poll a booking"
method: GET
path: "/api/v1/flights/bookings/{booking_id}"
tags: ["Bookings"]
---

# Poll a booking

`GET /api/v1/flights/bookings/{booking_id}`

## Request

- Base URL: `https://letsfg.co/developers/api/v1`
- URL: `https://letsfg.co/developers/api/v1/api/v1/flights/bookings/{booking_id}`
- Auth: API key in header `X-API-Key`

The state of a booking you opened. Poll every few seconds; the poll is also how LetsFG
knows you are still there, which keeps a paused booking alive.

While `booking_in_progress`, `question` may carry a seat map, a paid extra, or a fare
increase the run is holding a cart for — answer it through
`POST /flights/bookings/{booking_id}/answer` within its window, or the run continues
without it.

## Path parameters

- `booking_id` string, required

## Response `200`

Booking state

- BookingStatus
  - `booking_id` string
  - `state` 'authorised' | 'card_issued' | 'booking_in_progress' | 'awaiting_settlement' | 'completed' | 'failed' | 'needs_attention'
  - `terminal` boolean: True for completed, failed and needs_attention.
  - `pnr` string
  - `currency` string
  - `held_amount` number
  - `charged_amount` number: Set once the hold is captured against a real PNR.
  - `card_last4` string
  - `failure_reason` string
  - `decline_reason` string
  - `updated_at_ms` integer
  - `offer` object
  - `question` object, nullable: Present only while `booking_in_progress` and something needs you. `kind` is `seat`, `extra` or `price_change`; `round` must be echoed to the answer route.
  - `message` string

## Other responses

- `404`: No such booking on this account

## Changes

- **2026-09-08** `177953280ce4`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/letsfg/apis/letsfg-api/changes/api/v1/flights/bookings/:booking_id/get.md)

---

[API](https://skmtc.dev/letsfg/apis/letsfg-api.md) · [All operations](https://skmtc.dev/letsfg/apis/letsfg-api/llms.txt) · [OpenAPI document](https://skmtc.dev/letsfg/apis/letsfg-api/revisions/3c4b139ca14f?raw)
