# Search flights

> Search flights across every compatible supplier and read the offers grouped by supplier.

Endpoint: `POST /get_flights`

Source: https://fx-port.com/docs/api/get-flights

`POST /api/v1/get_flights`

Requires an API key with **Read** permission; a **Read+Write** key works too.

The 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/event-stream`) 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.

## Request

### Query parameters

- `stream` (boolean, optional): `true` (`1` and `yes` also work) returns the answer as server-sent events (`text/event-stream`) instead of one JSON document. `Accept: text/event-stream` 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.

- `origin` (string, optional): Departure 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.
- `destination` (string, optional): Arrival IATA code. Must differ from `origin`. Several airports are written like for `origin`.
- `departure_date` (string, optional): `YYYY-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_date` (string, optional): Makes the search a round trip. On or after `departure_date`.
- `segments` (array of object, optional): 1 to 6 flights instead of `origin`, `destination` and `departure_date`: open-jaw and multi-city. At most 6 items.
  - `origin` (string, required): Departure IATA code (three letters). A segment takes one code, not a list.
  - `destination` (string, required): Arrival IATA code. Must differ from `origin`.
  - `departure_date` (string, required): Local departure date, `YYYY-MM-DD`, up to 365 days ahead. The dates must not go backwards.
  - `date` (string, deprecated, optional): Legacy name: use `departure_date`. The previous spelling of `departure_date`: Local departure date, `YYYY-MM-DD`, up to 365 days ahead.
  - `departureDate` (string, deprecated, optional): Legacy name: use `departure_date`. The previous spelling of `departure_date`: Local departure date, `YYYY-MM-DD`, up to 365 days ahead.
  - `departure` (string, deprecated, optional): Legacy name: use `departure_date`. The previous spelling of `departure_date`: Local departure date, `YYYY-MM-DD`, up to 365 days ahead.
- `url` (string, optional): A path-style search used by FX-Port's own site, for example `flights/ALG-CDG/2026-12-15/economy/1adults`. It wins over every route field. Prefer the fields above. At most 512 characters.
- `passengers` (object, optional): How 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.
  - `adults` (integer, optional): Adults (12 or older). The default is one adult when nothing is sent. Between 0 and 99.
  - `seniors` (integer, optional): Seniors. Between 0 and 99.
  - `young_adults` (integer, optional): Young adults (12 to 17). Between 0 and 99.
  - `children` (integer, optional): Children (2 to 11). Without `child_ages` every child is searched at age 11. Between 0 and 99.
  - `seated_infants` (integer, optional): Infants under 2 with their own seat. Between 0 and 99.
  - `infants` (integer, optional): Lap infants under 2: no seat, at most as many as adults and seniors. Between 0 and 99.
  - `child_ages` (array of integer, optional): The 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_ages` (array of integer, optional): The age of each young adult.
  - `seated_infant_ages` (array of integer, optional): The age of each seated infant.
  - `infant_ages` (array of integer, optional): The age of each lap infant. Without it every lap infant is searched at age 0, with no warning.
  - `young` (integer, deprecated, optional): Legacy name: use `young_adults`. The previous spelling of `young_adults`: Young adults (12 to 17).
  - `youngAdults` (integer, deprecated, optional): Legacy name: use `young_adults`. The previous spelling of `young_adults`: Young adults (12 to 17).
  - `toddlers` (integer, deprecated, optional): Legacy name: use `seated_infants`. The previous spelling of `seated_infants`: Infants under 2 with their own seat.
  - `seatedInfants` (integer, deprecated, optional): Legacy name: use `seated_infants`. The previous spelling of `seated_infants`: Infants under 2 with their own seat.
  - `childAges` (array, deprecated, optional): Legacy name: use `child_ages`. The previous spelling of `child_ages`: The age of each child.
  - `youngAdultAges` (array, deprecated, optional): Legacy name: use `young_adult_ages`. The previous spelling of `young_adult_ages`: The age of each young adult.
  - `seatedInfantAges` (array, deprecated, optional): Legacy name: use `seated_infant_ages`. The previous spelling of `seated_infant_ages`: The age of each seated infant.
  - `infantAges` (array, deprecated, optional): Legacy name: use `infant_ages`. The previous spelling of `infant_ages`: The age of each lap infant.
- `cabin_class` (string, optional): The 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`.
- `nonstop` (boolean, optional): `true` returns non-stop offers only.
- `refundable` (boolean, optional): `true` asks the supplier for refundable fares. A hint, not a guarantee.
- `checked_bags` (boolean, optional): `true` asks for fares with a checked bag included. Ignored by Duffel.
- `max_price` (number, optional): A 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_airlines` (object, optional): Up to 20 airline codes: only these carriers.
- `excluded_airlines` (object, optional): Up to 20 airline codes to remove.
- `preferred_airlines` (object, optional): Behaves exactly like `included_airlines`: a strict allow-list, not a ranking.
- `flexible` (boolean, optional): Also returns the date matrix (`flexPrices`) from the suppliers that support it.
- `flexible_only` (boolean, optional): The matrix without offers. `POST /flights/flexible_search` sends it for you.
- `from_cc` (string, optional): ISO country code of the origin: exactly two letters. Used to choose suppliers.
- `to_cc` (string, optional): ISO country code of the destination: exactly two letters. Used to choose suppliers.
- `countries` (array of string, optional): Up to 10 country codes of the route, to override the ones FX-Port infers. At most 10 items.
- `filters` (object, optional): The 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.
  - `included_airlines` (object, optional): Up to 20 airline codes: only these carriers.
  - `excluded_airlines` (object, optional): Up to 20 airline codes to remove.
  - `preferred_airlines` (object, optional): Behaves exactly like `included_airlines`: a strict allow-list, not a ranking.
  - `airlineInclude` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
  - `airline_include` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
  - `includeAirlines` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
  - `include_airlines` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
  - `includedAirlines` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
  - `include_airline` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
  - `included_airline` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
  - `airlineExclude` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
  - `airline_exclude` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
  - `excludeAirlines` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
  - `exclude_airlines` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
  - `excludedAirlines` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
  - `exclude_airline` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
  - `excluded_airline` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
  - `airlines` (object, deprecated, optional): Legacy name: use `preferred_airlines`. The previous spelling of `preferred_airlines`: Behaves exactly like `included_airlines`: a strict allow-list, not a ranking.
  - `preferredAirlines` (object, deprecated, optional): Legacy name: use `preferred_airlines`. The previous spelling of `preferred_airlines`: Behaves exactly like `included_airlines`: a strict allow-list, not a ranking.
