Docs
Get an API key
Flight Bookings

Prebook a flight offer

POST
/v1/flight/prebook

Re-price the offer and bind it: the itinerary, passengers and contact are stored and the booking answers READY_FOR_COMPLETE. A fresh key answers 201; repeating the same x-idempotency-key under the same organisation and user answers 200 with the existing booking. No inventory is held before book, so expires_at is a real deadline. use_payment_sdk decides how book pays: a saved instrument by default, or a Payment SDK intent whose token comes back in meta.payment_sdk on the 201. On Duffel, an airline can grant a member price for a passenger's loyalty_accounts, which lowers total_amount. A Duffel offer takes one active booking at a time, so prebooking it under a new key answers 409 while an earlier booking of it is unfinished.

Authorization

x-api-key<token>

Your API key. Issued and revoked from the TrustPixel dashboard; the gateway resolves it to an owning organization on every request.

In: header

Header Parameters

x-request-id?string

Correlation id echoed to the upstream service and returned on the response. Generated as req_<uuid> when omitted.

x-idempotency-key*string

Your key for this prebook. Repeating it with the same organisation and user returns the existing booking rather than placing a second hold. After a failed booking, send a new key.

Length1 <= length <= 256

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

You bind an offer with the contact and passengers. Duffel reserves nothing before book; LiteAPI creates a checkout and may hold the itinerary during prebook.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/flight/prebook" \  -H "x-idempotency-key: trip-2026-11-10-1" \  -H "Content-Type: application/json" \  -d '{    "offer_reference": "eyJzdXBwbGllciI6ImR1ZmZlbCIsIm9mZmVyIjoib2ZmXzAwMDBC…",    "contact": {      "first_name": "Amira",      "last_name": "Haddad",      "email": "amira.haddad@example.com",      "phone_number": "2080160509",      "phone_country_code": "44"    },    "passengers": [      {        "first_name": "Amira",        "last_name": "Haddad",        "birthday": "1988-04-12",        "type": "ADULT",        "gender": "F",        "nationality": "GB"      }    ]  }'
{  "data": {    "id": "bkg_0192f3a4b5c64d7e8f9a0b1c2d3e4f5b",    "supplier": "DUFFEL",    "status": "CREATED",    "total_amount": {      "amount": 260.67,      "currency": "USD"    },    "fare_amount": {      "amount": 220.67,      "currency": "USD"    },    "fare_tax_amount": {      "amount": 50,      "currency": "USD"    },    "services_amount": {      "amount": 40,      "currency": "USD"    },    "services": [      {        "id": "svc_0192f3a4b5c6",        "status": "PENDING",        "passenger_id": "string",        "segment_ids": [          "string"        ],        "quantity": 1,        "unit_amount": {          "amount": 40,          "currency": "USD"        },        "total_amount": {          "amount": 40,          "currency": "USD"        },        "payment_id": "pay_0192f3a4b5c64d7e8f9a0b1c2d3e4f61",        "type": "BAGGAGE",        "baggage": {          "type": "CHECKED",          "max_weight_kg": 23        }      }    ],    "payments": [      {        "id": "pay_0192f3a4b5c64d7e8f9a0b1c2d3e4f60",        "status": "CAPTURED",        "amount": {          "amount": 180.67,          "currency": "USD"        },        "collected_by": "OEX",        "payment_method": {          "type": "CARD",          "card": {            "brand": "VISA",            "last4": "4242",            "funding": "CREDIT",            "wallet": "APPLE_PAY"          }        },        "created_at": "2026-11-01T12:40:12.000Z"      }    ],    "expires_at": "2026-11-01T12:49:56.000Z",    "cancellation_policy": {      "refundable": false,      "penalty": {        "amount": 150,        "currency": "USD"      }    },    "fare_conditions": {      "refund": {        "allowed": true,        "penalty": {          "amount": 75,          "currency": "USD"        }      },      "change": {        "allowed": true,        "penalty": {          "amount": 75,          "currency": "USD"        }      }    },    "passengers": [      {        "id": "string",        "first_name": "Amira",        "last_name": "Haddad",        "loyalty_accounts": [          {            "airline_iata_code": "BA",            "membership_number": "•••••1014"          }        ]      }    ],    "journeys": [      {        "id": "string",        "origin": "LHR",        "destination": "CDG",        "direction": "OUTBOUND",        "fare_brand": "Premium",        "departure_time": "2026-11-10T06:58:00",        "arrival_time": "2026-11-10T09:15:00",        "duration_minutes": 137,        "stops": 0,        "segments": [          {            "id": "string",            "origin": "LHR",            "destination": "CDG",            "departure_time": "2026-11-10T06:58:00",            "arrival_time": "2026-11-10T09:15:00",            "marketing_flight": "AF1681",            "marketing_carrier": "Air France",            "marketing_carrier_logo_url": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/AF.svg",            "operating_carrier": "KLM",            "operating_carrier_logo_url": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/KL.svg",            "duration_minutes": 137,            "passengers": [              {                "passenger_id": "psg_0192f3a4b5c64d7e8f9a0b1c2d3e4f5c",                "cabin_class": "BUSINESS",                "cabin_name": "Business",                "checked_bags": 1,                "carry_on_bags": 1              }            ]          }        ]      }    ],    "supplier_reference": "ord_0000B9M0HSU2oNVmKw0UKj",    "airline_pnr": "J6AK3S",    "confirmed_at": "2026-11-01T12:40:12.000Z",    "canceled_at": "2026-11-02T09:15:00.000Z",    "cancellation": {      "fee": {        "amount": 95,        "currency": "USD"      },      "refunded_by": "SUPPLIER",      "refund_amount": {        "amount": 286.14,        "currency": "USD"      },      "refund_to": [        {          "payment_id": "pay_0192f3a4b5c64d7e8f9a0b1c2d3e4f61"        }      ]    },    "failure": {      "code": "book_failed",      "description": "The offer is no longer available."    },    "created_at": "2026-11-01T12:34:56.000Z",    "updated_at": "2026-11-01T12:40:12.000Z"  },  "meta": {    "payment_sdk": {      "provider": "oex",      "token": "string"    }  }}