# The Flight offer object

> One bookable flight offer of one supplier: the route, the price, the fare rules and the price of every traveler.

Source: https://fx-port.com/docs/api/objects/flight-offer

`get_flights` returns offers under `suppliers[n].results.offers[]` (and in the `supplier_result` and `offers_chunk` events of the stream); `price_flight` returns the priced version under `results.offers[]`. Keep the `id` of the offer together with the `searchId` of the supplier entry it is in: `price_flight` and `book_flight` need the pair, and an offer can only be priced with the `searchId` of its own supplier entry. An offer is a snapshot that expires: a supplier withdraws it after a short while (a Duffel offer lives 15 to 60 minutes), and `price_flight` is the call that confirms it and makes it bookable. Every amount is in your agency currency; the fields of the price block are explained in Flight pricing. See Search flights.

## Attributes

- `id` (string, deprecated): Legacy name: use `offer_id`. The id of the offer: `fx_offer_` and 8 hex characters. Send it as `offer_id` to `price_flight` and `book_flight`.
- `offer_id` (string): The id of the offer: `fx_offer_` and 8 hex characters. Send it as `offer_id` to `price_flight` and `book_flight`. The snake_case twin of `id`, with the same value: use this name.
- `type` (string): Always `flight_offer`. Always `flight_offer`.
- `supplier` (object): The supplier the offer comes from.
  - `id` (string, deprecated): Legacy name: use `supplier_id`. Id of the supplier: `amadeus_aqc_dz_1` or `duffel_1` in the sandbox.
  - `supplier_id` (string): Id of the supplier: `amadeus_aqc_dz_1` or `duffel_1` in the sandbox. The snake_case twin of `id`, with the same value: use this name.
  - `name` (string, deprecated): Legacy name: use `supplier_name`. Name of the supplier.
  - `supplier_name` (string): Name of the supplier. The snake_case twin of `name`, with the same value: use this name.
  - `originalId` (string, deprecated): Legacy name: use `supplier_offer_id`. The supplier's own id of the offer. For support only.
  - `supplier_offer_id` (string): The supplier's own id of the offer. For support only. The snake_case twin of `originalId`, with the same value: use this name.