- `supplier_id` (string, optional): Restrict the search to one supplier id (a comma separated list is accepted). Strict: an unknown or disabled id is `400 invalid_supplier_selection`.
- `supplier_ids` (array of string, optional): Restrict the search to this set. Strict, up to 10. At most 10 items.
- `preferred_suppliers` (array of string, optional): A hint: ids that are not usable are ignored and the automatic selection applies.
- `max_suppliers` (integer, optional): Keep 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_accounts` (array of object, optional): Up to 10 frequent-flyer accounts. At most 10 items.
  - `airline_iata_code` (string, required): IATA code of the airline of the programme.
  - `account_number` (string, required): The frequent-flyer number.
  - `first_name` (string, optional): Given name of the member, matched with the passenger at booking.
  - `last_name` (string, optional): Family name of the member.
  - `airlineIataCode` (string, deprecated, optional): Legacy name: use `airline_iata_code`. The previous spelling of `airline_iata_code`: IATA code of the airline of the programme.
  - `airline_code` (string, deprecated, optional): Legacy name: use `airline_iata_code`. The previous spelling of `airline_iata_code`: IATA code of the airline of the programme.
  - `airlineCode` (string, deprecated, optional): Legacy name: use `airline_iata_code`. The previous spelling of `airline_iata_code`: IATA code of the airline of the programme.
  - `programOwner` (string, deprecated, optional): Legacy name: use `airline_iata_code`. The previous spelling of `airline_iata_code`: IATA code of the airline of the programme.
  - `program_owner` (string, deprecated, optional): Legacy name: use `airline_iata_code`. The previous spelling of `airline_iata_code`: IATA code of the airline of the programme.
  - `accountNumber` (string, deprecated, optional): Legacy name: use `account_number`. The previous spelling of `account_number`: The frequent-flyer number.
  - `membershipNumber` (string, deprecated, optional): Legacy name: use `account_number`. The previous spelling of `account_number`: The frequent-flyer number.
  - `membership_number` (string, deprecated, optional): Legacy name: use `account_number`. The previous spelling of `account_number`: The frequent-flyer number.
  - `firstName` (string, deprecated, optional): Legacy name: use `first_name`. The previous spelling of `first_name`: Given name of the member, matched with the passenger at booking.
  - `givenName` (string, deprecated, optional): Legacy name: use `first_name`. The previous spelling of `first_name`: Given name of the member, matched with the passenger at booking.
  - `given_name` (string, deprecated, optional): Legacy name: use `first_name`. The previous spelling of `first_name`: Given name of the member, matched with the passenger at booking.
  - `lastName` (string, deprecated, optional): Legacy name: use `last_name`. The previous spelling of `last_name`: Family name of the member.
  - `familyName` (string, deprecated, optional): Legacy name: use `last_name`. The previous spelling of `last_name`: Family name of the member.
  - `family_name` (string, deprecated, optional): Legacy name: use `last_name`. The previous spelling of `last_name`: Family name of the member.
  - `surname` (string, deprecated, optional): Legacy name: use `last_name`. The previous spelling of `last_name`: Family name of the member.
- `acd_exempt_company_id` (string, optional): For agencies that settle in DZD and have an ACD-exempt company: its id, to price the fares without ACD.
- `agent_id` (string, optional): Your own id of the agent who searches; stored with the search and the booking.
- `agency_id` (string, optional): Not 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.
- `departureDate` (string, deprecated, optional): Legacy name: use `departure_date`. The previous spelling of `departure_date`: `YYYY-MM-DD`, a real date from yesterday up to 365 days ahead (`date_too_far` beyond).
- `returnDate` (string, deprecated, optional): Legacy name: use `return_date`. The previous spelling of `return_date`: Makes the search a round trip.
- `cabinClass` (string, deprecated, optional): Legacy name: use `cabin_class`. The previous spelling of `cabin_class`: The cabin.
- `travelers` (object, deprecated, optional): Legacy name: use `passengers`. The previous spelling of `passengers`: `passengers`.
- `direct` (boolean, deprecated, optional): Legacy name: use `nonstop`. The previous spelling of `nonstop`: `true` returns non-stop offers only.
- `checkedBags` (boolean, deprecated, optional): Legacy name: use `checked_bags`. The previous spelling of `checked_bags`: `true` asks for fares with a checked bag included.
- `maxPrice` (number, deprecated, optional): Legacy name: use `max_price`. The previous spelling of `max_price`: A price ceiling.
- `flexibleOnly` (boolean, deprecated, optional): Legacy name: use `flexible_only`. The previous spelling of `flexible_only`: The matrix without offers.
- `fromCc` (string, deprecated, optional): Legacy name: use `from_cc`. The previous spelling of `from_cc`: ISO country code of the origin: exactly two letters.
- `toCc` (string, deprecated, optional): Legacy name: use `to_cc`. The previous spelling of `to_cc`: ISO country code of the destination: exactly two letters.
- `supplierId` (string, deprecated, optional): Legacy name: use `supplier_id`. The previous spelling of `supplier_id`: Restrict the search to one supplier id (a comma separated list is accepted).
- `supplierIds` (array, deprecated, optional): Legacy name: use `supplier_ids`. The previous spelling of `supplier_ids`: Restrict the search to this set.
- `preferredSuppliers` (array, deprecated, optional): Legacy name: use `preferred_suppliers`. The previous spelling of `preferred_suppliers`: A hint: ids that are not usable are ignored and the automatic selection applies.
- `maxSuppliers` (integer, deprecated, optional): Legacy name: use `max_suppliers`. The previous spelling of `max_suppliers`: Keep only the first N selected suppliers, in priority order.
- `airlineInclude` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
- `airline_include` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
- `includeAirlines` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
- `include_airlines` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
- `includedAirlines` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
- `include_airline` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
- `included_airline` (object, deprecated, optional): Legacy name: use `included_airlines`. The previous spelling of `included_airlines`: Up to 20 airline codes: only these carriers.
- `airlineExclude` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
- `airline_exclude` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
- `excludeAirlines` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
- `exclude_airlines` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
- `excludedAirlines` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
- `exclude_airline` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
- `excluded_airline` (object, deprecated, optional): Legacy name: use `excluded_airlines`. The previous spelling of `excluded_airlines`: Up to 20 airline codes to remove.
- `airlines` (object, deprecated, optional): Legacy name: use `preferred_airlines`. The previous spelling of `preferred_airlines`: Behaves exactly like `included_airlines`: a strict allow-list, not a ranking.
- `preferredAirlines` (object, deprecated, optional): Legacy name: use `preferred_airlines`. The previous spelling of `preferred_airlines`: Behaves exactly like `included_airlines`: a strict allow-list, not a ranking.
- `agentId` (string, deprecated, optional): Legacy name: use `agent_id`. The previous spelling of `agent_id`: Your own id of the agent who searches; stored with the search and the booking.
- `acdExemptCompanyId` (string, deprecated, optional): Legacy name: use `acd_exempt_company_id`. 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.
- `loyaltyProgramAccounts` (array, deprecated, optional): Legacy name: use `loyalty_program_accounts`. The previous spelling of `loyalty_program_accounts`: Up to 10 frequent-flyer accounts.
- `agencyId` (string, deprecated, optional): Legacy name: use `agency_id`. The previous spelling of `agency_id`: Not needed: the agency of a call is always the one of your API key.

### Example request

```bash
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
  }
}'
```

## Response

### 200: The 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`.

