# Search flexible dates

> Get a price calendar instead of offers: the cheapest fare of each day from three days before to three days after your travel dates.

Endpoint: `POST /flights/flexible_search`

Source: https://fx-port.com/docs/api/flexible-search

`POST /api/v1/flights/flexible_search`

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

The body is the one of `get_flights`; `flexible` and `flexible_only` are set for you. A one-way search returns 7 dates, a round trip or an open-jaw up to 49 date pairs (7 by 7). Each supplier entry has `flexPrices.matrix[]` and no `results`; `summary.totalOffers` is `0` and `flexibleOnly` is `true`. An entry has no offer id: to book a date, search for that exact date, then price and book as usual. The price of the matrix is an indication.

Only suppliers with the flexible-dates capability are called: today Amadeus Algeria (`amadeus_aqc_dz_1`, routes that touch Algeria). Duffel is skipped, and `supplier_id: "duffel_1"` is a `400 invalid_supplier_selection`. A route nobody serves is `422 no_supplier_supports_flexible_search`. To get the offers and the matrix together, send `flexible: true` to `get_flights`. Identical flexible 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.

## Request

### 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/flights/flexible_search \
  -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 date matrix of each flexible-capable supplier. Check that `flexPrices` is present before you read it; entries with `status: no_flights_available` are expected.

- `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": "9c844468",
  "searchType": "ONE_WAY",
  "flexible": true,
  "processingTime": 4.092,
  "suppliers": [
    {
      "success": true,
      "searchId": "fs_4f72482f-0d24-4aba-882d-d4eb49f6d034",
      "supportHold": true,
      "supportVoid": true,
      "voidDeadline": "2026-11-01T23:00:00Z",
      "filtersApplied": {
        "flexible": true,
        "flexibleOnly": true
      },
      "warnings": [],
      "meta": {
        "supplierId": "amadeus_aqc_dz_1",
        "technologyType": "amadeus_aqc",
        "supplierName": "Amadeus Algeria",
        "processingTime": 4.029,
        "supplierCurrency": "DZD",
        "agencyCurrency": "DZD"
      },
      "flexPrices": {
        "supplierCurrency": "DZD",
        "agencyCurrency": "DZD",
        "matrix": [
          {
            "departure": "2026-12-12",
            "status": "available",
            "finalPrice": 26925.47,
            "basePrice": 18360,
            "taxesAndFees": 8538.57,
            "agencyCommission": 26.9,
            "flight": {
              "carrierCode": "IB",
              "flightNumber": "IB1378",
              "operatingCarrier": "IB",
              "validatingAirline": "IB",
              "duration": "PT9H45M",
              "stops": 1,
              "departureTime": "14:05",
              "arrivalTime": "23:50",
              "departureAirport": "ALG",
              "arrivalAirport": "CDG",
              "cabinClass": "ECONOMY",
              "brandedFare": null,
              "brandedFareLabel": null,
              "includedCheckedBags": {
                "quantity": 1
              }
            },
            "b2bPrice": 26898.57,
            "agencyCurrency": "DZD"
          },
          {
            "departure": "2026-12-13",
            "status": "available",
            "finalPrice": 29638.41,
            "basePrice": 11810,
            "taxesAndFees": 17798.8,
            "agencyCommission": 29.61,
            "flight": {
              "carrierCode": "AZ",
              "flightNumber": "AZ801",
              "operatingCarrier": "AZ",
              "validatingAirline": "AZ",
              "duration": "PT5H10M",
              "stops": 1,
              "departureTime": "12:15",
              "arrivalTime": "17:25",
              "departureAirport": "ALG",
              "arrivalAirport": "CDG",
              "cabinClass": "ECONOMY",
              "brandedFare": null,
              "brandedFareLabel": null,
              "includedCheckedBags": {
                "quantity": 1
              }
            },
            "b2bPrice": 29608.8,
            "agencyCurrency": "DZD"
          }
        ]
      }
    }
  ],
  "flexibleOnly": true,
  "summary": {
    "totalSuppliers": 1,
    "successfulSuppliers": 1,
    "failedSuppliers": 0,
    "totalOffers": 0
  }
}
```

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

- [Flexible-date search](https://fx-port.com/docs/flights/flexible-search.md)
- [Search flights](https://fx-port.com/docs/flights/search.md)
