---
title: "Book a flight"
method: POST
path: "/api/v1/bookings/book"
tags: ["Bookings"]
---

# Book a flight

`POST /api/v1/bookings/book`

Create a real airline booking (PNR). Ticket price charged via Stripe.
Passenger names must match government ID. E-ticket sent to contact email.

## Request body

- BookRequest
  - `offer_id` string, required
  - `passengers` Passenger[], required
    - `id` string, required — Passenger ID from search response (e.g. pas_0)
    - `given_name` string, required
    - `family_name` string, required
    - `born_on` string, date, required — Date of birth (YYYY-MM-DD)
    - `gender` 'm' | 'f', required
    - `title` 'mr' | 'mrs' | 'ms' | 'miss' | 'dr', required
  - `contact_email` string, email, required
  - `idempotency_key` string — Prevent double-booking on retry

## Response `200`

Booking confirmed

- BookingResponse
  - `booking_id` string
  - `booking_reference` string — Airline PNR / confirmation code
  - `status` 'confirmed' | 'pending' | 'failed'
  - `total_price` number, float
  - `currency` string

## Other responses

- `401` — Invalid or missing API key
- `410` — Offer expired (30-min window passed)
- `422` — Invalid passenger data

---

[API](https://skmtc.dev/letsfg/apis/letsfg-api.md) · [All operations](https://skmtc.dev/letsfg/apis/letsfg-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/letsfg/letsfg-api/revisions/89a6a1405650/schema)