- `environment` (string): The 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_id` (string): The id of the request, also in the `X-Request-Id` header.
- `warnings` (array of object): Present only when the request used a previous spelling of a field or something the endpoint ignored.
  - `code` (string): What the warning is about. One of `deprecated_field`, `ignored_field`, `coerced_value`, `deprecated_value`, `deprecated_endpoint`.
  - `field` (string): The request field the warning is about.
  - `replacement` (string): The name to use instead, for `deprecated_*` warnings.
  - `message` (string): A sentence that says what happened and what to do.
  - `documentation_url` (string): Where the naming rules are explained.
- `success` (boolean): `true` on every `200`, even if some suppliers failed: read `suppliers[n].success` and `failures`.
- `requestId` (string, deprecated): Legacy name: use `request_id`. The id of this search, 8 characters, for support.
- `searchType` (string, deprecated): Legacy name: use `search_type`. The type of the search, derived from your route. One of `ONE_WAY`, `ROUND_TRIP`, `OPEN_JAW`, `MULTI_CITY`.
- `search_type` (string): The 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`.
- `flexible` (boolean): Whether the date matrix was requested.
- `flexibleOnly` (boolean): Only present (and `true`) for a flexible-only search.
- `processingTime` (number, deprecated): Legacy name: use `processing_time`. Seconds spent by the whole search.
- `processing_time` (number): Seconds spent by the whole search. The snake_case twin of `processingTime`, with the same value: use this name.
- `suppliers` (array of object): One entry for each supplier that answered.
  - `success` (boolean): Whether this supplier returned usable results.
  - `searchId` (string, deprecated): Legacy name: use `search_id`. **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_id` (string): **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. The snake_case twin of `searchId`, with the same value: use this name.
  - `supportHold` (boolean, deprecated): Legacy name: use `support_hold`. What the supplier can do in general: hold. Read it again on the priced offer.
  - `support_hold` (boolean): What 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.
  - `supportVoid` (boolean, deprecated): Legacy name: use `support_void`. What the supplier can do in general: same-day void.
  - `support_void` (boolean): What the supplier can do in general: same-day void. The snake_case twin of `supportVoid`, with the same value: use this name.
  - `voidDeadline` (string, nullable, deprecated): Legacy name: use `void_deadline`. ISO 8601 UTC end of the same-day void window, `null` when the supplier cannot void.
  - `void_deadline` (string, nullable): ISO 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.
  - `filtersApplied` (object, deprecated): Legacy name: use `filters_applied`. The filters you asked for, echoed.
  - `filters_applied` (object): The filters you asked for, echoed. The snake_case twin of `filtersApplied`, with the same value: use this name.
  - `warnings` (array of object): Notes of the supplier.
  - `meta` (object): Who answered and how fast.
    - `supplierId` (string, deprecated): Legacy name: use `supplier_id`. Id of the supplier.
    - `supplier_id` (string): Id of the supplier. The snake_case twin of `supplierId`, with the same value: use this name.
    - `technologyType` (string): The technology of the supplier: `amadeus_aqc` or `duffel`.
    - `supplierName` (string, deprecated): Legacy name: use `supplier_name`. Name of the supplier.
    - `supplier_name` (string): Name of the supplier. The snake_case twin of `supplierName`, with the same value: use this name.
    - `processingTime` (number, deprecated): Legacy name: use `processing_time`. Seconds this supplier took.
    - `processing_time` (number): Seconds this supplier took. The snake_case twin of `processingTime`, with the same value: use this name.
    - `supplierCurrency` (string): Currency in which the supplier prices.
    - `agencyCurrency` (string): Currency of your agency.
  - `results` (object): The offers of one supplier.
    - `totalOffers` (integer): Number of offers of this result set. Always equals the length of `offers`: there is no pagination.
    - `supplierCurrency` (string): Currency in which the supplier prices.
    - `agencyCurrency` (string): Currency of your agency.
    - `offers` (array of FlightOffer): The offers, in the order the supplier ranks them.
  - `exchangeRate` (number, deprecated): Legacy name: use `exchange_rate`. Only when the supplier's currency is not your agency's (Duffel: USD to DZD, 250.0). Every amount is already converted.
  - `exchange_rate` (number): Only 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.
  - `flexPrices` (object): The 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.
    - `supplierCurrency` (string): Currency in which the supplier prices.
    - `agencyCurrency` (string): Currency of the prices of `matrix`.
    - `matrix` (array of object): One entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
      - `departure` (string): Candidate departure date, `YYYY-MM-DD`.
      - `return` (string): Candidate return date. Only for a round trip or an open-jaw.
      - `status` (string): `available` when the supplier has a fare for this date or pair. One of `available`, `no_flights_available`.
      - `finalPrice` (number, nullable, deprecated): Legacy name: use `final_price`. What the traveler pays, in `agencyCurrency`.
      - `final_price` (number, nullable): What the traveler pays, in `agencyCurrency`. The snake_case twin of `finalPrice`, with the same value: use this name.
      - `basePrice` (number, nullable, deprecated): Legacy name: use `base_price`. The airline's base fare.
      - `base_price` (number, nullable): The airline's base fare. The snake_case twin of `basePrice`, with the same value: use this name.
      - `taxesAndFees` (number, nullable, deprecated): Legacy name: use `taxes_and_fees`. Taxes and fees.
      - `taxes_and_fees` (number, nullable): Taxes and fees. The snake_case twin of `taxesAndFees`, with the same value: use this name.
      - `agencyCommission` (number, nullable, deprecated): Legacy name: use `agency_commission`. Your commission.
      - `agency_commission` (number, nullable): Your commission. The snake_case twin of `agencyCommission`, with the same value: use this name.
      - `b2bPrice` (number, nullable, deprecated): Legacy name: use `b2b_price`. The amount debited from your balance.
      - `b2b_price` (number, nullable): The amount debited from your balance. The snake_case twin of `b2bPrice`, with the same value: use this name.
      - `agencyCurrency` (string): Currency of the prices of the entry.
      - `flight` (object): The cheapest flight behind the price of a date.
        - `carrierCode` (string): IATA code of the marketing airline.
        - `flightNumber` (string): Flight number **with** the carrier code (`IB1378`), unlike the offers.
        - `operatingCarrier` (string): IATA code of the operating airline.
        - `validatingAirline` (string): IATA code of the validating airline, as a text (a list of objects in offers).
        - `duration` (string): ISO 8601 duration.
        - `stops` (integer): Number of stops.
        - `departureTime` (string): `HH:MM`.
        - `arrivalTime` (string): `HH:MM`.
        - `departureAirport` (string): IATA code.
        - `arrivalAirport` (string): IATA code.
        - `cabinClass` (string): Cabin of the fare.
        - `brandedFare` (string, nullable): Fare family code.
        - `brandedFareLabel` (string, nullable): Display label of the fare family.
        - `includedCheckedBags` (object): Checked baggage included.
          - `quantity` (integer): Number of checked bags included.
- `summary` (object): Counters of the search.
  - `totalSuppliers` (integer): The suppliers that answered (the same as `successfulSuppliers`). In the stream: the suppliers that were called.
  - `successfulSuppliers` (integer): Suppliers that returned results.
  - `failedSuppliers` (integer): Suppliers listed in `failures`.
  - `totalOffers` (integer): Offers of all the suppliers together.
- `failures` (array of object): Only when a supplier failed.
  - `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier that failed.
  - `supplier_id` (string): The supplier that failed. The snake_case twin of `supplierId`, with the same value: use this name.
  - `error` (string): A fixed sentence about the cause, never the supplier's own text.
  - `cause` (string): Why 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`.

```json
{
  "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
  }
}
```

## 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.

### `start`

First, at once (`id` 0). The request id, the suppliers that will answer, and `environment` as the first key.

- `environment` (string): `sandbox` or `live`. Only this event carries it, as its first key.
- `type` (string): Always `start`. Always `start`.
- `requestId` (string): The id of this search, 8 characters.
- `searchType` (string): The raw classification of the route: `ONE WAY`, `ROUNDTRIP`, `MULTIPLE CITY` or `OPEN`. Not the vocabulary of the JSON mode: read `search_type`.
- `search_type` (string): The type of the search in the vocabulary of the JSON mode. One of `ONE_WAY`, `ROUND_TRIP`, `OPEN_JAW`, `MULTI_CITY`.
- `flexible` (boolean): Whether the date matrix was requested.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.
- `expectedSuppliers` (array of string): The suppliers called for this search: the compatible ones.

```text
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.

