Skip to content
FX-Port/Docs
GuidesAPI referenceChangelog
Get API keys
  • Overview
  • Error object

Search and price

  • Search flightsPOST
  • Flexible datesPOST
  • Price an offerPOST
  • Airport autocompleteGET
  • Most searched airportsGET

Book, pay and cancel

  • Book an offerPOST
  • Quote a held orderPOST
  • Pay a held orderPOST
  • Cancel a held orderPOST

After booking

  • Get a bookingPOST
  • Ticket PDFPOST
  • Ticket numberPOST
  • Quote a refundPOST
  • Confirm a cancellationPOST

ACD documents

  • Get the document statePOST
  • Upload passportsPOST

Objects

  • Flight offer
  • Flight booking

Flights ยท Objects

The Flight offer object

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

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.

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

Attributes

idstringdeprecated

Legacy name, still accepted. Use offer_id instead.

The id of the offer: fx_offer_ and 8 hex characters. Send it as offer_id to price_flight and book_flight.

offer_idstring

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.

typestring

Always flight_offer.

Always flight_offer.

supplierobject

The supplier the offer comes from.

ShowHide 6 attributes
idstringdeprecated

Legacy name, still accepted. Use supplier_id instead.

Id of the supplier: amadeus_aqc_dz_1 or duffel_1 in the sandbox.

supplier_idstring

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.

namestringdeprecated

Legacy name, still accepted. Use supplier_name instead.

Name of the supplier.

supplier_namestring

Name of the supplier. The snake_case twin of name, with the same value: use this name.

originalIdstringdeprecated

Legacy name, still accepted. Use supplier_offer_id instead.

The supplier's own id of the offer. For support only.

supplier_offer_idstring

The supplier's own id of the offer. For support only. The snake_case twin of originalId, with the same value: use this name.

sourcestring

Priced offer only: where the offer comes from, duffel or GDS.

bookableSeatsintegernullable

Seats left at this fare, when the supplier says (Amadeus: up to 9).

supportHoldbooleandeprecated

Legacy name, still accepted. Use support_hold instead.

true when the offer can be held (booked without payment) with booking_type: "hold". Read it again on the priced offer.

support_holdboolean

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.

supportVoidbooleandeprecated

Legacy name, still accepted. Use support_void instead.

true when the ticket can be voided during the same day.

support_voidboolean

true when the ticket can be voided during the same day. The snake_case twin of supportVoid, with the same value: use this name.

voidDeadlinestringnullabledeprecated

Legacy name, still accepted. Use void_deadline instead.

ISO 8601 UTC time when the same-day void window ends, null when the supplier cannot void.

void_deadlinestringnullable

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.

filtersAppliedobject

The filters you asked for, echoed. It says what you asked for, not what the supplier honoured.

warningsarray of object

Notes of the supplier about this offer. Empty in every sample.

instantTicketingRequiredboolean

true: the fare cannot be held; book it with booking_type: "issue".

lastTicketingDatestring

Duffel only: the day the offer stops being sellable.

lastTicketingDateTimestring

Duffel only: the moment the offer stops being sellable. Typically 15 to 60 minutes after the search.

pricingobject

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.

ShowHide 17 attributes
supplierCurrencystring

ISO 4217 currency in which the supplier prices the fare.

agencyCurrencystring

ISO 4217 currency of your agency. Every amount of the block is in it.

basePricenumberdeprecated

Legacy name, still accepted. Use base_price instead.

The airline's base fare, before taxes, in the agency currency.

base_pricenumber

The airline's base fare, before taxes, in the agency currency. The snake_case twin of basePrice, with the same value: use this name.

taxesAndFeesnumberdeprecated

Legacy name, still accepted. Use taxes_and_fees instead.

Taxes plus the platform's fees, folded together. Excludes your agency commission.

taxes_and_feesnumber

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.

agencyCommissionnumberdeprecated

Legacy name, still accepted. Use agency_commission instead.

The commission of your agency on this sale.