- `source` (string): Priced offer only: where the offer comes from, `duffel` or `GDS`.
- `bookableSeats` (integer, nullable): Seats left at this fare, when the supplier says (Amadeus: up to 9).
- `supportHold` (boolean, deprecated): Legacy name: use `support_hold`. `true` when the offer can be held (booked without payment) with `booking_type: "hold"`. Read it again on the priced offer.
- `support_hold` (boolean): `true` when the offer can be held (booked without payment) with `booking_type: "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`. `true` when the ticket can be voided during the same day.
- `support_void` (boolean): `true` when the ticket can be voided during 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`. ISO 8601 UTC time when the same-day void window ends, `null` when the supplier cannot void.
- `void_deadline` (string, nullable): ISO 8601 UTC time when the same-day void window ends, `null` when the supplier cannot void. The snake_case twin of `voidDeadline`, with the same value: use this name.
- `filtersApplied` (object): The filters you asked for, echoed. It says what you asked for, not what the supplier honoured.
- `warnings` (array of object): Notes of the supplier about this offer. Empty in every sample.
- `instantTicketingRequired` (boolean): `true`: the fare cannot be held; book it with `booking_type: "issue"`.
- `lastTicketingDate` (string): Duffel only: the day the offer stops being sellable.
- `lastTicketingDateTime` (string): Duffel only: the moment the offer stops being sellable. Typically 15 to 60 minutes after the search.
- `pricing` (object): The agency-facing price of an offer, a booking or a quote. Every amount is in `agencyCurrency`; the rate, when the currencies differ, is `exchangeRate` at the top level of the response.
  - `supplierCurrency` (string): ISO 4217 currency in which the supplier prices the fare.
  - `agencyCurrency` (string): ISO 4217 currency of your agency. Every amount of the block is in it.
  - `basePrice` (number, deprecated): Legacy name: use `base_price`. The airline's base fare, before taxes, in the agency currency.
  - `base_price` (number): The airline's base fare, before taxes, in the agency currency. The snake_case twin of `basePrice`, with the same value: use this name.
  - `taxesAndFees` (number, deprecated): Legacy name: use `taxes_and_fees`. Taxes plus the platform's fees, folded together. Excludes your agency commission.
  - `taxes_and_fees` (number): Taxes plus the platform's fees, folded together. Excludes your agency commission. The snake_case twin of `taxesAndFees`, with the same value: use this name.
  - `agencyCommission` (number, deprecated): Legacy name: use `agency_commission`. The commission of your agency on this sale.
  - `agency_commission` (number): The commission of your agency on this sale. The snake_case twin of `agencyCommission`, with the same value: use this name.
  - `finalPrice` (number, deprecated): Legacy name: use `final_price`. What the traveler pays: `basePrice + taxesAndFees + agencyCommission`.
  - `final_price` (number): What the traveler pays: `basePrice + taxesAndFees + agencyCommission`. The snake_case twin of `finalPrice`, with the same value: use this name.
  - `b2bPrice` (number, deprecated): Legacy name: use `b2b_price`. The amount debited from your agency balance: `finalPrice - agencyCommission`.
  - `b2b_price` (number): The amount debited from your agency balance: `finalPrice - agencyCommission`. The snake_case twin of `b2bPrice`, with the same value: use this name.
  - `totalAmount` (number): Order quote only: an alias of `b2bPrice`.
  - `taxAmount` (number): Order quote of a Duffel order only: the airline's taxes in your agency currency.
  - `originalTaxAmount` (number): Order quote of a Duffel order only: the same taxes in the supplier currency.
  - `additionalServices` (array of object): Paid extras. A list in the offers of a search (empty for most offers).
  - `acd` (object): Whether the fare is an ACD fare. Present on the offers of Amadeus Algeria, absent on Duffel offers. An ACD fare carries more keys with the amounts of the adjustment: they are informational, can change without notice and are not part of the contract.
    - `applied` (boolean): `true` for an ACD fare: the booking needs one passport copy for every traveler, sent with `upload_acd_documents`. `false` for an ordinary fare.
    - `scenario` (string): Only on an ACD fare: the rule that adjusted the price. Informational. One of `A`, `B`.
    - `exempt` (boolean): `true` when the search named an ACD-exempt company of your agency: the fare is priced without ACD.
    - `reason` (string): Only on some ACD fares: why the rule applied. Informational; the wording can change.
- `itinerary` (array of object): One entry for each direction.
  - `direction` (string): `outbound`, `return`, and `segment_3`, `segment_4` ... for the third and later legs of a multi-city search.
  - `duration` (string): ISO 8601 duration of this direction.
  - `stops` (integer): Number of stops. `0` is non-stop.
  - `segments` (array of object): The flights of this direction, in order.
    - `id` (string): Id of the segment. `fareDetailsBySegment[].segmentId` points to it.
    - `departure` (object): Where and when a segment leaves or arrives.
      - `airportCode` (string): IATA code of the airport.
      - `airportName` (string): Name of the airport.
      - `cityName` (string): Name of the city.
      - `countryCode` (string): ISO 3166-1 alpha-2 country code.
      - `terminal` (string, nullable): Terminal, when the supplier says.
      - `datetime` (string): Local date and time at the airport, `YYYY-MM-DDTHH:MM:SS`, without a time zone.
      - `timeZone` (string): IANA time zone of the airport.
    - `arrival` (object): Where and when a segment leaves or arrives.
      - `airportCode` (string): IATA code of the airport.
      - `airportName` (string): Name of the airport.
      - `cityName` (string): Name of the city.
      - `countryCode` (string): ISO 3166-1 alpha-2 country code.
      - `terminal` (string, nullable): Terminal, when the supplier says.
      - `datetime` (string): Local date and time at the airport, `YYYY-MM-DDTHH:MM:SS`, without a time zone.
      - `timeZone` (string): IANA time zone of the airport.
    - `flight` (object): The airline and the number of a flight.
      - `carrierCode` (string): IATA code of the marketing airline.
      - `carrierName` (string): Name of the marketing airline.
      - `carrierLogoUrl` (string): Address of the logo of the marketing airline.
      - `flightNumber` (string): The flight number without the carrier code.
      - `aircraftCode` (string, nullable): IATA code of the aircraft type.
      - `aircraftName` (string, nullable): Name of the aircraft type.
      - `operatingCarrier` (string): IATA code of the airline that operates the flight. A different value than `carrierCode` means a codeshare.
      - `operatingCarrierName` (string): Name of the operating airline.
    - `duration` (string): ISO 8601 duration of the flight.
    - `cabin` (string): The cabin of this segment. It can differ from the cabin you asked for. One of `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`.
    - `bookingClass` (string, nullable): Booking class letter (Amadeus: `Q`, `O`; Duffel: null).
    - `fareBasis` (string, nullable): Fare basis code.
    - `brandedFare` (string, nullable): Fare family code.
    - `brandedFareLabel` (string, nullable): Display label of the fare family.
  - `conditions` (object): What the fare allows before departure. Indicative only. A Duffel order can carry `null` for both when the airline does not say.
    - `refundBeforeDeparture` (object, nullable): What the fare says about a refund before departure.
      - `allowed` (boolean): Whether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
    - `changeBeforeDeparture` (object, nullable): What the fare says about a change before departure.
      - `allowed` (boolean): Whether a change is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
- `travelerPricing` (array of object): One entry for each priced traveler.
  - `travelerId` (string, deprecated): Legacy name: use `passenger_id`. `"1"`, `"2"` ... for Amadeus, `pas_...` for Duffel.
  - `passenger_id` (string): `"1"`, `"2"` ... for Amadeus, `pas_...` for Duffel. The snake_case twin of `travelerId`, with the same value: use this name.
  - `travelerType` (string, deprecated): Legacy name: use `passenger_type`. `ADULT`, `SENIOR`, `YOUNG`, `CHILD`, `SEATED_INFANT` or `HELD_INFANT` (a lap infant).
  - `passenger_type` (string): `ADULT`, `SENIOR`, `YOUNG`, `CHILD`, `SEATED_INFANT` or `HELD_INFANT` (a lap infant). The snake_case twin of `travelerType`, with the same value: use this name.
  - `fareOption` (string): The fare option, for example `STANDARD`.
  - `price` (object): The price of one traveler.
    - `supplierCurrency` (string): ISO 4217 currency in which the supplier prices the fare.
    - `agencyCurrency` (string): ISO 4217 currency of your agency.
    - `base` (number): The traveler's base fare in the agency currency.
    - `total` (number): The traveler's final price: what this traveler pays. The totals of all travelers add up to `pricing.finalPrice`.
    - `b2bPrice` (number): The traveler's share of the amount debited from your balance.
  - `fareDetailsBySegment` (array of object): The fare of this traveler on every segment.
    - `segmentId` (string): The `id` of the segment this fare detail is about.
    - `cabin` (string): Cabin of the fare on this segment. One of `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`.
    - `fareBasis` (string, nullable): Fare basis code.
    - `brandedFare` (string, nullable): Fare family code.
    - `brandedFareLabel` (string, nullable): Display label of the fare family.
    - `bookingClass` (string, nullable): Booking class letter.
    - `includedCheckedBags` (object): The checked baggage included in the fare.
      - `quantity` (integer): Number of checked bags included in the fare.
    - `includedCabinBags` (object): The cabin baggage included in the fare.
      - `quantity` (integer): Number of cabin bags included in the fare.
    - `amenities` (array of object): What else the fare includes or sells (seat, bag, meal, Wi-Fi ...).
- `conditions` (object): What the fare allows before departure. Indicative only. A Duffel order can carry `null` for both when the airline does not say.
  - `refundBeforeDeparture` (object, nullable): What the fare says about a refund before departure.
    - `allowed` (boolean): Whether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
  - `changeBeforeDeparture` (object, nullable): What the fare says about a change before departure.
    - `allowed` (boolean): Whether a change is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
- `fareRules` (object): The fare rules of the offer: what exchange, refund and revalidation allow.
  - `exchange` (object): What the fare says about an exchange before departure.
    - `allowed` (boolean): Whether an exchange is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
  - `refund` (object): What the fare says about a refund before departure.
    - `allowed` (boolean): Whether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
  - `revalidation` (object): What the fare says about a revalidation before departure.
    - `allowed` (boolean): Whether a revalidation is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
  - `supplierCurrency` (string): Currency of the penalty amounts, when there are some.
  - `agencyCurrency` (string): Currency of your agency.
- `validatingAirline` (array of object): The airline whose rules and ticket stock govern the fare.
  - `code` (string): IATA code of the airline.
  - `name` (string): Name of the airline.
- `additionalServices` (object): Paid extras. A list in the offers of a search (Amadeus only); an object with a `baggage` list in a priced offer.
- `requiresACD` (boolean): Amadeus Algeria only, present only when `true`: the fare is an ACD fare and the booking needs passports (see `upload_acd_documents`).

## Example

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