- `type` (string): `supplier_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`.
- `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier.
- `supplier_id` (string): The supplier. The snake_case twin of `supplierId`, with the same value: use this name.
- `success` (boolean): Always `true` here.
- `data` (object): A result set: the answer of one supplier, or one later batch of it.
  - `success` (boolean): Whether this supplier returned usable results.
  - `requestId` (string, deprecated): Legacy name: use `request_id`. The id of this search.
  - `request_id` (string): The id of this search. The snake_case twin of `requestId`, with the same value: use this name.
  - `searchId` (string, deprecated): Legacy name: use `search_id`. The `searchId` of **this result set**. Price and book an offer with the `searchId` of the result set it arrived in.
  - `search_id` (string): The `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.
  - `searchType` (string, deprecated): Legacy name: use `search_type`. `ONE_WAY`, `ROUND_TRIP`, `OPEN_JAW` or `MULTI_CITY`.
  - `search_type` (string): `ONE_WAY`, `ROUND_TRIP`, `OPEN_JAW` or `MULTI_CITY`. The snake_case twin of `searchType`, with the same value: use this name.
  - `flexible` (boolean): Only when the search asked for the date matrix: `true`.
  - `flexibleOnly` (boolean): Only for a flexible-only search: `true`.
  - `processingTime` (number, deprecated): Legacy name: use `processing_time`. Seconds this supplier took.
  - `processing_time` (number): Seconds this supplier took. The snake_case twin of `processingTime`, with the same value: use this name.
  - `supplierCurrency` (string): Currency in which the supplier prices.
  - `agencyCurrency` (string): Currency of your agency.
  - `results` (object): The offers of a result set.
    - `totalOffers` (integer): The number of offers of **this result set**. For a chunked set it is the total of the chunks.
    - `supplierCurrency` (string): Currency in which the supplier prices.
    - `agencyCurrency` (string): Currency of your agency.
    - `offers` (array of FlightOffer): The offers: all of them for `supplier_result`; empty for `supplier_start`, whose offers follow in `offers_chunk` events.
    - `chunked` (boolean): Only on `supplier_start`: `true`.
    - `chunkSize` (integer): Only on `supplier_start`: offers in a chunk (50).
    - `totalChunks` (integer): Only on `supplier_start`: how many `offers_chunk` events follow.
  - `meta` (object): The supplier block of a result set of the stream.
    - `filtersApplied` (object, deprecated): Legacy name: use `filters_applied`. The filters you asked for, echoed.
    - `filters_applied` (object): The filters you asked for, echoed. The snake_case twin of `filtersApplied`, with the same value: use this name.
    - `warnings` (array of object): Notes of the supplier.
    - `supplierId` (string, deprecated): Legacy name: use `supplier_id`. Id of the supplier.
    - `supplier_id` (string): Id of the supplier. The snake_case twin of `supplierId`, with the same value: use this name.
    - `technologyType` (string): `amadeus_aqc` or `duffel`.
    - `supportHold` (boolean, deprecated): Legacy name: use `support_hold`. Whether the supplier can hold.
    - `support_hold` (boolean): Whether the supplier can hold. The snake_case twin of `supportHold`, with the same value: use this name.
    - `supportVoid` (boolean, deprecated): Legacy name: use `support_void`. Whether the supplier can void the same day.
    - `support_void` (boolean): Whether the supplier can void the same day. The snake_case twin of `supportVoid`, with the same value: use this name.
    - `voidDeadline` (string, nullable, deprecated): Legacy name: use `void_deadline`. End of the same-day void window.
    - `void_deadline` (string, nullable): End of the same-day void window. The snake_case twin of `voidDeadline`, with the same value: use this name.
  - `exchangeRate` (number, deprecated): Legacy name: use `exchange_rate`. Only when the supplier's currency is not your agency's.
  - `exchange_rate` (number): Only when the supplier's currency is not your agency's. The snake_case twin of `exchangeRate`, with the same value: use this name.
  - `flexPrices` (object): The 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.
    - `supplierCurrency` (string): Currency in which the supplier prices.
    - `agencyCurrency` (string): Currency of the prices of `matrix`.
    - `matrix` (array of object): One entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
      - `departure` (string): Candidate departure date, `YYYY-MM-DD`.
      - `return` (string): Candidate return date. Only for a round trip or an open-jaw.
      - `status` (string): `available` when the supplier has a fare for this date or pair. One of `available`, `no_flights_available`.
      - `finalPrice` (number, nullable, deprecated): Legacy name: use `final_price`. What the traveler pays, in `agencyCurrency`.
      - `final_price` (number, nullable): What the traveler pays, in `agencyCurrency`. The snake_case twin of `finalPrice`, with the same value: use this name.
      - `basePrice` (number, nullable, deprecated): Legacy name: use `base_price`. The airline's base fare.
      - `base_price` (number, nullable): The airline's base fare. The snake_case twin of `basePrice`, with the same value: use this name.
      - `taxesAndFees` (number, nullable, deprecated): Legacy name: use `taxes_and_fees`. Taxes and fees.
      - `taxes_and_fees` (number, nullable): Taxes and fees. The snake_case twin of `taxesAndFees`, with the same value: use this name.
      - `agencyCommission` (number, nullable, deprecated): Legacy name: use `agency_commission`. Your commission.
      - `agency_commission` (number, nullable): Your commission. The snake_case twin of `agencyCommission`, with the same value: use this name.
      - `b2bPrice` (number, nullable, deprecated): Legacy name: use `b2b_price`. The amount debited from your balance.
      - `b2b_price` (number, nullable): The amount debited from your balance. The snake_case twin of `b2bPrice`, with the same value: use this name.
      - `agencyCurrency` (string): Currency of the prices of the entry.
      - `flight` (object): The cheapest flight behind the price of a date.
        - `carrierCode` (string): IATA code of the marketing airline.
        - `flightNumber` (string): Flight number **with** the carrier code (`IB1378`), unlike the offers.
        - `operatingCarrier` (string): IATA code of the operating airline.
        - `validatingAirline` (string): IATA code of the validating airline, as a text (a list of objects in offers).
        - `duration` (string): ISO 8601 duration.
        - `stops` (integer): Number of stops.
        - `departureTime` (string): `HH:MM`.
        - `arrivalTime` (string): `HH:MM`.
        - `departureAirport` (string): IATA code.
        - `arrivalAirport` (string): IATA code.
        - `cabinClass` (string): Cabin of the fare.
        - `brandedFare` (string, nullable): Fare family code.
        - `brandedFareLabel` (string, nullable): Display label of the fare family.
        - `includedCheckedBags` (object): Checked baggage included.
          - `quantity` (integer): Number of checked bags included.