agency_commissionnumber

The commission of your agency on this sale. The snake_case twin of agencyCommission, with the same value: use this name.

finalPricenumberdeprecated

Legacy name, still accepted. Use final_price instead.

What the traveler pays: basePrice + taxesAndFees + agencyCommission.

final_pricenumber

What the traveler pays: basePrice + taxesAndFees + agencyCommission. The snake_case twin of finalPrice, with the same value: use this name.

b2bPricenumberdeprecated

Legacy name, still accepted. Use b2b_price instead.

The amount debited from your agency balance: finalPrice - agencyCommission.

b2b_pricenumber

The amount debited from your agency balance: finalPrice - agencyCommission. The snake_case twin of b2bPrice, with the same value: use this name.

totalAmountnumber

Order quote only: an alias of b2bPrice.

taxAmountnumber

Order quote of a Duffel order only: the airline's taxes in your agency currency.

originalTaxAmountnumber

Order quote of a Duffel order only: the same taxes in the supplier currency.

additionalServicesarray of object

Paid extras. A list in the offers of a search (empty for most offers).

acdobject

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.

ShowHide 4 attributes
appliedboolean

true for an ACD fare: the booking needs one passport copy for every traveler, sent with upload_acd_documents. false for an ordinary fare.

scenariostring

Only on an ACD fare: the rule that adjusted the price. Informational.

One of A, B.

exemptboolean

true when the search named an ACD-exempt company of your agency: the fare is priced without ACD.

reasonstring

Only on some ACD fares: why the rule applied. Informational; the wording can change.

itineraryarray of object

One entry for each direction.

ShowHide 5 attributes
directionstring

outbound, return, and segment_3, segment_4 ... for the third and later legs of a multi-city search.

durationstring

ISO 8601 duration of this direction.

stopsinteger

Number of stops. 0 is non-stop.

segmentsarray of object

The flights of this direction, in order.

ShowHide 10 attributes
idstring

Id of the segment. fareDetailsBySegment[].segmentId points to it.

departureobject

Where and when a segment leaves or arrives.

ShowHide 7 attributes
airportCodestring

IATA code of the airport.

airportNamestring

Name of the airport.

cityNamestring

Name of the city.

countryCodestring

ISO 3166-1 alpha-2 country code.

terminalstringnullable

Terminal, when the supplier says.

datetimestring

Local date and time at the airport, YYYY-MM-DDTHH:MM:SS, without a time zone.

timeZonestring

IANA time zone of the airport.

arrivalobject

Where and when a segment leaves or arrives.

ShowHide 7 attributes
airportCodestring

IATA code of the airport.

airportNamestring

Name of the airport.

cityNamestring

Name of the city.

countryCodestring

ISO 3166-1 alpha-2 country code.

terminalstringnullable

Terminal, when the supplier says.

datetimestring

Local date and time at the airport, YYYY-MM-DDTHH:MM:SS, without a time zone.

timeZonestring

IANA time zone of the airport.

flightobject

The airline and the number of a flight.

ShowHide 8 attributes
carrierCodestring

IATA code of the marketing airline.

carrierNamestring

Name of the marketing airline.

carrierLogoUrlstring

Address of the logo of the marketing airline.

flightNumberstring

The flight number without the carrier code.

aircraftCodestringnullable

IATA code of the aircraft type.

aircraftNamestringnullable

Name of the aircraft type.

operatingCarrierstring

IATA code of the airline that operates the flight. A different value than carrierCode means a codeshare.

operatingCarrierNamestring

Name of the operating airline.

durationstring

ISO 8601 duration of the flight.

cabinstring

The cabin of this segment. It can differ from the cabin you asked for.

One of ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST.

bookingClassstringnullable

Booking class letter (Amadeus: Q, O; Duffel: null).

fareBasisstringnullable

Fare basis code.

brandedFarestringnullable

Fare family code.

brandedFareLabelstringnullable

Display label of the fare family.

conditionsobject

