Get flight offers
Price fares for a party and an itinerary. One routed supplier answers; name supplier to choose it yourself, and read meta.supplier to see who priced the fares. Offers are not stored: prebook from an offer_reference before its expires_at. limit caps the fares returned, and meta.truncated appears when more matched.
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
Correlation id echoed to the upstream service and returned on the response. Generated as req_<uuid> when omitted.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The itinerary as journeys, the party, and how to narrow and order the fares.
Response Body
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/offers" \ -H "Content-Type: application/json" \ -d '{ "journeys": [ { "origin": "LHR", "destination": "CDG", "date": "2026-11-10" } ], "passengers": { "adults": 1 } }'{ "data": [ { "offer_reference": "eyJzdXBwbGllciI6ImR1ZmZlbCIsIm9mZmVyIjoib2ZmXzAwMDBC…", "total_amount": { "amount": 220.67, "currency": "USD" }, "expires_at": "2026-11-01T12:34:56.000Z", "fare_family": "Basic", "refundable": false, "fare_conditions": { "refund": { "allowed": true, "penalty": { "amount": 75, "currency": "USD" } }, "change": { "allowed": true, "penalty": { "amount": 75, "currency": "USD" } } }, "documents_required": false, "included_baggage": { "checked": true, "carry_on": true }, "journeys": [ { "origin": "LHR", "destination": "CDG", "direction": "OUTBOUND", "departure_time": "2026-11-10T06:58:00", "arrival_time": "2026-11-10T09:15:00", "duration_minutes": 137, "stops": 0, "segments": [ { "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_code": "AF", "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", "cabin_class": "ECONOMY", "duration_minutes": 137 } ] } ], "total_duration_minutes": 274 } ], "meta": { "supplier": "DUFFEL", "truncated": true, "unsupported_filters": [ "price" ] }}Read supported hotel features and limits GET
You receive the active, configured suppliers and the features this service implements for each. Use these limits to prepare your requests; the list is shared across organizations and does not select a supplier or describe your routing rules. Read search meta.supplier to identify the supplier used for your stay. Availability, rate restrictions and booking state still determine whether a particular request succeeds. An empty list means no active configured supplier is registered. This read makes no supplier requests and is not a health check; supplier status can change after you read it.
List an offer's bags GET
Bags the airline sells with this offer, priced per bag and per passenger. Send the ids you want in prebook's `services`; they are included in the fare's `total_amount` and paid at book. An empty list means the airline sells none for this fare. Seats are not listed here; read the offer's seat maps.