- `complete` (boolean): Only on `supplier_result`: `false` means that **another batch of this supplier follows**, under another `searchId`.
- `processingTime` (number, deprecated): Legacy name: use `processing_time`. Seconds this supplier took.
- `processing_time` (number): Seconds this supplier took. The snake_case twin of `processingTime`, with the same value: use this name.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.

```text
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.

- `type` (string): Always `offers_chunk`. Always `offers_chunk`.
- `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier. Add the offers to the result set opened by the last `supplier_start` of this supplier.
- `supplier_id` (string): The 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.
- `chunkNumber` (integer): The number of this chunk, from 1.
- `totalChunks` (integer): How many chunks the result set has.
- `offersInChunk` (integer): Offers in this chunk (50 at most).
- `offers` (array of FlightOffer): The offers of this chunk.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.

```text
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.

- `type` (string): Always `flex_prices`. Always `flex_prices`.
- `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier.
- `supplier_id` (string): The supplier. The snake_case twin of `supplierId`, with the same value: use this name.
- `flexPrices` (object): The 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.
  - `supplierCurrency` (string): Currency in which the supplier prices.
  - `agencyCurrency` (string): Currency of the prices of `matrix`.
  - `matrix` (array of object): One entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
    - `departure` (string): Candidate departure date, `YYYY-MM-DD`.
    - `return` (string): Candidate return date. Only for a round trip or an open-jaw.
    - `status` (string): `available` when the supplier has a fare for this date or pair. One of `available`, `no_flights_available`.
    - `finalPrice` (number, nullable, deprecated): Legacy name: use `final_price`. What the traveler pays, in `agencyCurrency`.
    - `final_price` (number, nullable): What the traveler pays, in `agencyCurrency`. The snake_case twin of `finalPrice`, with the same value: use this name.
    - `basePrice` (number, nullable, deprecated): Legacy name: use `base_price`. The airline's base fare.
    - `base_price` (number, nullable): The airline's base fare. The snake_case twin of `basePrice`, with the same value: use this name.
    - `taxesAndFees` (number, nullable, deprecated): Legacy name: use `taxes_and_fees`. Taxes and fees.
    - `taxes_and_fees` (number, nullable): Taxes and fees. The snake_case twin of `taxesAndFees`, with the same value: use this name.
    - `agencyCommission` (number, nullable, deprecated): Legacy name: use `agency_commission`. Your commission.
    - `agency_commission` (number, nullable): Your commission. The snake_case twin of `agencyCommission`, with the same value: use this name.
    - `b2bPrice` (number, nullable, deprecated): Legacy name: use `b2b_price`. The amount debited from your balance.
    - `b2b_price` (number, nullable): The amount debited from your balance. The snake_case twin of `b2bPrice`, with the same value: use this name.
    - `agencyCurrency` (string): Currency of the prices of the entry.
    - `flight` (object): The cheapest flight behind the price of a date.
      - `carrierCode` (string): IATA code of the marketing airline.
      - `flightNumber` (string): Flight number **with** the carrier code (`IB1378`), unlike the offers.
      - `operatingCarrier` (string): IATA code of the operating airline.
      - `validatingAirline` (string): IATA code of the validating airline, as a text (a list of objects in offers).
      - `duration` (string): ISO 8601 duration.
      - `stops` (integer): Number of stops.
      - `departureTime` (string): `HH:MM`.
      - `arrivalTime` (string): `HH:MM`.
      - `departureAirport` (string): IATA code.
      - `arrivalAirport` (string): IATA code.
      - `cabinClass` (string): Cabin of the fare.
      - `brandedFare` (string, nullable): Fare family code.
      - `brandedFareLabel` (string, nullable): Display label of the fare family.
      - `includedCheckedBags` (object): Checked baggage included.
        - `quantity` (integer): Number of checked bags included.
