Flight API
Fare calendar, search across 900+ airlines, price an offer, add ancillaries, create an order, issue tickets, quote and process refunds.
- Fare calendar
- Search
- Price and rules
- Ancillaries (extra baggage)
- Create the order
- Issue tickets
- Void, cancel and refund
Fare calendar
GET /v1/flights/price-calendar?origin=DXB&destination=LHR&departureFrom=2026-11-01&departureTo=2026-11-30 returns the cheapest cached fare per day for the route, in your currency, with how fresh the cache is. Add returnFrom / returnTo for round-trip totals per date pair, and cabin to restrict the class. It is served from our price cache — instant, and it never counts as a supplier search — so use it to draw a calendar or a “cheapest days” strip before the real search.
Search
POST /v1/flights/search with one slice for one-way, two for a return, up to six for multi-city; passenger counts by type; an optional cabin and a maximum number of stops (maxStops). With wait=true the response holds every offer once all suppliers answered; with wait=false you get a searchId and poll GET /v1/flights/search/{searchId} with a cursor until complete is true.
Each offer carries an opaque offerId, the total in your currency with the per-passenger breakdown, slices → segments (carrier, flight number, times, aircraft, cabin, baggage), fare conditions summary and an expiry. Offers are valid for the life of the search session (about 20 minutes).
Price and rules
POST /v1/flights/offers/{offerId}/price re-validates the fare with the supplier right before you commit and returns the confirmed price, taxes and the passenger fields the airline requires (documents, dates of birth, frequent flyer). GET .../fare-rules returns the penalty text; GET .../ancillaries lists paid bags and options you may add to the order.
Ancillaries (extra baggage)
GET /v1/flights/offers/{offerId}/ancillaries lists the chargeable extras the airline offers on that fare — today extra checked-baggage allowances, each with a key, pieces / weight and a price per passenger. Chargeable means they are priced on top of the fare and billed with the order, unlike the included allowance shown on the offer itself.
To buy them, add ancillaries[] to POST /v1/flights/orders: one entry per extra with the key and the passengerIndex (0-based into passengers). They are priced, booked and ticketed together with the order and appear on the order’s ticket totals. Extras cannot be added to an order that is already ticketed; seat selection will follow the same pattern.
{
"offerId": "fo_7Gk2Qp9LcKM5aGqrMQOIzJko",
"passengers": [{ "type": "ADT", "gender": "M", "firstName": "SAM", "lastName": "TRAVELLER", "dateOfBirth": "1990-05-04" }],
"contact": { "email": "[email protected]", "phone": "+971501234567" },
"ancillaries": [{ "key": "BAG20-1", "passengerIndex": 0 }]
}Create the order
POST /v1/flights/orders with the offerId, passengers (names as in the passport, type, date of birth, document for international itineraries), a contact and optional ancillaries[] (see above); add an Idempotency-Key. You receive an orderId, the airline PNR, the ticketing time limit and the status held. In the sandbox the order lands with the supplier’s test system and nothing is charged; in production the deposit is reserved.
Issue tickets
POST /v1/flights/orders/{orderId}/issue (Idempotency-Key required) issues e-tickets and returns ticket numbers per passenger. Read the order any time with GET /v1/flights/orders/{orderId}; the status moves through held → issued → cancelled/refunded.
Void, cancel and refund
GET /v1/flights/orders/{orderId}/refund-quote tells you what a cancellation returns under the fare rules (a same-day void is usually free). POST /v1/flights/orders/{orderId}/cancel commits it; the refund lands on your deposit ledger, visible in the developer portal.