Search flights
Search flights across every compatible supplier and read the offers grouped by supplier.
/api/v1/get_flightsThe route is a one-way (origin, destination, departure_date), a round trip (add return_date) or up to six flights in segments for an open-jaw or multi-city trip. Values a real client can send are read ("2" for a count, premium economy for a cabin, a space between airline codes), with a coerced_value warning when their meaning had to be guessed; only garbage is refused with a 400 and a stable code, before any supplier is called.
What comes back. suppliers[] has one entry for each supplier that answered, with its own searchId and its offers in results.offers[]. Keep the searchId of the entry an offer is in together with the id of the offer: price_flight and book_flight need the pair. A supplier that fails does not fail the search: it is listed in failures[] with a stable cause (supplier_busy or service_overloaded when FX-Port lacked the capacity to serve it for a moment) and the status is still 200. Only when no supplier answers is the status 503: all_suppliers_failed, or supplier_busy or service_overloaded with Retry-After when every supplier was refused for lack of capacity.
Size and time. An answer takes two to eight seconds, because it waits for the slowest supplier, and weighs 0.7 MB to 14 MB of JSON with no pagination. Send Accept-Encoding: gzip: a typical 695 KB answer is 26 KB on the wire. Identical searches that arrive at the same moment from the same agency, environment and currency are merged into one supplier fan-out; nothing is kept afterwards, and every caller still gets its own requestId and headers and a searchId that works with price_flight.
Streaming. Add stream=true (or send Accept: text/) and the same search arrives as server-sent events: the first offers after about two and a half seconds, the rest as each supplier answers. The events are listed under Streaming events; the Streaming guide has complete client code. Keep at most 4 streams open at the same time for one API key.
Sandbox. Two suppliers answer: amadeus_aqc_dz_1 (routes that touch Algeria: hold, same-day void, flexible dates) and duffel_1 (worldwide, instant ticketing). CDG to ALG returns fares with pricing.acd.applied: true, which need passports after booking.
curl https://api.fx-port.com/api/v1/get_flights \
-H "Authorization: Bearer fxp_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"origin": "ALG",
"destination": "CDG",
"departure_date": "2026-12-15",
"cabin_class": "economy",
"passengers": {
"adults": 1
}
}'{
"environment": "sandbox",
"success": true,
"requestId": "54139f32",
"searchType": "ONE_WAY",
"flexible": false,
"processingTime": 2.243,
"suppliers": [
{
"success": true,
"searchId": "fs_e1853430-16e2-4bcb-8f11-4f7bfbc33602",
"supportHold": true,
"supportVoid": true,
"voidDeadline": "2026-11-01T23:00:00Z",
"filtersApplied": {},
"warnings": [],
"meta": {
"supplierId": "amadeus_aqc_dz_1",
"technologyType": "amadeus_aqc",
"supplierName": "Amadeus Algeria",
"processingTime": 2.174,
"supplierCurrency": "DZD",
"agencyCurrency": "DZD"
},
"results": {
"totalOffers": 66,
"supplierCurrency": "DZD",
"agencyCurrency": "DZD",
"offers": [
{
"id": "fx_offer_b1c2a850",
"type": "flight_offer",
"supplier": {
"id": "amadeus_aqc_dz_1",
"name": "Amadeus Algeria",
"originalId": "6"
},
"bookableSeats": 9,
"supportHold": true,
"supportVoid": true,
"voidDeadline": "2026-11-01T23:00:00Z",
"filtersApplied": {},
"warnings": [],
"instantTicketingRequired": false,
"pricing": {
"supplierCurrency": "DZD",
"agencyCurrency": "DZD",
"basePrice": 18520,
"taxesAndFees": 11306.17,
"agencyCommission": 29.83,
"finalPrice": 29856,
"b2bPrice": 29826.17,
"acd": {
"applied": false
},
"additionalServices": []
},
"itinerary": [
{
"direction": "outbound",
"duration": "PT2H30M",
"stops": 0,
"segments": [
{
"id": "27",
"departure": {
"airportCode": "ALG",
"airportName": "Houari Boumediene Airport",
"cityName": "Algiers",
"countryCode": "DZ",
"terminal": "4",
"datetime": "2026-12-15T07:15:00",
"timeZone": "Africa/Algiers"
},
"arrival": {
"airportCode": "CDG",
"airportName": "Paris Charles de Gaulle Airport",
"cityName": "Paris",
"countryCode": "FR",
"terminal": "2D",
"datetime": "2026-12-15T09:45:00",
"timeZone": "Europe/Paris"
},
"flight": {
"carrierCode": "AH",
"carrierName": "AIR ALGERIE",
"carrierLogoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/AH.svg",
"flightNumber": "1002",
"aircraftCode": "7M8",
"aircraftName": "BOEING 737 MAX 8",
"operatingCarrier": "AH",
"operatingCarrierName": "AIR ALGERIE"
},
"duration": "PT2H30M",
"cabin": "ECONOMY",
"bookingClass": "Q",
"fareBasis": "QDZOO",
"brandedFare": "STANDARD",
"brandedFareLabel": ""
}
],
"conditions": {
"refundBeforeDeparture": {
"allowed": false
},
"changeBeforeDeparture": {
"allowed": true
}
}
}
],
"travelerPricing": [
{
"travelerId": "1",
"travelerType": "ADULT",
"fareOption": "STANDARD",
"price": {
"supplierCurrency": "DZD",
"agencyCurrency": "DZD",
"base": 18520,
"total": 29856,
"b2bPrice": 29826.17
},
"fareDetailsBySegment": [
{
"segmentId": "27",
"cabin": "ECONOMY",
"fareBasis": "QDZOO",
"brandedFare": "STANDARD",
"brandedFareLabel": "",
"bookingClass": "Q",
"includedCheckedBags": {
"quantity": 1
},
"includedCabinBags": {
"quantity": 1
},
"amenities": []
}
]
}
],
"conditions": {
"refundBeforeDeparture": {
"allowed": false
},
"changeBeforeDeparture": {
"allowed": true
}
},
"fareRules": {
"exchange": {
"allowed": true
},
"refund": {
"allowed": false
},
"revalidation": {
"allowed": false
},
"supplierCurrency": "DZD",
"agencyCurrency": "DZD"
},
"validatingAirline": [
{
"code": "AH",
"name": "AIR ALGERIE"
}
],
"additionalServices": []
}
]
}
},
{
"success": true,
"searchId": "fs_dfx_a3aeaa36-74ad-424b-b88d-e6bdc9a4ba94",
"supportHold": false,
"supportVoid": false,
"voidDeadline": null,
"filtersApplied": {},
"warnings": [],
"meta": {
"supplierId": "duffel_1",
"technologyType": "duffel",
"supplierName": "Duffel",
"processingTime": 1.34,
"supplierCurrency": "USD",
"agencyCurrency": "DZD"
},
"results": {
"totalOffers": 92,
"supplierCurrency": "USD",
"agencyCurrency": "DZD",
"offers": [
{
"id": "fx_offer_9ab6d940",
"type": "flight_offer",
"supplier": {
"id": "duffel_1",
"name": "Duffel",
"originalId": "off_034q6JKdiQDZ8HIDMFus64"
},
"bookableSeats": null,
"supportHold": false,
"supportVoid": false,
"voidDeadline": null,
"filtersApplied": {},
"warnings": [],
"instantTicketingRequired": false,
"lastTicketingDate": "2026-11-01",
"lastTicketingDateTime": "2026-11-01T15:52:40.830072Z",
"pricing": {
"supplierCurrency": "USD",
"agencyCurrency": "DZD",
"basePrice": 16385,
"taxesAndFees": 5226.2,
"agencyCommission": 21.62,
"finalPrice": 21632.82,
"b2bPrice": 21611.2,
"additionalServices": []
},
"itinerary": [
{
"direction": "outbound",
"duration": "PT2H24M",
"stops": 0,
"segments": [
{
"id": "seg_0000BC0a5iUChSV6Qrz0Co",
"departure": {
"airportCode": "ALG",
"airportName": "Houari Boumediene Airport",
"cityName": "Algiers",
"countryCode": "DZ",
"terminal": "2",
"datetime": "2026-12-15T10:50:00",
"timeZone": "Africa/Algiers"
},
"arrival": {
"airportCode": "CDG",
"airportName": "Paris Charles de Gaulle Airport",
"cityName": "Paris",
"countryCode": "FR",
"terminal": "1",
"datetime": "2026-12-15T13:14:00",
"timeZone": "Europe/Paris"
},
"flight": {
"carrierCode": "ZZ",
"carrierName": "Duffel Airways",
"carrierLogoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/ZZ.svg",
"flightNumber": "7426",
"aircraftCode": null,
"aircraftName": null,
"operatingCarrier": "ZZ",
"operatingCarrierName": "Duffel Airways"
},
"duration": "PT2H24M",
"cabin": "ECONOMY",
"bookingClass": null,
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic"
}
],
"conditions": {
"changeBeforeDeparture": {
"allowed": false
},
"refundBeforeDeparture": {
"allowed": false
}
}
}
],
"travelerPricing": [
{
"travelerId": "pas_0000BC0a5iH5UE0bmBqWkl",
"travelerType": "ADULT",
"fareOption": "STANDARD",
"price": {
"supplierCurrency": "USD",
"agencyCurrency": "DZD",
"base": 16385,
"total": 21632.82,
"b2bPrice": 21611.2
},
"fareDetailsBySegment": [
{
"segmentId": "seg_0000BC0a5iUChSV6Qrz0Co",
"cabin": "ECONOMY",
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic",
"bookingClass": null,
"includedCheckedBags": {
"quantity": 1
},
"includedCabinBags": {
"quantity": 1
},
"amenities": [
{
"description": "WIFI",
"isChargeable": true,
"amenityType": "WIFI",
"amenityProvider": {
"name": "BrandedFare"
}
},
{
"description": "POWER SUPPLY",
"isChargeable": false,
"amenityType": "ENTERTAINMENT",
"amenityProvider": {
"name": "BrandedFare"
}
}
]
}
]
}
],
"conditions": {
"refundBeforeDeparture": {
"allowed": false
},
"changeBeforeDeparture": {
"allowed": false
}
},
"fareRules": {
"exchange": {
"allowed": false
},
"refund": {
"allowed": false
},
"revalidation": {
"allowed": false
},
"supplierCurrency": "USD",
"agencyCurrency": "DZD"
},
"validatingAirline": [
{
"code": "ZZ",
"name": "Duffel Airways"
}
]
}
]
},
"exchangeRate": 250
}
],
"summary": {
"totalSuppliers": 2,
"successfulSuppliers": 2,
"failedSuppliers": 0,
"totalOffers": 158
}
}{
"environment": "sandbox",
"success": true,
"requestId": "39931c32",
"searchType": "MULTI_CITY",
"flexible": false,
"processingTime": 4.407,
"suppliers": [
{
"success": true,
"searchId": "fs_dfx_a9115ccf-12d2-4755-a1cf-4dce4ff1c57a",
"supportHold": false,
"supportVoid": false,
"voidDeadline": null,
"filtersApplied": {},
"warnings": [],
"meta": {
"supplierId": "duffel_1",
"technologyType": "duffel",
"supplierName": "Duffel",
"processingTime": 4.252,
"supplierCurrency": "USD",
"agencyCurrency": "DZD"
},
"results": {
"totalOffers": 568,
"supplierCurrency": "USD",
"agencyCurrency": "DZD",
"offers": [
{
"id": "fx_offer_8da92b71",
"type": "flight_offer",
"supplier": {
"id": "duffel_1",
"name": "Duffel",
"originalId": "off_034q71ndyhYPPUHIZ2X60m"
},
"bookableSeats": null,
"supportHold": false,
"supportVoid": false,
"voidDeadline": null,
"filtersApplied": {},
"warnings": [],
"instantTicketingRequired": false,
"lastTicketingDate": "2026-11-01",
"lastTicketingDateTime": "2026-11-01T16:21:54.360124Z",
"pricing": {
"supplierCurrency": "USD",
"agencyCurrency": "DZD",
"basePrice": 29490,
"taxesAndFees": 8885.99,
"agencyCommission": 38.39,
"finalPrice": 38414.38,
"b2bPrice": 38375.99,
"additionalServices": []
},
"itinerary": [
{
"direction": "outbound",
"duration": "PT2H24M",
"stops": 0,
"segments": [
{
"id": "seg_0000BC0chQbAwlJhSuri7K",
"departure": {
"airportCode": "ALG",
"airportName": "Houari Boumediene Airport",
"cityName": "Algiers",
"countryCode": "DZ",
"terminal": "2",
"datetime": "2026-12-15T10:50:00",
"timeZone": "Africa/Algiers"
},
"arrival": {
"airportCode": "CDG",
"airportName": "Paris Charles de Gaulle Airport",
"cityName": "Paris",
"countryCode": "FR",
"terminal": "1",
"datetime": "2026-12-15T13:14:00",
"timeZone": "Europe/Paris"
},
"flight": {
"carrierCode": "ZZ",
"carrierName": "Duffel Airways",
"carrierLogoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/ZZ.svg",
"flightNumber": "7426",
"aircraftCode": null,
"aircraftName": null,
"operatingCarrier": "ZZ",
"operatingCarrierName": "Duffel Airways"
},
"duration": "PT2H24M",
"cabin": "ECONOMY",
"bookingClass": null,
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic"
}
],
"conditions": {
"changeBeforeDeparture": {
"allowed": true
},
"refundBeforeDeparture": {
"allowed": true
}
}
},
{
"direction": "return",
"duration": "PT1H59M",
"stops": 0,
"segments": [
{
"id": "seg_0000BC0chQbAwlJhSuri7c",
"departure": {
"airportCode": "CDG",
"airportName": "Paris Charles de Gaulle Airport",
"cityName": "Paris",
"countryCode": "FR",
"terminal": "2",
"datetime": "2026-12-18T13:09:00",
"timeZone": "Europe/Paris"
},
"arrival": {
"airportCode": "MAD",
"airportName": "Adolfo Suรกrez Madrid-Barajas Airport",
"cityName": "Madrid",
"countryCode": "ES",
"terminal": "1",
"datetime": "2026-12-18T15:08:00",
"timeZone": "Europe/Madrid"
},
"flight": {
"carrierCode": "ZZ",
"carrierName": "Duffel Airways",
"carrierLogoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/ZZ.svg",
"flightNumber": "7426",
"aircraftCode": null,
"aircraftName": null,
"operatingCarrier": "ZZ",
"operatingCarrierName": "Duffel Airways"
},
"duration": "PT1H59M",
"cabin": "ECONOMY",
"bookingClass": null,
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic"
}
],
"conditions": {
"changeBeforeDeparture": {
"allowed": true
},
"refundBeforeDeparture": {
"allowed": true
}
}
},
{
"direction": "segment_3",
"duration": "PT1H32M",
"stops": 0,
"segments": [
{
"id": "seg_0000BC0chQbWvRbHU11zfO",
"departure": {
"airportCode": "MAD",
"airportName": "Adolfo Suรกrez Madrid-Barajas Airport",
"cityName": "Madrid",
"countryCode": "ES",
"terminal": "2",
"datetime": "2026-12-22T16:15:00",
"timeZone": "Europe/Madrid"
},
"arrival": {
"airportCode": "ALG",
"airportName": "Houari Boumediene Airport",
"cityName": "Algiers",
"countryCode": "DZ",
"terminal": "1",
"datetime": "2026-12-22T17:47:00",
"timeZone": "Africa/Algiers"
},
"flight": {
"carrierCode": "ZZ",
"carrierName": "Duffel Airways",
"carrierLogoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/ZZ.svg",
"flightNumber": "7426",
"aircraftCode": null,
"aircraftName": null,
"operatingCarrier": "ZZ",
"operatingCarrierName": "Duffel Airways"
},
"duration": "PT1H32M",
"cabin": "ECONOMY",
"bookingClass": null,
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic"
}
],
"conditions": {
"changeBeforeDeparture": {
"allowed": true
},
"refundBeforeDeparture": {
"allowed": true
}
}
}
],
"travelerPricing": [
{
"travelerId": "pas_0000BC0chQMznTySkwEO0q",
"travelerType": "ADULT",
"fareOption": "STANDARD",
"price": {
"supplierCurrency": "USD",
"agencyCurrency": "DZD",
"base": 29490,
"total": 38414.38,
"b2bPrice": 38376
},
"fareDetailsBySegment": [
{
"segmentId": "seg_0000BC0chQbAwlJhSuri7K",
"cabin": "ECONOMY",
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic",
"bookingClass": null,
"includedCheckedBags": {
"quantity": 1
},
"includedCabinBags": {
"quantity": 1
},
"amenities": [
{
"description": "WIFI",
"isChargeable": true,
"amenityType": "WIFI",
"amenityProvider": {
"name": "BrandedFare"
}
}
]
},
{
"segmentId": "seg_0000BC0chQbAwlJhSuri7c",
"cabin": "ECONOMY",
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic",
"bookingClass": null,
"includedCheckedBags": {
"quantity": 1
},
"includedCabinBags": {
"quantity": 1
},
"amenities": [
{
"description": "WIFI",
"isChargeable": true,
"amenityType": "WIFI",
"amenityProvider": {
"name": "BrandedFare"
}
}
]
},
{
"segmentId": "seg_0000BC0chQbWvRbHU11zfO",
"cabin": "ECONOMY",
"fareBasis": "Y20LGTN2",
"brandedFare": "BASIC",
"brandedFareLabel": "Basic",
"bookingClass": null,
"includedCheckedBags": {
"quantity": 1
},
"includedCabinBags": {
"quantity": 1
},
"amenities": [
{
"description": "WIFI",
"isChargeable": true,
"amenityType": "WIFI",
"amenityProvider": {
"name": "BrandedFare"
}
}
]
}
]
}
],
"conditions": {
"refundBeforeDeparture": {
"allowed": true
},
"changeBeforeDeparture": {
"allowed": true
}
},
"fareRules": {
"exchange": {
"allowed": true
},
"refund": {
"allowed": true
},
"revalidation": {
"allowed": false
},
"supplierCurrency": "USD",
"agencyCurrency": "DZD"
},
"validatingAirline": [
{
"code": "ZZ",
"name": "Duffel Airways"
}
]
}
]
},
"exchangeRate": 250
}
],
"summary": {
"totalSuppliers": 1,
"successfulSuppliers": 1,
"failedSuppliers": 1,
"totalOffers": 568
},
"failures": [
{
"supplierId": "amadeus_aqc_dz_1",
"error": "The supplier returned an error.",
"cause": "supplier_error"
}
]
}Request
Query parameters
streambooleantrue (1 and yes also work) returns the answer as server-sent events (text/) instead of one JSON document. Accept: text/ has the same effect. The body of the request is the same in both modes; a request that is refused is answered with an ordinary JSON error before the stream starts. Keep at most 4 streams open at the same time per API key.
Default false.
Body
Required, JSON.
originstringDeparture IATA code: three ASCII letters, an airport (ALG) or a city (PAR). Lower case is read as upper case. Several airports: "ALG,ORN" or ["ALG","ORN"], up to five.
destinationstringArrival IATA code. Must differ from origin. Several airports are written like for origin.
departure_datestringYYYY-MM-DD, a real date from yesterday up to 365 days ahead (date_too_far beyond). return_date and every segment follow the same limits.
return_datestringMakes the search a round trip. On or after departure_date.
segmentsarray of object1 to 6 flights instead of origin, destination and departure_date: open-jaw and multi-city.
At most 6 items.
ShowHide 6 attributes
originstringrequiredDeparture IATA code (three letters). A segment takes one code, not a list.
destinationstringrequiredArrival IATA code. Must differ from origin.
departure_datestringrequiredLocal departure date, YYYY-MM-DD, up to 365 days ahead. The dates must not go backwards.
datestringdeprecatedLegacy name, still accepted. Use departure_date instead.
The previous spelling of departure_date: Local departure date, YYYY-MM-DD, up to 365 days ahead.
departureDatestringdeprecatedLegacy name, still accepted. Use departure_date instead.
The previous spelling of departure_date: Local departure date, YYYY-MM-DD, up to 365 days ahead.
departurestringdeprecatedLegacy name, still accepted. Use departure_date instead.
The previous spelling of departure_date: Local departure date, YYYY-MM-DD, up to 365 days ahead.
urlstringA path-style search used by FX-Port's own site, for example flights/. It wins over every route field. Prefer the fields above.
At most 512 characters.
passengersobjectHow many travelers of each type. Every field is optional. At most 9 seated passengers (adults, seniors, young adults, children and seated infants together), and not more lap or seated infants than adults and seniors. Counts and ages are JSON integers: numeric text and integral floats ("2", 2.0) are read with a coerced_value warning, an empty text or null means not sent, and words, fractions, booleans, negatives and counts above 99 are refused.
ShowHide 18 attributes
adultsintegerAdults (12 or older). The default is one adult when nothing is sent.
Between 0 and 99.
seniorsintegerSeniors.
Between 0 and 99.
young_adultsintegerYoung adults (12 to 17).
Between 0 and 99.
childrenintegerChildren (2 to 11). Without child_ages every child is searched at age 11.
Between 0 and 99.
seated_infantsintegerInfants under 2 with their own seat.
Between 0 and 99.
infantsintegerLap infants under 2: no seat, at most as many as adults and seniors.
Between 0 and 99.
child_agesarray of integerThe age of each child. The ages win over the counts: a disagreement is adjusted and reported in a coerced_value warning. A text list ("7,9") or one bare number is read as a list, also with a warning.
young_adult_agesarray of integerThe age of each young adult.
seated_infant_agesarray of integerThe age of each seated infant.
infant_agesarray of integerThe age of each lap infant. Without it every lap infant is searched at age 0, with no warning.
youngintegerdeprecatedLegacy name, still accepted. Use young_adults instead.
The previous spelling of young_adults: Young adults (12 to 17).
youngAdultsintegerdeprecatedLegacy name, still accepted. Use young_adults instead.
The previous spelling of young_adults: Young adults (12 to 17).
toddlersintegerdeprecatedLegacy name, still accepted. Use seated_infants instead.
The previous spelling of seated_infants: Infants under 2 with their own seat.
seatedInfantsintegerdeprecatedLegacy name, still accepted. Use seated_infants instead.
The previous spelling of seated_infants: Infants under 2 with their own seat.
childAgesarraydeprecatedLegacy name, still accepted. Use child_ages instead.
The previous spelling of child_ages: The age of each child.
youngAdultAgesarraydeprecatedLegacy name, still accepted. Use young_adult_ages instead.
The previous spelling of young_adult_ages: The age of each young adult.
seatedInfantAgesarraydeprecatedLegacy name, still accepted. Use seated_infant_ages instead.
The previous spelling of seated_infant_ages: The age of each seated infant.
infantAgesarraydeprecatedLegacy name, still accepted. Use infant_ages instead.
The previous spelling of infant_ages: The age of each lap infant.
cabin_classstringThe cabin. Case, spaces, dashes and underscores do not matter (Premium Economy is premium_economy); premium, economy_class, business_class, first_class and premium_economy_class are read as their cabin with a coerced_value warning, and an empty text means the default. Any other value (coach, Y) is 400 invalid_cabin_class. Default economy.
One of economy, premium_economy, business, first, any. Default economy.
nonstopbooleantrue returns non-stop offers only.
refundablebooleantrue asks the supplier for refundable fares. A hint, not a guarantee.
checked_bagsbooleantrue asks for fares with a checked bag included. Ignored by Duffel.
max_pricenumberA price ceiling. Not enforced in the sandbox. 0, an empty text and null mean no ceiling: the field is ignored (0 and an empty text add a coerced_value warning). Numeric text is read as a number with a warning; a negative or non-numeric value is 400 invalid_field_type.
included_airlinesobjectUp to 20 airline codes: only these carriers.
excluded_airlinesobjectUp to 20 airline codes to remove.
preferred_airlinesobjectBehaves exactly like included_airlines: a strict allow-list, not a ranking.
flexiblebooleanAlso returns the date matrix (flexPrices) from the suppliers that support it.
flexible_onlybooleanThe matrix without offers. POST / sends it for you.
from_ccstringISO country code of the origin: exactly two letters. Used to choose suppliers.
to_ccstringISO country code of the destination: exactly two letters. Used to choose suppliers.
countriesarray of stringUp to 10 country codes of the route, to override the ones FX-Port infers.
At most 10 items.
filtersobjectThe airline lists in their older nested form. Only the three airline lists are read from it; any other key is ignored. Prefer the top-level fields.
ShowHide 19 attributes
included_airlinesobjectUp to 20 airline codes: only these carriers.
excluded_airlinesobjectUp to 20 airline codes to remove.
preferred_airlinesobjectBehaves exactly like included_airlines: a strict allow-list, not a ranking.
airlineIncludeobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
airline_includeobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
includeAirlinesobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
include_airlinesobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
includedAirlinesobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
include_airlineobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
included_airlineobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
airlineExcludeobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
airline_excludeobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
excludeAirlinesobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
exclude_airlinesobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
excludedAirlinesobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
exclude_airlineobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
excluded_airlineobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
airlinesobjectdeprecatedLegacy name, still accepted. Use preferred_airlines instead.
The previous spelling of preferred_airlines: Behaves exactly like included_airlines: a strict allow-list, not a ranking.
preferredAirlinesobjectdeprecatedLegacy name, still accepted. Use preferred_airlines instead.
The previous spelling of preferred_airlines: Behaves exactly like included_airlines: a strict allow-list, not a ranking.
supplier_idstringRestrict the search to one supplier id (a comma separated list is accepted). Strict: an unknown or disabled id is 400 invalid_supplier_selection.
supplier_idsarray of stringRestrict the search to this set. Strict, up to 10.
At most 10 items.
preferred_suppliersarray of stringA hint: ids that are not usable are ignored and the automatic selection applies.
max_suppliersintegerKeep only the first N selected suppliers, in priority order. "3" and 3.0 are read as 3 with a coerced_value warning; an empty text means no limit.
loyalty_program_accountsarray of objectUp to 10 frequent-flyer accounts.
At most 10 items.
ShowHide 19 attributes
airline_iata_codestringrequiredIATA code of the airline of the programme.
account_numberstringrequiredThe frequent-flyer number.
first_namestringGiven name of the member, matched with the passenger at booking.
last_namestringFamily name of the member.
airlineIataCodestringdeprecatedLegacy name, still accepted. Use airline_iata_code instead.
The previous spelling of airline_iata_code: IATA code of the airline of the programme.
airline_codestringdeprecatedLegacy name, still accepted. Use airline_iata_code instead.
The previous spelling of airline_iata_code: IATA code of the airline of the programme.
airlineCodestringdeprecatedLegacy name, still accepted. Use airline_iata_code instead.
The previous spelling of airline_iata_code: IATA code of the airline of the programme.
programOwnerstringdeprecatedLegacy name, still accepted. Use airline_iata_code instead.
The previous spelling of airline_iata_code: IATA code of the airline of the programme.
program_ownerstringdeprecatedLegacy name, still accepted. Use airline_iata_code instead.
The previous spelling of airline_iata_code: IATA code of the airline of the programme.
accountNumberstringdeprecatedLegacy name, still accepted. Use account_number instead.
The previous spelling of account_number: The frequent-flyer number.
membershipNumberstringdeprecatedLegacy name, still accepted. Use account_number instead.
The previous spelling of account_number: The frequent-flyer number.
membership_numberstringdeprecatedLegacy name, still accepted. Use account_number instead.
The previous spelling of account_number: The frequent-flyer number.
firstNamestringdeprecatedLegacy name, still accepted. Use first_name instead.
The previous spelling of first_name: Given name of the member, matched with the passenger at booking.
givenNamestringdeprecatedLegacy name, still accepted. Use first_name instead.
The previous spelling of first_name: Given name of the member, matched with the passenger at booking.
given_namestringdeprecatedLegacy name, still accepted. Use first_name instead.
The previous spelling of first_name: Given name of the member, matched with the passenger at booking.
lastNamestringdeprecatedLegacy name, still accepted. Use last_name instead.
The previous spelling of last_name: Family name of the member.
familyNamestringdeprecatedLegacy name, still accepted. Use last_name instead.
The previous spelling of last_name: Family name of the member.
family_namestringdeprecatedLegacy name, still accepted. Use last_name instead.
The previous spelling of last_name: Family name of the member.
surnamestringdeprecatedLegacy name, still accepted. Use last_name instead.
The previous spelling of last_name: Family name of the member.
acd_exempt_company_idstringFor agencies that settle in DZD and have an ACD-exempt company: its id, to price the fares without ACD.
agent_idstringYour own id of the agent who searches; stored with the search and the booking.
agency_idstringNot needed: the agency of a call is always the one of your API key. The field is accepted so that older clients keep working, and it is ignored.
departureDatestringdeprecatedLegacy name, still accepted. Use departure_date instead.
The previous spelling of departure_date: YYYY-MM-DD, a real date from yesterday up to 365 days ahead (date_too_far beyond).
returnDatestringdeprecatedLegacy name, still accepted. Use return_date instead.
The previous spelling of return_date: Makes the search a round trip.
cabinClassstringdeprecatedLegacy name, still accepted. Use cabin_class instead.
The previous spelling of cabin_class: The cabin.
travelersobjectdeprecatedLegacy name, still accepted. Use passengers instead.
The previous spelling of passengers: passengers.
directbooleandeprecatedLegacy name, still accepted. Use nonstop instead.
The previous spelling of nonstop: true returns non-stop offers only.
checkedBagsbooleandeprecatedLegacy name, still accepted. Use checked_bags instead.
The previous spelling of checked_bags: true asks for fares with a checked bag included.
maxPricenumberdeprecatedLegacy name, still accepted. Use max_price instead.
The previous spelling of max_price: A price ceiling.
flexibleOnlybooleandeprecatedLegacy name, still accepted. Use flexible_only instead.
The previous spelling of flexible_only: The matrix without offers.
fromCcstringdeprecatedLegacy name, still accepted. Use from_cc instead.
The previous spelling of from_cc: ISO country code of the origin: exactly two letters.
toCcstringdeprecatedLegacy name, still accepted. Use to_cc instead.
The previous spelling of to_cc: ISO country code of the destination: exactly two letters.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The previous spelling of supplier_id: Restrict the search to one supplier id (a comma separated list is accepted).
supplierIdsarraydeprecatedLegacy name, still accepted. Use supplier_ids instead.
The previous spelling of supplier_ids: Restrict the search to this set.
preferredSuppliersarraydeprecatedLegacy name, still accepted. Use preferred_suppliers instead.
The previous spelling of preferred_suppliers: A hint: ids that are not usable are ignored and the automatic selection applies.
maxSuppliersintegerdeprecatedLegacy name, still accepted. Use max_suppliers instead.
The previous spelling of max_suppliers: Keep only the first N selected suppliers, in priority order.
airlineIncludeobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
airline_includeobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
includeAirlinesobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
include_airlinesobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
includedAirlinesobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
include_airlineobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
included_airlineobjectdeprecatedLegacy name, still accepted. Use included_airlines instead.
The previous spelling of included_airlines: Up to 20 airline codes: only these carriers.
airlineExcludeobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
airline_excludeobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
excludeAirlinesobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
exclude_airlinesobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
excludedAirlinesobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
exclude_airlineobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
excluded_airlineobjectdeprecatedLegacy name, still accepted. Use excluded_airlines instead.
The previous spelling of excluded_airlines: Up to 20 airline codes to remove.
airlinesobjectdeprecatedLegacy name, still accepted. Use preferred_airlines instead.
The previous spelling of preferred_airlines: Behaves exactly like included_airlines: a strict allow-list, not a ranking.
preferredAirlinesobjectdeprecatedLegacy name, still accepted. Use preferred_airlines instead.
The previous spelling of preferred_airlines: Behaves exactly like included_airlines: a strict allow-list, not a ranking.
agentIdstringdeprecatedLegacy name, still accepted. Use agent_id instead.
The previous spelling of agent_id: Your own id of the agent who searches; stored with the search and the booking.
acdExemptCompanyIdstringdeprecatedLegacy name, still accepted. Use acd_exempt_company_id instead.
The previous spelling of acd_exempt_company_id: For agencies that settle in DZD and have an ACD-exempt company: its id, to price the fares without ACD.
loyaltyProgramAccountsarraydeprecatedLegacy name, still accepted. Use loyalty_program_accounts instead.
The previous spelling of loyalty_program_accounts: Up to 10 frequent-flyer accounts.
agencyIdstringdeprecatedLegacy name, still accepted. Use agency_id instead.
The previous spelling of agency_id: Not needed: the agency of a call is always the one of your API key.
Response
200The offers grouped by supplier (the JSON mode; with stream=true the same data arrives as the events below). A supplier that failed is in failures and the status is still 200.
environmentstringThe environment of the key that made the call: sandbox for fxp_test_ keys, live for fxp_live_ keys. Present in every JSON body.
One of sandbox, live.
request_idstringThe id of the request, also in the X-Request-Id header.
warningsarray of objectPresent only when the request used a previous spelling of a field or something the endpoint ignored.
ShowHide 5 attributes
codestringWhat the warning is about.
One of deprecated_field, ignored_field, coerced_value, deprecated_value, deprecated_endpoint.
fieldstringThe request field the warning is about.
replacementstringThe name to use instead, for deprecated_* warnings.
messagestringA sentence that says what happened and what to do.
documentation_urlstringWhere the naming rules are explained.
successbooleantrue on every 200, even if some suppliers failed: read suppliers[n].success and failures.
requestIdstringdeprecatedLegacy name, still accepted. Use request_id instead.
The id of this search, 8 characters, for support.
searchTypestringdeprecatedLegacy name, still accepted. Use search_type instead.
The type of the search, derived from your route.
One of ONE_WAY, ROUND_TRIP, OPEN_JAW, MULTI_CITY.
search_typestringThe type of the search, derived from your route. The snake_case twin of searchType, with the same value: use this name.
One of ONE_WAY, ROUND_TRIP, OPEN_JAW, MULTI_CITY.
flexiblebooleanWhether the date matrix was requested.
flexibleOnlybooleanOnly present (and true) for a flexible-only search.
processingTimenumberdeprecatedLegacy name, still accepted. Use processing_time instead.
Seconds spent by the whole search.
processing_timenumberSeconds spent by the whole search. The snake_case twin of processingTime, with the same value: use this name.
suppliersarray of objectOne entry for each supplier that answered.
ShowHide 17 attributes
successbooleanWhether this supplier returned usable results.
searchIdstringdeprecatedLegacy name, still accepted. Use search_id instead.
Save this. fs_<uuid> (Amadeus Algeria) or fs_dfx_<uuid> (Duffel). Send it as search_id to price_flight and book_flight. Valid for 24 hours, but a supplier withdraws offers earlier.
search_idstringSave this. fs_<uuid> (Amadeus Algeria) or fs_dfx_<uuid> (Duffel). Send it as search_id to price_flight and book_flight. Valid for 24 hours, but a supplier withdraws offers earlier. The snake_case twin of searchId, with the same value: use this name.
supportHoldbooleandeprecatedLegacy name, still accepted. Use support_hold instead.
What the supplier can do in general: hold. Read it again on the priced offer.
support_holdbooleanWhat the supplier can do in general: hold. Read it again on the priced offer. The snake_case twin of supportHold, with the same value: use this name.
supportVoidbooleandeprecatedLegacy name, still accepted. Use support_void instead.
What the supplier can do in general: same-day void.
support_voidbooleanWhat the supplier can do in general: same-day void. The snake_case twin of supportVoid, with the same value: use this name.
voidDeadlinestringnullabledeprecatedLegacy name, still accepted. Use void_deadline instead.
ISO 8601 UTC end of the same-day void window, null when the supplier cannot void.
void_deadlinestringnullableISO 8601 UTC end of the same-day void window, null when the supplier cannot void. The snake_case twin of voidDeadline, with the same value: use this name.
filtersAppliedobjectdeprecatedLegacy name, still accepted. Use filters_applied instead.
The filters you asked for, echoed.
filters_appliedobjectThe filters you asked for, echoed. The snake_case twin of filtersApplied, with the same value: use this name.
warningsarray of objectNotes of the supplier.
metaobjectWho answered and how fast.
ShowHide 9 attributes
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
Id of the supplier.
supplier_idstringId of the supplier. The snake_case twin of supplierId, with the same value: use this name.
technologyTypestringThe technology of the supplier: amadeus_aqc or duffel.
supplierNamestringdeprecatedLegacy name, still accepted. Use supplier_name instead.
Name of the supplier.
supplier_namestringName of the supplier. The snake_case twin of supplierName, with the same value: use this name.
processingTimenumberdeprecatedLegacy name, still accepted. Use processing_time instead.
Seconds this supplier took.
processing_timenumberSeconds this supplier took. The snake_case twin of processingTime, with the same value: use this name.
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of your agency.
resultsobjectThe offers of one supplier.
ShowHide 4 attributes
totalOffersintegerNumber of offers of this result set. Always equals the length of offers: there is no pagination.
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of your agency.
offersarray of FlightOfferThe offers, in the order the supplier ranks them.
exchangeRatenumberdeprecatedLegacy name, still accepted. Use exchange_rate instead.
Only when the supplier's currency is not your agency's (Duffel: USD to DZD, 250.0). Every amount is already converted.
exchange_ratenumberOnly when the supplier's currency is not your agency's (Duffel: USD to DZD, 250.0). Every amount is already converted. The snake_case twin of exchangeRate, with the same value: use this name.
flexPricesobjectThe date matrix of a flexible search: one cheapest fare for each candidate date. An entry has no offer id: to book a date, search for it.
ShowHide 3 attributes
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of the prices of matrix.
matrixarray of objectOne entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
ShowHide 15 attributes
departurestringCandidate departure date, YYYY-MM-DD.
returnstringCandidate return date. Only for a round trip or an open-jaw.
statusstringavailable when the supplier has a fare for this date or pair.
One of available, no_flights_available.
finalPricenumbernullabledeprecatedLegacy name, still accepted. Use final_price instead.
What the traveler pays, in agencyCurrency.
final_pricenumbernullableWhat the traveler pays, in agencyCurrency. The snake_case twin of finalPrice, with the same value: use this name.
basePricenumbernullabledeprecatedLegacy name, still accepted. Use base_price instead.
The airline's base fare.
base_pricenumbernullableThe airline's base fare. The snake_case twin of basePrice, with the same value: use this name.
taxesAndFeesnumbernullabledeprecatedLegacy name, still accepted. Use taxes_and_fees instead.
Taxes and fees.
taxes_and_feesnumbernullableTaxes and fees. The snake_case twin of taxesAndFees, with the same value: use this name.
agencyCommissionnumbernullabledeprecatedLegacy name, still accepted. Use agency_commission instead.
Your commission.
agency_commissionnumbernullableYour commission. The snake_case twin of agencyCommission, with the same value: use this name.
b2bPricenumbernullabledeprecatedLegacy name, still accepted. Use b2b_price instead.
The amount debited from your balance.
b2b_pricenumbernullableThe amount debited from your balance. The snake_case twin of b2bPrice, with the same value: use this name.
agencyCurrencystringCurrency of the prices of the entry.
flightobjectThe cheapest flight behind the price of a date.
ShowHide 14 attributes
carrierCodestringIATA code of the marketing airline.
flightNumberstringFlight number with the carrier code (IB1378), unlike the offers.
operatingCarrierstringIATA code of the operating airline.
validatingAirlinestringIATA code of the validating airline, as a text (a list of objects in offers).
durationstringISO 8601 duration.
stopsintegerNumber of stops.
departureTimestringHH:MM.
arrivalTimestringHH:MM.
departureAirportstringIATA code.
arrivalAirportstringIATA code.
cabinClassstringCabin of the fare.
brandedFarestringnullableFare family code.
brandedFareLabelstringnullableDisplay label of the fare family.
includedCheckedBagsobjectChecked baggage included.
ShowHide 1 attribute
quantityintegerNumber of checked bags included.
summaryobjectCounters of the search.
ShowHide 4 attributes
totalSuppliersintegerThe suppliers that answered (the same as successfulSuppliers). In the stream: the suppliers that were called.
successfulSuppliersintegerSuppliers that returned results.
failedSuppliersintegerSuppliers listed in failures.
totalOffersintegerOffers of all the suppliers together.
failuresarray of objectOnly when a supplier failed.
ShowHide 4 attributes
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier that failed.
supplier_idstringThe supplier that failed. The snake_case twin of supplierId, with the same value: use this name.
errorstringA fixed sentence about the cause, never the supplier's own text.
causestringWhy the supplier failed: a stable code to branch on. supplier_temporarily_unavailable: the supplier is skipped for a short while after repeated failures. supplier_busy: FX-Port's capacity towards the supplier is full for a moment, the supplier was not called, retry in a few seconds. service_overloaded: FX-Port was too busy to prepare the results of the supplier, retry in a few seconds.
One of supplier_timeout, supplier_api_error, supplier_auth_error, supplier_error, supplier_temporarily_unavailable, supplier_busy, service_overloaded.
Streaming events
With stream=true the response is text/event-stream: a sequence of events, each an event: line and a data: line with a JSON payload. Lines that start with a colon are keep-alive comments: ignore them. See Streaming search results.
start
First, at once (id 0). The request id, the suppliers that will answer, and environment as the first key.
environmentstringsandbox or live. Only this event carries it, as its first key.
typestringAlways start.
Always start.
requestIdstringThe id of this search, 8 characters.
searchTypestringThe raw classification of the route: ONE WAY, ROUNDTRIP, MULTIPLE CITY or OPEN. Not the vocabulary of the JSON mode: read search_type.
search_typestringThe type of the search in the vocabulary of the JSON mode.
One of ONE_WAY, ROUND_TRIP, OPEN_JAW, MULTI_CITY.
flexiblebooleanWhether the date matrix was requested.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
expectedSuppliersarray of stringThe suppliers called for this search: the compatible ones.
event: start
data: {"environment":"sandbox","type":"start","requestId":"d36b6918","searchType":"ONE WAY","flexible":false,"timestamp":"2026-11-01T15:22:57.762071","expectedSuppliers":["amadeus_aqc_dz_1","duffel_1"],"search_type":"ONE_WAY"}supplier_start
A supplier answered with more than 50 offers: the result set without its offers (results.chunked, chunkSize, totalChunks). Its offers follow in offers_chunk events.
typestringsupplier_result: the whole result set (50 offers or fewer). supplier_start: the result set without its offers (more than 50): they follow in offers_chunk events.
One of supplier_result, supplier_start.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier.
supplier_idstringThe supplier. The snake_case twin of supplierId, with the same value: use this name.
successbooleanAlways true here.
dataobjectA result set: the answer of one supplier, or one later batch of it.
ShowHide 18 attributes
successbooleanWhether this supplier returned usable results.
requestIdstringdeprecatedLegacy name, still accepted. Use request_id instead.
The id of this search.
request_idstringThe id of this search. The snake_case twin of requestId, with the same value: use this name.
searchIdstringdeprecatedLegacy name, still accepted. Use search_id instead.
The searchId of this result set. Price and book an offer with the searchId of the result set it arrived in.
search_idstringThe searchId of this result set. Price and book an offer with the searchId of the result set it arrived in. The snake_case twin of searchId, with the same value: use this name.
searchTypestringdeprecatedLegacy name, still accepted. Use search_type instead.
ONE_WAY, ROUND_TRIP, OPEN_JAW or MULTI_CITY.
search_typestringONE_WAY, ROUND_TRIP, OPEN_JAW or MULTI_CITY. The snake_case twin of searchType, with the same value: use this name.
flexiblebooleanOnly when the search asked for the date matrix: true.
flexibleOnlybooleanOnly for a flexible-only search: true.
processingTimenumberdeprecatedLegacy name, still accepted. Use processing_time instead.
Seconds this supplier took.
processing_timenumberSeconds this supplier took. The snake_case twin of processingTime, with the same value: use this name.
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of your agency.
resultsobjectThe offers of a result set.
ShowHide 7 attributes
totalOffersintegerThe number of offers of this result set. For a chunked set it is the total of the chunks.
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of your agency.
offersarray of FlightOfferThe offers: all of them for supplier_result; empty for supplier_start, whose offers follow in offers_chunk events.
chunkedbooleanOnly on supplier_start: true.
chunkSizeintegerOnly on supplier_start: offers in a chunk (50).
totalChunksintegerOnly on supplier_start: how many offers_chunk events follow.
metaobjectThe supplier block of a result set of the stream.
ShowHide 12 attributes
filtersAppliedobjectdeprecatedLegacy name, still accepted. Use filters_applied instead.
The filters you asked for, echoed.
filters_appliedobjectThe filters you asked for, echoed. The snake_case twin of filtersApplied, with the same value: use this name.
warningsarray of objectNotes of the supplier.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
Id of the supplier.
supplier_idstringId of the supplier. The snake_case twin of supplierId, with the same value: use this name.
technologyTypestringamadeus_aqc or duffel.
supportHoldbooleandeprecatedLegacy name, still accepted. Use support_hold instead.
Whether the supplier can hold.
support_holdbooleanWhether the supplier can hold. The snake_case twin of supportHold, with the same value: use this name.
supportVoidbooleandeprecatedLegacy name, still accepted. Use support_void instead.
Whether the supplier can void the same day.
support_voidbooleanWhether the supplier can void the same day. The snake_case twin of supportVoid, with the same value: use this name.
voidDeadlinestringnullabledeprecatedLegacy name, still accepted. Use void_deadline instead.
End of the same-day void window.
void_deadlinestringnullableEnd of the same-day void window. The snake_case twin of voidDeadline, with the same value: use this name.
exchangeRatenumberdeprecatedLegacy name, still accepted. Use exchange_rate instead.
Only when the supplier's currency is not your agency's.
exchange_ratenumberOnly when the supplier's currency is not your agency's. The snake_case twin of exchangeRate, with the same value: use this name.
flexPricesobjectThe date matrix of a flexible search: one cheapest fare for each candidate date. An entry has no offer id: to book a date, search for it.
ShowHide 3 attributes
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of the prices of matrix.
matrixarray of objectOne entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
ShowHide 15 attributes
departurestringCandidate departure date, YYYY-MM-DD.
returnstringCandidate return date. Only for a round trip or an open-jaw.
statusstringavailable when the supplier has a fare for this date or pair.
One of available, no_flights_available.
finalPricenumbernullabledeprecatedLegacy name, still accepted. Use final_price instead.
What the traveler pays, in agencyCurrency.
final_pricenumbernullableWhat the traveler pays, in agencyCurrency. The snake_case twin of finalPrice, with the same value: use this name.
basePricenumbernullabledeprecatedLegacy name, still accepted. Use base_price instead.
The airline's base fare.
base_pricenumbernullableThe airline's base fare. The snake_case twin of basePrice, with the same value: use this name.
taxesAndFeesnumbernullabledeprecatedLegacy name, still accepted. Use taxes_and_fees instead.
Taxes and fees.
taxes_and_feesnumbernullableTaxes and fees. The snake_case twin of taxesAndFees, with the same value: use this name.
agencyCommissionnumbernullabledeprecatedLegacy name, still accepted. Use agency_commission instead.
Your commission.
agency_commissionnumbernullableYour commission. The snake_case twin of agencyCommission, with the same value: use this name.
b2bPricenumbernullabledeprecatedLegacy name, still accepted. Use b2b_price instead.
The amount debited from your balance.
b2b_pricenumbernullableThe amount debited from your balance. The snake_case twin of b2bPrice, with the same value: use this name.
agencyCurrencystringCurrency of the prices of the entry.
flightobjectThe cheapest flight behind the price of a date.
ShowHide 14 attributes
carrierCodestringIATA code of the marketing airline.
flightNumberstringFlight number with the carrier code (IB1378), unlike the offers.
operatingCarrierstringIATA code of the operating airline.
validatingAirlinestringIATA code of the validating airline, as a text (a list of objects in offers).
durationstringISO 8601 duration.
stopsintegerNumber of stops.
departureTimestringHH:MM.
arrivalTimestringHH:MM.
departureAirportstringIATA code.
arrivalAirportstringIATA code.
cabinClassstringCabin of the fare.
brandedFarestringnullableFare family code.
brandedFareLabelstringnullableDisplay label of the fare family.
includedCheckedBagsobjectChecked baggage included.
ShowHide 1 attribute
quantityintegerNumber of checked bags included.
completebooleanOnly on supplier_result: false means that another batch of this supplier follows, under another searchId.
processingTimenumberdeprecatedLegacy name, still accepted. Use processing_time instead.
Seconds this supplier took.
processing_timenumberSeconds this supplier took. The snake_case twin of processingTime, with the same value: use this name.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
event: supplier_start
data: {"type":"supplier_start","supplierId":"duffel_1","success":true,"data":{"success":true,"requestId":"d36b6918","searchId":"fs_dfx_59ce98b7-ce5a-4911-abb8-b43d4786e6c9","searchType":"ONE_WAY","processingTime":1.381,"supplierCurrency":"USD","agencyCurrency":"DZD","results":{"totalOffers":92,"supplierCurrency":"USD","agencyCurrency":"DZD","offers":[],"chunked":true,"chunkSize":50,"totalChunks":2},"meta":{"filtersApplied":{},"warnings":[],"supplierId":"duffel_1","technologyType":"duffel","supportHold":false,"supportVoid":false,"voidDeadline":null},"exchangeRate":250},"processingTime":1.381,"timestamp":"2026-11-01T15:22:59.161692"}offers_chunk
Up to 50 offers of the result set opened by the last supplier_start of the same supplier.
typestringAlways offers_chunk.
Always offers_chunk.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier. Add the offers to the result set opened by the last supplier_start of this supplier.
supplier_idstringThe supplier. Add the offers to the result set opened by the last supplier_start of this supplier. The snake_case twin of supplierId, with the same value: use this name.
chunkNumberintegerThe number of this chunk, from 1.
totalChunksintegerHow many chunks the result set has.
offersInChunkintegerOffers in this chunk (50 at most).
offersarray of FlightOfferThe offers of this chunk.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
event: offers_chunk
data: {"type":"offers_chunk","supplierId":"duffel_1","chunkNumber":1,"totalChunks":2,"offersInChunk":50,"offers":[{"id":"fx_offer_9ab6d940","type":"flight_offer","supplier":{"id":"duffel_1","name":"Duffel","originalId":"off_034q6JKdiQDZ8HIDMFus64"},"bookableSeats":null,"supportHold":false,"supportVoid":false,"voidDeadline":null,"filtersApplied":{},"warnings":[],"instantTicketingRequired":false,"lastTicketingDate":"2026-11-01","lastTicketingDateTime":"2026-11-01T15:52:40.830072Z","pricing":{"supplierCurrency":"USD","agencyCurrency":"DZD","basePrice":16385,"taxesAndFees":5226.2,"agencyCommission":21.62,"finalPrice":21632.82,"b2bPrice":21611.2,"additionalServices":[]},"itinerary":[{"direction":"outbound","duration":"PT2H24M","stops":0,"segments":[{"id":"seg_0000BC0a5iUChSV6Qrz0Co","departure":{"airportCode":"ALG","airportName":"Houari Boumediene Airport","cityName":"Algiers","countryCode":"DZ","terminal":"2","datetime":"2026-12-15T10:50:00","timeZone":"Africa/Algiers"},"arrival":{"airportCode":"CDG","airportName":"Paris Charles de Gaulle Airport","cityName":"Paris","countryCode":"FR","terminal":"1","datetime":"2026-12-15T13:14:00","timeZone":"Europe/Paris"},"flight":{"carrierCode":"ZZ","carrierName":"Duffel Airways","carrierLogoUrl":"https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/ZZ.svg","flightNumber":"7426","aircraftCode":null,"aircraftName":null,"operatingCarrier":"ZZ","operatingCarrierName":"Duffel Airways"},"duration":"PT2H24M","cabin":"ECONOMY","bookingClass":null,"fareBasis":"Y20LGTN2","brandedFare":"BASIC","brandedFareLabel":"Basic"}],"conditions":{"changeBeforeDeparture":{"allowed":false},"refundBeforeDeparture":{"allowed":false}}}],"travelerPricing":[{"travelerId":"pas_0000BC0a5iH5UE0bmBqWkl","travelerType":"ADULT","fareOption":"STANDARD","price":{"supplierCurrency":"USD","agencyCurrency":"DZD","base":16385,"total":21632.82,"b2bPrice":21611.2},"fareDetailsBySegment":[{"segmentId":"seg_0000BC0a5iUChSV6Qrz0Co","cabin":"ECONOMY","fareBasis":"Y20LGTN2","brandedFare":"BASIC","brandedFareLabel":"Basic","bookingClass":null,"includedCheckedBags":{"quantity":1},"includedCabinBags":{"quantity":1},"amenities":[{"description":"WIFI","isChargeable":true,"amenityType":"WIFI","amenityProvider":{"name":"BrandedFare"}},{"description":"POWER SUPPLY","isChargeable":false,"amenityType":"ENTERTAINMENT","amenityProvider":{"name":"BrandedFare"}}]}]}],"conditions":{"refundBeforeDeparture":{"allowed":false},"changeBeforeDeparture":{"allowed":false}},"fareRules":{"exchange":{"allowed":false},"refund":{"allowed":false},"revalidation":{"allowed":false},"supplierCurrency":"USD","agencyCurrency":"DZD"},"validatingAirline":[{"code":"ZZ","name":"Duffel Airways"}]}],"timestamp":"2026-11-01T15:22:59.161771"}flex_prices
The date matrix of a chunked result set, when flexible: true. Not seen in the sandbox: treat it as optional.
typestringAlways flex_prices.
Always flex_prices.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier.
supplier_idstringThe supplier. The snake_case twin of supplierId, with the same value: use this name.
flexPricesobjectThe date matrix of a flexible search: one cheapest fare for each candidate date. An entry has no offer id: to book a date, search for it.
ShowHide 3 attributes
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of the prices of matrix.
matrixarray of objectOne entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
ShowHide 15 attributes
departurestringCandidate departure date, YYYY-MM-DD.
returnstringCandidate return date. Only for a round trip or an open-jaw.
statusstringavailable when the supplier has a fare for this date or pair.
One of available, no_flights_available.
finalPricenumbernullabledeprecatedLegacy name, still accepted. Use final_price instead.
What the traveler pays, in agencyCurrency.
final_pricenumbernullableWhat the traveler pays, in agencyCurrency. The snake_case twin of finalPrice, with the same value: use this name.
basePricenumbernullabledeprecatedLegacy name, still accepted. Use base_price instead.
The airline's base fare.
base_pricenumbernullableThe airline's base fare. The snake_case twin of basePrice, with the same value: use this name.
taxesAndFeesnumbernullabledeprecatedLegacy name, still accepted. Use taxes_and_fees instead.
Taxes and fees.
taxes_and_feesnumbernullableTaxes and fees. The snake_case twin of taxesAndFees, with the same value: use this name.
agencyCommissionnumbernullabledeprecatedLegacy name, still accepted. Use agency_commission instead.
Your commission.
agency_commissionnumbernullableYour commission. The snake_case twin of agencyCommission, with the same value: use this name.
b2bPricenumbernullabledeprecatedLegacy name, still accepted. Use b2b_price instead.
The amount debited from your balance.
b2b_pricenumbernullableThe amount debited from your balance. The snake_case twin of b2bPrice, with the same value: use this name.
agencyCurrencystringCurrency of the prices of the entry.
flightobjectThe cheapest flight behind the price of a date.
ShowHide 14 attributes
carrierCodestringIATA code of the marketing airline.
flightNumberstringFlight number with the carrier code (IB1378), unlike the offers.
operatingCarrierstringIATA code of the operating airline.
validatingAirlinestringIATA code of the validating airline, as a text (a list of objects in offers).
durationstringISO 8601 duration.
stopsintegerNumber of stops.
departureTimestringHH:MM.
arrivalTimestringHH:MM.
departureAirportstringIATA code.
arrivalAirportstringIATA code.
cabinClassstringCabin of the fare.
brandedFarestringnullableFare family code.
brandedFareLabelstringnullableDisplay label of the fare family.
includedCheckedBagsobjectChecked baggage included.
ShowHide 1 attribute
quantityintegerNumber of checked bags included.
countintegerEntries of the matrix.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
supplier_complete
After the last chunk of a result set. complete: false means that another batch of this supplier follows.
typestringAlways supplier_complete.
Always supplier_complete.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier.
supplier_idstringThe supplier. The snake_case twin of supplierId, with the same value: use this name.
totalOffersintegerOffers of that result set. The total of the search is in summary.
hasFlexPricesbooleanWhether the result set carries a date matrix.
flexPricesCountintegerEntries of the matrix.
completebooleanfalse: another batch of this supplier follows.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
event: supplier_complete
data: {"type":"supplier_complete","supplierId":"amadeus_aqc_dz_1","totalOffers":68,"hasFlexPrices":false,"flexPricesCount":0,"complete":false,"timestamp":"2026-11-01T15:22:59.819079"}supplier_result
A supplier, or a later batch of it, answered with 50 offers or fewer: the whole result set in data.results.offers. complete: false means that another batch follows.
typestringsupplier_result: the whole result set (50 offers or fewer). supplier_start: the result set without its offers (more than 50): they follow in offers_chunk events.
One of supplier_result, supplier_start.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier.
supplier_idstringThe supplier. The snake_case twin of supplierId, with the same value: use this name.
successbooleanAlways true here.
dataobjectA result set: the answer of one supplier, or one later batch of it.
ShowHide 18 attributes
successbooleanWhether this supplier returned usable results.
requestIdstringdeprecatedLegacy name, still accepted. Use request_id instead.
The id of this search.
request_idstringThe id of this search. The snake_case twin of requestId, with the same value: use this name.
searchIdstringdeprecatedLegacy name, still accepted. Use search_id instead.
The searchId of this result set. Price and book an offer with the searchId of the result set it arrived in.
search_idstringThe searchId of this result set. Price and book an offer with the searchId of the result set it arrived in. The snake_case twin of searchId, with the same value: use this name.
searchTypestringdeprecatedLegacy name, still accepted. Use search_type instead.
ONE_WAY, ROUND_TRIP, OPEN_JAW or MULTI_CITY.
search_typestringONE_WAY, ROUND_TRIP, OPEN_JAW or MULTI_CITY. The snake_case twin of searchType, with the same value: use this name.
flexiblebooleanOnly when the search asked for the date matrix: true.
flexibleOnlybooleanOnly for a flexible-only search: true.
processingTimenumberdeprecatedLegacy name, still accepted. Use processing_time instead.
Seconds this supplier took.
processing_timenumberSeconds this supplier took. The snake_case twin of processingTime, with the same value: use this name.
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of your agency.
resultsobjectThe offers of a result set.
ShowHide 7 attributes
totalOffersintegerThe number of offers of this result set. For a chunked set it is the total of the chunks.
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of your agency.
offersarray of FlightOfferThe offers: all of them for supplier_result; empty for supplier_start, whose offers follow in offers_chunk events.
chunkedbooleanOnly on supplier_start: true.
chunkSizeintegerOnly on supplier_start: offers in a chunk (50).
totalChunksintegerOnly on supplier_start: how many offers_chunk events follow.
metaobjectThe supplier block of a result set of the stream.
ShowHide 12 attributes
filtersAppliedobjectdeprecatedLegacy name, still accepted. Use filters_applied instead.
The filters you asked for, echoed.
filters_appliedobjectThe filters you asked for, echoed. The snake_case twin of filtersApplied, with the same value: use this name.
warningsarray of objectNotes of the supplier.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
Id of the supplier.
supplier_idstringId of the supplier. The snake_case twin of supplierId, with the same value: use this name.
technologyTypestringamadeus_aqc or duffel.
supportHoldbooleandeprecatedLegacy name, still accepted. Use support_hold instead.
Whether the supplier can hold.
support_holdbooleanWhether the supplier can hold. The snake_case twin of supportHold, with the same value: use this name.
supportVoidbooleandeprecatedLegacy name, still accepted. Use support_void instead.
Whether the supplier can void the same day.
support_voidbooleanWhether the supplier can void the same day. The snake_case twin of supportVoid, with the same value: use this name.
voidDeadlinestringnullabledeprecatedLegacy name, still accepted. Use void_deadline instead.
End of the same-day void window.
void_deadlinestringnullableEnd of the same-day void window. The snake_case twin of voidDeadline, with the same value: use this name.
exchangeRatenumberdeprecatedLegacy name, still accepted. Use exchange_rate instead.
Only when the supplier's currency is not your agency's.
exchange_ratenumberOnly when the supplier's currency is not your agency's. The snake_case twin of exchangeRate, with the same value: use this name.
flexPricesobjectThe date matrix of a flexible search: one cheapest fare for each candidate date. An entry has no offer id: to book a date, search for it.
ShowHide 3 attributes
supplierCurrencystringCurrency in which the supplier prices.
agencyCurrencystringCurrency of the prices of matrix.
matrixarray of objectOne entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
ShowHide 15 attributes
departurestringCandidate departure date, YYYY-MM-DD.
returnstringCandidate return date. Only for a round trip or an open-jaw.
statusstringavailable when the supplier has a fare for this date or pair.
One of available, no_flights_available.
finalPricenumbernullabledeprecatedLegacy name, still accepted. Use final_price instead.
What the traveler pays, in agencyCurrency.
final_pricenumbernullableWhat the traveler pays, in agencyCurrency. The snake_case twin of finalPrice, with the same value: use this name.
basePricenumbernullabledeprecatedLegacy name, still accepted. Use base_price instead.
The airline's base fare.
base_pricenumbernullableThe airline's base fare. The snake_case twin of basePrice, with the same value: use this name.
taxesAndFeesnumbernullabledeprecatedLegacy name, still accepted. Use taxes_and_fees instead.
Taxes and fees.
taxes_and_feesnumbernullableTaxes and fees. The snake_case twin of taxesAndFees, with the same value: use this name.
agencyCommissionnumbernullabledeprecatedLegacy name, still accepted. Use agency_commission instead.
Your commission.
agency_commissionnumbernullableYour commission. The snake_case twin of agencyCommission, with the same value: use this name.
b2bPricenumbernullabledeprecatedLegacy name, still accepted. Use b2b_price instead.
The amount debited from your balance.
b2b_pricenumbernullableThe amount debited from your balance. The snake_case twin of b2bPrice, with the same value: use this name.
agencyCurrencystringCurrency of the prices of the entry.
flightobjectThe cheapest flight behind the price of a date.
ShowHide 14 attributes
carrierCodestringIATA code of the marketing airline.
flightNumberstringFlight number with the carrier code (IB1378), unlike the offers.
operatingCarrierstringIATA code of the operating airline.
validatingAirlinestringIATA code of the validating airline, as a text (a list of objects in offers).
durationstringISO 8601 duration.
stopsintegerNumber of stops.
departureTimestringHH:MM.
arrivalTimestringHH:MM.
departureAirportstringIATA code.
arrivalAirportstringIATA code.
cabinClassstringCabin of the fare.
brandedFarestringnullableFare family code.
brandedFareLabelstringnullableDisplay label of the fare family.
includedCheckedBagsobjectChecked baggage included.
ShowHide 1 attribute
quantityintegerNumber of checked bags included.
completebooleanOnly on supplier_result: false means that another batch of this supplier follows, under another searchId.
processingTimenumberdeprecatedLegacy name, still accepted. Use processing_time instead.
Seconds this supplier took.
processing_timenumberSeconds this supplier took. The snake_case twin of processingTime, with the same value: use this name.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
event: supplier_result
data: {"type":"supplier_result","supplierId":"amadeus_aqc_dz_1","success":true,"data":{"success":true,"requestId":"d36b6918","searchId":"fs_35418d61-6092-44e4-81b7-a6fe985feb79","searchType":"ONE_WAY","processingTime":2.516,"supplierCurrency":"DZD","agencyCurrency":"DZD","results":{"totalOffers":2,"supplierCurrency":"DZD","agencyCurrency":"DZD","offers":[{"id":"fx_offer_b1c2a850","type":"flight_offer","supplier":{"id":"amadeus_aqc_dz_1","name":"Amadeus Algeria","originalId":"6"},"bookableSeats":9,"supportHold":true,"supportVoid":true,"voidDeadline":"2026-11-01T23:00:00Z","filtersApplied":{},"warnings":[],"instantTicketingRequired":false,"pricing":{"supplierCurrency":"DZD","agencyCurrency":"DZD","basePrice":18520,"taxesAndFees":11306.17,"agencyCommission":29.83,"finalPrice":29856,"b2bPrice":29826.17,"acd":{"applied":false},"additionalServices":[]},"itinerary":[{"direction":"outbound","duration":"PT2H30M","stops":0,"segments":[{"id":"27","departure":{"airportCode":"ALG","airportName":"Houari Boumediene Airport","cityName":"Algiers","countryCode":"DZ","terminal":"4","datetime":"2026-12-15T07:15:00","timeZone":"Africa/Algiers"},"arrival":{"airportCode":"CDG","airportName":"Paris Charles de Gaulle Airport","cityName":"Paris","countryCode":"FR","terminal":"2D","datetime":"2026-12-15T09:45:00","timeZone":"Europe/Paris"},"flight":{"carrierCode":"AH","carrierName":"AIR ALGERIE","carrierLogoUrl":"https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/AH.svg","flightNumber":"1002","aircraftCode":"7M8","aircraftName":"BOEING 737 MAX 8","operatingCarrier":"AH","operatingCarrierName":"AIR ALGERIE"},"duration":"PT2H30M","cabin":"ECONOMY","bookingClass":"Q","fareBasis":"QDZOO","brandedFare":"STANDARD","brandedFareLabel":""}],"conditions":{"refundBeforeDeparture":{"allowed":false},"changeBeforeDeparture":{"allowed":true}}}],"travelerPricing":[{"travelerId":"1","travelerType":"ADULT","fareOption":"STANDARD","price":{"supplierCurrency":"DZD","agencyCurrency":"DZD","base":18520,"total":29856,"b2bPrice":29826.17},"fareDetailsBySegment":[{"segmentId":"27","cabin":"ECONOMY","fareBasis":"QDZOO","brandedFare":"STANDARD","brandedFareLabel":"","bookingClass":"Q","includedCheckedBags":{"quantity":1},"includedCabinBags":{"quantity":1},"amenities":[]}]}],"conditions":{"refundBeforeDeparture":{"allowed":false},"changeBeforeDeparture":{"allowed":true}},"fareRules":{"exchange":{"allowed":true},"refund":{"allowed":false},"revalidation":{"allowed":false},"supplierCurrency":"DZD","agencyCurrency":"DZD"},"validatingAirline":[{"code":"AH","name":"AIR ALGERIE"}],"additionalServices":[]}]},"meta":{"filtersApplied":{},"warnings":[],"supplierId":"amadeus_aqc_dz_1","technologyType":"amadeus_aqc","supportHold":true,"supportVoid":true,"voidDeadline":"2026-11-01T23:00:00Z"}},"complete":true,"processingTime":2.516,"timestamp":"2026-11-01T15:23:00.284737"}error
A supplier failed. The stream goes on without it. cause is a stable code.
typestringAlways error.
Always error.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier that failed.
supplier_idstringThe supplier that failed. The snake_case twin of supplierId, with the same value: use this name.
successbooleanAlways false.
errorstringA fixed sentence about the cause, never the supplier's own text.
causestringWhy the supplier failed: a stable code to branch on. supplier_timeout also marks the suppliers still running when the stream reached its 300 s limit. supplier_busy: FX-Port's capacity towards the supplier is full for a moment, the supplier was not called, retry the search in a few seconds. service_overloaded: FX-Port was too busy to prepare the results of the supplier, retry the search in a few seconds.
One of supplier_timeout, supplier_api_error, supplier_auth_error, supplier_error, supplier_temporarily_unavailable, supplier_busy, service_overloaded.
processingTimenumberSeconds spent.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
event: error
data: {"type":"error","supplierId":"duffel_1","success":false,"error":"The supplier rejected the search request.","cause":"supplier_error","processingTime":0,"timestamp":"2026-11-01T15:23:32.838533"}summary
After every supplier has answered or failed. truncated: true when the stream reached its 300 s limit.
typestringAlways summary.
Always summary.
requestIdstringThe id of this search.
successbooleantrue when at least one supplier returned offers.
processingTimenumberSeconds the whole search took.
summaryobjectThe counters of the search. (In the same event successfulSuppliers is a list next to this object.)
ShowHide 4 attributes
totalSuppliersintegerThe suppliers that were called.
successfulSuppliersintegerSuppliers that returned offers.
failedSuppliersintegerSuppliers that failed.
totalOffersintegerOffers of all result sets together.
successfulSuppliersarray of objectThe suppliers that returned offers.
ShowHide 4 attributes
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier.
supplier_idstringThe supplier. The snake_case twin of supplierId, with the same value: use this name.
offersCountintegerIts offers.
processingTimenumberSeconds it took.
failuresarray of objectnullableThe suppliers that failed: null when none did.
ShowHide 4 attributes
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The supplier.
supplier_idstringThe supplier. The snake_case twin of supplierId, with the same value: use this name.
errorstringA fixed sentence about the cause.
causestringThe stable cause.
truncatedbooleanOnly present (and true) when the stream reached its 300 s limit: the suppliers that had not answered are in failures with the cause supplier_timeout.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
event: summary
data: {"type":"summary","requestId":"d36b6918","success":true,"processingTime":2.581,"summary":{"totalSuppliers":2,"successfulSuppliers":2,"failedSuppliers":0,"totalOffers":162},"successfulSuppliers":[{"supplierId":"duffel_1","offersCount":92,"processingTime":1.381},{"supplierId":"amadeus_aqc_dz_1","offersCount":70,"processingTime":2.516}],"failures":null,"timestamp":"2026-11-01T15:23:00.286463"}done
Last, always (also after a crash). The stream is over only here.
typestringAlways done.
Always done.
requestIdstringThe id of this search.
timestampstringISO 8601 UTC time of the event, without a Z: 2026-11-01T15:22:59.175148.
event: done
data: {"type":"done","requestId":"d36b6918","timestamp":"2026-11-01T15:23:00.286605"}Errors
| Status | Code | Example message |
|---|---|---|
| 400 | missing_search_params | Provide either 'url' or structured params (origin, destination, departure_date, cabin_class). |
| 400 | invalid_airport_code | `origin` must be a 3-letter IATA code such as ALG. |
| 400 | date_in_past | `departure_date` is in the past; use today or a later date. |
| 400 | invalid_cabin_class | `cabin_class` must be one of: economy, premium_economy, business, first, any. |
| 400 | invalid_supplier_selection | One or more requested suppliers cannot be used for this flight search. |
| 400 | traveler_rule_violation | Total seated passengers cannot exceed 9 |
| 403 | acd_exemption_invalid | The selected ACD exempt company is not linked to this agency. |
| 413 | request_too_large | The request body carries too many values. |
| 422 | no_supplier_supports_flexible_search | No flight supplier supports flexible-date search for this route. Flexible search is offered on routes that touch Algeria; use get_flights for fixed dates. |
| 429 | concurrency_limit_exceeded | At most 4 streaming searches can run at the same time for one API key; wait for one to finish (or use the JSON response) and retry. |
| 503 | all_suppliers_failed | No supplier returned results. See supplierErrors for details. |
| 503 | supplier_busy | The supplier is temporarily at capacity; retry after the time given in the Retry-After header. |
| 503 | service_overloaded | The service is temporarily overloaded; retry after the time given in the Retry-After header. |
The shape of the error body depends on the endpoint. See Errors for every shape and code.