- `count` (integer): Entries of the matrix.
- `timestamp` (string): ISO 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.

- `type` (string): Always `supplier_complete`. Always `supplier_complete`.
- `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier.
- `supplier_id` (string): The supplier. The snake_case twin of `supplierId`, with the same value: use this name.
- `totalOffers` (integer): Offers of **that result set**. The total of the search is in `summary`.
- `hasFlexPrices` (boolean): Whether the result set carries a date matrix.
- `flexPricesCount` (integer): Entries of the matrix.
- `complete` (boolean): `false`: another batch of this supplier follows.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.

```text
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.

- `type` (string): `supplier_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`.
- `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier.
- `supplier_id` (string): The supplier. The snake_case twin of `supplierId`, with the same value: use this name.
- `success` (boolean): Always `true` here.
- `data` (object): A result set: the answer of one supplier, or one later batch of it.
  - `success` (boolean): Whether this supplier returned usable results.
  - `requestId` (string, deprecated): Legacy name: use `request_id`. The id of this search.
  - `request_id` (string): The id of this search. The snake_case twin of `requestId`, with the same value: use this name.
  - `searchId` (string, deprecated): Legacy name: use `search_id`. The `searchId` of **this result set**. Price and book an offer with the `searchId` of the result set it arrived in.
  - `search_id` (string): The `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.
  - `searchType` (string, deprecated): Legacy name: use `search_type`. `ONE_WAY`, `ROUND_TRIP`, `OPEN_JAW` or `MULTI_CITY`.
  - `search_type` (string): `ONE_WAY`, `ROUND_TRIP`, `OPEN_JAW` or `MULTI_CITY`. The snake_case twin of `searchType`, with the same value: use this name.
  - `flexible` (boolean): Only when the search asked for the date matrix: `true`.
  - `flexibleOnly` (boolean): Only for a flexible-only search: `true`.
  - `processingTime` (number, deprecated): Legacy name: use `processing_time`. Seconds this supplier took.
  - `processing_time` (number): Seconds this supplier took. The snake_case twin of `processingTime`, with the same value: use this name.
  - `supplierCurrency` (string): Currency in which the supplier prices.
  - `agencyCurrency` (string): Currency of your agency.
  - `results` (object): The offers of a result set.
    - `totalOffers` (integer): The number of offers of **this result set**. For a chunked set it is the total of the chunks.
    - `supplierCurrency` (string): Currency in which the supplier prices.
    - `agencyCurrency` (string): Currency of your agency.
    - `offers` (array of FlightOffer): The offers: all of them for `supplier_result`; empty for `supplier_start`, whose offers follow in `offers_chunk` events.
    - `chunked` (boolean): Only on `supplier_start`: `true`.
    - `chunkSize` (integer): Only on `supplier_start`: offers in a chunk (50).
    - `totalChunks` (integer): Only on `supplier_start`: how many `offers_chunk` events follow.
  - `meta` (object): The supplier block of a result set of the stream.
    - `filtersApplied` (object, deprecated): Legacy name: use `filters_applied`. The filters you asked for, echoed.
    - `filters_applied` (object): The filters you asked for, echoed. The snake_case twin of `filtersApplied`, with the same value: use this name.
    - `warnings` (array of object): Notes of the supplier.
    - `supplierId` (string, deprecated): Legacy name: use `supplier_id`. Id of the supplier.
    - `supplier_id` (string): Id of the supplier. The snake_case twin of `supplierId`, with the same value: use this name.
    - `technologyType` (string): `amadeus_aqc` or `duffel`.
    - `supportHold` (boolean, deprecated): Legacy name: use `support_hold`. Whether the supplier can hold.
    - `support_hold` (boolean): Whether the supplier can hold. The snake_case twin of `supportHold`, with the same value: use this name.
    - `supportVoid` (boolean, deprecated): Legacy name: use `support_void`. Whether the supplier can void the same day.
    - `support_void` (boolean): Whether the supplier can void the same day. The snake_case twin of `supportVoid`, with the same value: use this name.
    - `voidDeadline` (string, nullable, deprecated): Legacy name: use `void_deadline`. End of the same-day void window.
    - `void_deadline` (string, nullable): End of the same-day void window. The snake_case twin of `voidDeadline`, with the same value: use this name.
  - `exchangeRate` (number, deprecated): Legacy name: use `exchange_rate`. Only when the supplier's currency is not your agency's.
  - `exchange_rate` (number): Only when the supplier's currency is not your agency's. The snake_case twin of `exchangeRate`, with the same value: use this name.
  - `flexPrices` (object): The 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.
    - `supplierCurrency` (string): Currency in which the supplier prices.
    - `agencyCurrency` (string): Currency of the prices of `matrix`.
    - `matrix` (array of object): One entry for each date (one-way: 7 dates) or date pair (round trip, open-jaw: up to 49).
      - `departure` (string): Candidate departure date, `YYYY-MM-DD`.
      - `return` (string): Candidate return date. Only for a round trip or an open-jaw.
      - `status` (string): `available` when the supplier has a fare for this date or pair. One of `available`, `no_flights_available`.
      - `finalPrice` (number, nullable, deprecated): Legacy name: use `final_price`. What the traveler pays, in `agencyCurrency`.
      - `final_price` (number, nullable): What the traveler pays, in `agencyCurrency`. The snake_case twin of `finalPrice`, with the same value: use this name.
      - `basePrice` (number, nullable, deprecated): Legacy name: use `base_price`. The airline's base fare.
      - `base_price` (number, nullable): The airline's base fare. The snake_case twin of `basePrice`, with the same value: use this name.
      - `taxesAndFees` (number, nullable, deprecated): Legacy name: use `taxes_and_fees`. Taxes and fees.
      - `taxes_and_fees` (number, nullable): Taxes and fees. The snake_case twin of `taxesAndFees`, with the same value: use this name.
      - `agencyCommission` (number, nullable, deprecated): Legacy name: use `agency_commission`. Your commission.
      - `agency_commission` (number, nullable): Your commission. The snake_case twin of `agencyCommission`, with the same value: use this name.
      - `b2bPrice` (number, nullable, deprecated): Legacy name: use `b2b_price`. The amount debited from your balance.
      - `b2b_price` (number, nullable): The amount debited from your balance. The snake_case twin of `b2bPrice`, with the same value: use this name.
      - `agencyCurrency` (string): Currency of the prices of the entry.
      - `flight` (object): The cheapest flight behind the price of a date.
        - `carrierCode` (string): IATA code of the marketing airline.
        - `flightNumber` (string): Flight number **with** the carrier code (`IB1378`), unlike the offers.
        - `operatingCarrier` (string): IATA code of the operating airline.
        - `validatingAirline` (string): IATA code of the validating airline, as a text (a list of objects in offers).
        - `duration` (string): ISO 8601 duration.
        - `stops` (integer): Number of stops.
        - `departureTime` (string): `HH:MM`.
        - `arrivalTime` (string): `HH:MM`.
        - `departureAirport` (string): IATA code.
        - `arrivalAirport` (string): IATA code.
        - `cabinClass` (string): Cabin of the fare.
        - `brandedFare` (string, nullable): Fare family code.
        - `brandedFareLabel` (string, nullable): Display label of the fare family.
        - `includedCheckedBags` (object): Checked baggage included.
          - `quantity` (integer): Number of checked bags included.