What the fare allows before departure. Indicative only. A Duffel order can carry null for both when the airline does not say.

ShowHide 2 attributes
refundBeforeDepartureobjectnullable

What the fare says about a refund before departure.

ShowHide 1 attribute
allowedboolean

Whether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.

changeBeforeDepartureobjectnullable

What the fare says about a change before departure.

ShowHide 1 attribute
allowedboolean

Whether a change is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.

travelerPricingarray of object

One entry for each priced traveler.

ShowHide 7 attributes
travelerIdstringdeprecated

Legacy name, still accepted. Use passenger_id instead.

"1", "2" ... for Amadeus, pas_... for Duffel.

passenger_idstring

"1", "2" ... for Amadeus, pas_... for Duffel. The snake_case twin of travelerId, with the same value: use this name.

travelerTypestringdeprecated

Legacy name, still accepted. Use passenger_type instead.

ADULT, SENIOR, YOUNG, CHILD, SEATED_INFANT or HELD_INFANT (a lap infant).

passenger_typestring

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.

fareOptionstring

The fare option, for example STANDARD.

priceobject

The price of one traveler.

ShowHide 5 attributes
supplierCurrencystring

ISO 4217 currency in which the supplier prices the fare.

agencyCurrencystring

ISO 4217 currency of your agency.

basenumber

The traveler's base fare in the agency currency.

totalnumber

The traveler's final price: what this traveler pays. The totals of all travelers add up to pricing.finalPrice.

b2bPricenumber

The traveler's share of the amount debited from your balance.

fareDetailsBySegmentarray of object

The fare of this traveler on every segment.

ShowHide 9 attributes
segmentIdstring

The id of the segment this fare detail is about.

cabinstring

Cabin of the fare on this segment.

One of ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST.

fareBasisstringnullable

Fare basis code.

brandedFarestringnullable

Fare family code.

brandedFareLabelstringnullable

Display label of the fare family.

bookingClassstringnullable

Booking class letter.

includedCheckedBagsobject

The checked baggage included in the fare.

ShowHide 1 attribute
quantityinteger

Number of checked bags included in the fare.

includedCabinBagsobject

The cabin baggage included in the fare.

ShowHide 1 attribute
quantityinteger

Number of cabin bags included in the fare.

amenitiesarray of object

What else the fare includes or sells (seat, bag, meal, Wi-Fi ...).

conditionsobject

What the fare allows before departure. Indicative only. A Duffel order can carry null for both when the airline does not say.

ShowHide 2 attributes
refundBeforeDepartureobjectnullable

What the fare says about a refund before departure.

ShowHide 1 attribute
allowedboolean

Whether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.

changeBeforeDepartureobjectnullable

What the fare says about a change before departure.

ShowHide 1 attribute
allowedboolean

Whether a change is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.

fareRulesobject

The fare rules of the offer: what exchange, refund and revalidation allow.

ShowHide 5 attributes
exchangeobject

What the fare says about an exchange before departure.

ShowHide 1 attribute
allowedboolean

Whether an exchange is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.

refundobject

What the fare says about a refund before departure.

ShowHide 1 attribute
allowedboolean

Whether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.

revalidationobject

What the fare says about a revalidation before departure.

ShowHide 1 attribute
allowedboolean

Whether a revalidation is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.

supplierCurrencystring

Currency of the penalty amounts, when there are some.

agencyCurrencystring

Currency of your agency.

validatingAirlinearray of object

The airline whose rules and ticket stock govern the fare.

ShowHide 2 attributes
codestring

IATA code of the airline.

namestring

Name of the airline.

additionalServicesobject

Paid extras. A list in the offers of a search (Amadeus only); an object with a baggage list in a priced offer.

requiresACDboolean

Amadeus Algeria only, present only when true: the fare is an ACD fare and the booking needs passports (see upload_acd_documents).

PreviousThe Error objectNext The Flight booking object

ยฉ 2026 FX-Port

TermsPrivacy[email protected]