More products
Flights
Flights use the same search, price-check and booking calls as hotels. What differs is the search body, the passenger details, and how quickly fares expire.
Search
Send airport or city IATA codes and dates. Flight searches finish before POST /search returns, so the first results read is complete.
{
"productType": "flight",
"origin": "DXB",
"destination": "LHR",
"checkIn": "2026-11-02",
"checkOut": "2026-11-09",
"cabinClass": "economy",
"occupancy": [{ "adults": 2, "childrenAges": [7] }],
"currency": "USD",
"market": "AE"
}{
"productType": "flight",
"slices": [
{ "origin": "LHR", "destination": "JFK", "date": "2026-11-02" },
{ "origin": "JFK", "destination": "LAX", "date": "2026-11-06" },
{ "origin": "LAX", "destination": "LHR", "date": "2026-11-12" }
],
"cabinClass": "business",
"occupancy": [{ "adults": 1, "childrenAges": [] }],
"currency": "USD",
"market": "GB"
}| Field | Description |
|---|---|
originIATA codeone-way/return | Departure airport or city code, e.g. DXB. |
destinationIATA codeone-way/return | Arrival airport or city code. |
checkInYYYY-MM-DDone-way/return | Outbound departure date. |
checkOutYYYY-MM-DD | Return departure date. Send it for a return trip; leave it out for one-way. |
slicesarray, up to 6multi-city | Each leg as origin, destination, date. When sent, origin, destination and dates are ignored. |
cabinClass"economy" | "premium_economy" | "business" | "first" | Preferred cabin. |
occupancyarray, 1 entryrequired | Passengers: adults (1–8) and every child's age in childrenAges, infants included. |
currencyISO 4217required | Your wallet currency. |
marketISO alpha-2required | Your point of sale. |
Results
Each result row is one priced itinerary for all passengers. summary.slices has one entry per journey (outbound, return, or each multi-city leg), and each slice lists its segments — the individual flights.
{
"rateQuoteId": "66f2a1c0e4b0c1d2e3f4c100",
"sellAmountMinor": 184250,
"sellCurrency": "USD",
"refundable": false,
"summary": {
"rateName": "Example Air · Economy Flex",
"airline": "Example Air",
"route": "DXB→LHR",
"departAt": "2026-11-02T08:15:00",
"arriveAt": "2026-11-02T12:40:00",
"stops": 0,
"durationText": "7h 25m",
"slices": [
{
"origin": "DXB", "destination": "LHR",
"departAt": "2026-11-02T08:15:00", "arriveAt": "2026-11-02T12:40:00",
"duration": "7h 25m", "stops": 0, "flights": "XA1",
"segments": [
{ "origin": "DXB", "destination": "LHR", "carrier": "XA", "carrierName": "Example Air",
"flightNumber": "1", "departAt": "2026-11-02T08:15:00", "arriveAt": "2026-11-02T12:40:00",
"duration": "7h 25m", "cabin": "economy" }
]
}
]
}
}durationText is ready to display. airline can be a name or an airline code, and fields a fare doesn't provide are null.
Fare details
For a fuller picture of a fare before checkout, call GET /quotes/:id/details. Its details can include the fare brand for each slice, aircraft and airport names per segment, the checked-bag allowance, whether refunds and changes are allowed before departure (with any penalty), and offerExpiresAt. Show baggage and change rules before the traveller commits.
Price-check promptly
Airline fares can expire sooner than the 20-minute quote clock — when the quote details carry offerExpiresAt, that is the fare's own deadline. Price-check as soon as the traveller chooses a fare and book immediately after. A 409 rate_unavailable means the fare has gone; search again.
Passenger details
Send one traveller per passenger searched — adults, then each child with type: "child" and their searched age (infants included, with their age). Always send all of these for every passenger:
firstNameandlastNameexactly as on the passport,title,dateOfBirthandgender;passportNumber,passportExpiryandnationality— on every flight, domestic included. Some fares can't be booked without them, and the result doesn't tell you which.
For some fares these are checked before anything is charged: a missing field, or a passport that expires within 6 months of travel, returns 400 travel_documents_required with the traveller named in message. For others a gap only shows up as a failed booking, so check passport validity in your own form too.
The lead passenger also needs email and phone — airlines use them for disruption notices.
{
"firstName": "Asha",
"lastName": "Rao",
"title": "Ms",
"type": "adult",
"dateOfBirth": "1990-05-14",
"gender": "f",
"email": "asha.rao@example.com",
"phone": "+971500000000",
"passportNumber": "X1234567",
"passportExpiry": "2031-01-01",
"nationality": "IN"
}Book and confirm
Book with paymentMethod: "credit" and an idempotency key, exactly as for hotels. A flight is confirmed only once it is ticketed. A booking that is paid but still being ticketed comes back supplier_pending — tickets usually follow within a minute or two. Poll POST /bookings/:id/refresh-status as described in Booking statuses, and don't book again.
On GET /bookings/:id, the flight's line item carries:
supplierConfirmationId— the airline's booking reference (locator) when it is known, otherwise the reservation's PNR. It is also indetails.airlinePnrwhen the airline has issued one;details.pnr, when present, is the reservation's PNR.details.tickets[]— one entry per ticketed passenger:name,ticketNoandairlinePnr.details.ticketingStatus—ticketedorunticketedat the time the booking was made.
Ticket numbers are recorded when ticketing finishes during the booking call. A booking that went through supplier_pending may reach confirmed without them, and its ticketingStatus may still read unticketed; go by the booking's state, and email support with the orderRef if a traveller needs the ticket numbers. Not every flight carries these fields.
- Holds aren't available for flights.
- Flights are sold net; there is no commission.
Cancel
Cancel with POST /bookings/:id/cancel. What is refunded depends on the fare's conditions — many economy fares are non-refundable — so check the fare details before you offer a cancellation.
Flight cancellations are usually completed by our operations team rather than straight away: the booking moves to manual_review, with refund.status manual_review, until they finish. Don't cancel again; see Manual review.