- `complete` (boolean): Only on `supplier_result`: `false` means that **another batch of this supplier follows**, under another `searchId`.
- `processingTime` (number, deprecated): Legacy name: use `processing_time`. Seconds this supplier took.
- `processing_time` (number): Seconds this supplier took. The snake_case twin of `processingTime`, with the same value: use this name.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.

```text
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.

- `type` (string): Always `error`. Always `error`.
- `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier that failed.
- `supplier_id` (string): The supplier that failed. The snake_case twin of `supplierId`, with the same value: use this name.
- `success` (boolean): Always `false`.
- `error` (string): A fixed sentence about the cause, never the supplier's own text.
- `cause` (string): Why 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`.
- `processingTime` (number): Seconds spent.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.

```text
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.

- `type` (string): Always `summary`. Always `summary`.
- `requestId` (string): The id of this search.
- `success` (boolean): `true` when at least one supplier returned offers.
- `processingTime` (number): Seconds the whole search took.
- `summary` (object): The counters of the search. (In the same event `successfulSuppliers` is a list next to this object.)
  - `totalSuppliers` (integer): The suppliers that were called.
  - `successfulSuppliers` (integer): Suppliers that returned offers.
  - `failedSuppliers` (integer): Suppliers that failed.
  - `totalOffers` (integer): Offers of all result sets together.
- `successfulSuppliers` (array of object): The suppliers that returned offers.
  - `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier.
  - `supplier_id` (string): The supplier. The snake_case twin of `supplierId`, with the same value: use this name.
  - `offersCount` (integer): Its offers.
  - `processingTime` (number): Seconds it took.
- `failures` (array of object, nullable): The suppliers that failed: `null` when none did.
  - `supplierId` (string, deprecated): Legacy name: use `supplier_id`. The supplier.
  - `supplier_id` (string): The supplier. The snake_case twin of `supplierId`, with the same value: use this name.
  - `error` (string): A fixed sentence about the cause.
  - `cause` (string): The stable cause.
- `truncated` (boolean): Only 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`.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.

```text
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.

- `type` (string): Always `done`. Always `done`.
- `requestId` (string): The id of this search.
- `timestamp` (string): ISO 8601 UTC time of the event, without a `Z`: `2026-11-01T15:22:59.175148`.

```text
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. |

See [Errors](https://fx-port.com/docs/errors.md) for every code and how to react.

## Related guides

- [Search flights](https://fx-port.com/docs/flights/search.md)
- [Streaming search results](https://fx-port.com/docs/streaming.md)
- [Flight passengers & ages](https://fx-port.com/docs/flights/passengers.md)
- [Filters](https://fx-port.com/docs/flights/search/filters.md)
- [Supplier selection](https://fx-port.com/docs/flights/search/suppliers.md)
- [Open-jaw and multi-city](https://fx-port.com/docs/flights/search/complex-itineraries.md)
