Pay a held order and issue the tickets
Pay for a held booking and issue the tickets.
/api/v1/flights/pay_orderThe agency balance is debited by pricing.b2bPrice; in the sandbox no money moves.
The amount and the currency come from the stored booking: do not send currency (400 bad_request); an amount is ignored. Send one of order_id (the supplier's order id, preferred), booking_id and pnr. payment_type is balance (default), card or arc_bsp_cash; only Duffel reads it, Amadeus Algeria pays from the balance whatever you send. A Duffel order that was bought instantly cannot be paid later.
A refusal of the supplier is HTTP 200 with success: false and paymentSucceeded: false: the status alone is not enough, read both. error.code is a number as text for Amadeus (4926: the order is already issued; 9112: the reservation is cancelled or expired) and a name for Duffel. Do not retry a payment blindly: read the booking with get_booking first. A second pay_order for an order that is paid answers 4926, which is harmless. The exception is 503 balance_lock_timeout (live only): another operation of your agency held the balance for a moment, the payment never started, and the same request can be sent again after a few seconds.
curl https://api.fx-port.com/api/v1/flights/pay_order \
-H "Authorization: Bearer fxp_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"order_id": "eJzTd9ePNA9wdA0FAAs8AmE",
"payment_type": "balance"
}'{
"environment": "sandbox",
"success": true,
"paymentSucceeded": true,
"requestId": "1ad06b56",
"orderId": "eJzTd9ePNA9wdA0FAAs8AmE",
"processingTime": 2.981,
"paymentDetails": {
"paymentId": null,
"status": "succeeded",
"type": "issuance",
"paymentAmount": 4925.44,
"currency": "DZD",
"createdAt": "2026-11-01T15:26:21.896668",
"message": "Payment successful! Tickets have been issued."
},
"booking": {
"reference": "eJzTd9ePNA9wdA0FAAs8AmE",
"status": "confirmed",
"pnr": "Y7PAEU",
"type": "instant",
"createdAt": "2026-11-01T15:26:21.896668",
"cancelledAt": null,
"content": "managed",
"syncedAt": "2026-11-01T15:26:21.896668",
"availableActions": [],
"voidableUntil": "2026-11-01T23:00:00Z",
"cancellation": null
},
"supplier": {
"id": "amadeus_aqc_dz_1",
"technology": "amadeus_aqc",
"name": "Amadeus AQC",
"offerId": "1"
},
"agency": {
"currency": "DZD"
},
"pricing": {
"supplierCurrency": "DZD",
"agencyCurrency": "DZD",
"basePrice": 3160,
"taxesAndFees": 1765.44,
"agencyCommission": 4.93,
"finalPrice": 4930.37,
"b2bPrice": 4925.44,
"additionalServices": [],
"acd": {
"applied": false
}
},
"payment": {
"status": "paid",
"paidAt": "2026-11-01T15:26:21.896710",
"paymentRequiredBy": null,
"priceGuaranteeExpiresAt": null,
"awaitingPayment": false
},
"documents": [
{
"type": "electronic_ticket",
"documentType": "ETICKET",
"uniqueIdentifier": "124-2446977397",
"status": "ISSUED",
"passengerIds": [
"1"
],
"segmentIds": [
"1"
]
}
],
"bookingReferences": [
{
"pnr": "Y7PAEU",
"carrier": {
"iataCode": "AH",
"name": "Air Algerie",
"logoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/AH.svg",
"logoLockupUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-lockup/AH.svg"
}
}
],
"passengers": [
{
"id": "1",
"type": "ADULT",
"title": "mr",
"givenName": "JAMES",
"familyName": "SMITH",
"gender": "male",
"bornOn": "1988-06-15",
"email": "[email protected]",
"phoneNumber": "15555550123",
"infantPassengerId": null,
"loyaltyProgrammeAccounts": [],
"ticketNumber": "124-2446977397"
}
],
"travelerPricing": [
{
"travelerId": "1",
"travelerType": "ADULT",
"fareOption": "STANDARD",
"price": {
"supplierCurrency": "DZD",
"agencyCurrency": "DZD",
"base": 3160,
"total": 4930.37,
"b2bPrice": 4925.44
},
"fareDetailsBySegment": [
{
"segmentId": "1",
"cabin": "ECONOMY",
"fareBasis": "Y",
"brandedFare": "STANDARD",
"brandedFareLabel": "STANDARD",
"bookingClass": "Y",
"includedCheckedBags": {
"quantity": 1
},
"includedCabinBags": {
"quantity": 1
},
"amenities": []
}
]
}
],
"itinerary": [
{
"direction": "outbound",
"duration": "PT1H",
"stops": 0,
"fareBrandName": "",
"origin": {
"airportCode": "ALG",
"airportName": "Houari Boumediene Airport",
"cityName": "Algiers",
"countryCode": "DZ",
"timeZone": "Africa/Algiers"
},
"destination": {
"airportCode": "ORN",
"airportName": "Oran International Airport",
"cityName": "Oran",
"countryCode": "DZ",
"timeZone": "Africa/Algiers"
},
"segments": [
{
"id": "1",
"departure": {
"airportCode": "ALG",
"airportName": "Houari Boumediene Airport",
"cityName": "Algiers",
"countryCode": "DZ",
"terminal": "1",
"datetime": "2026-12-22T19:45:00",
"timeZone": "Africa/Algiers"
},
"arrival": {
"airportCode": "ORN",
"airportName": "Oran International Airport",
"cityName": "Oran",
"countryCode": "DZ",
"terminal": null,
"datetime": "2026-12-22T20:45:00",
"timeZone": "Africa/Algiers"
},
"flight": {
"carrierCode": "AH",
"carrierName": "Air Algerie",
"carrierLogoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/AH.svg",
"flightNumber": "6106",
"aircraftCode": "73H",
"aircraftName": null,
"operatingCarrier": "AH",
"operatingCarrierName": "Air Algerie",
"operatingFlightNumber": "6106"
},
"duration": "PT1H",
"distance": null,
"stops": [],
"cabin": "ECONOMY",
"cabinMarketingName": "Economy",
"fareBasis": "Y",
"brandedFare": "",
"brandedFareLabel": "",
"passengerDetails": [
{
"passengerId": "1",
"cabin": "ECONOMY",
"cabinMarketingName": "Economy",
"seat": null,
"checkedBags": {
"quantity": 1
},
"cabinBags": {
"quantity": 1
}
}
]
}
],
"conditions": {
"changeBeforeDeparture": {
"allowed": true
}
}
}
],
"conditions": {
"refundBeforeDeparture": {
"allowed": true
},
"changeBeforeDeparture": {
"allowed": true
}
},
"owner": {
"id": null,
"iataCode": "AH",
"name": "Air Algerie",
"logoUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-logo/AH.svg",
"logoLockupUrl": "https://assets.duffel.com/img/airlines/for-light-background/full-color-lockup/AH.svg",
"conditionsOfCarriageUrl": null
},
"services": [],
"internalBooking": {
"bookingId": "Y7PAEU",
"internalId": "711371c3-00aa-4be2-b790-9f0ca2ccfdb7"
},
"fareRules": {
"refund": {
"allowed": true
},
"exchange": {
"allowed": true
},
"agencyCurrency": "DZD"
},
"meta": {
"paymentStatus": "succeeded",
"orderConfirmed": true,
"supportHold": true,
"supportVoid": true,
"voidDeadline": "2026-11-01T23:00:00Z",
"voidWindowEndsAt": null,
"airlineInitiatedChanges": [],
"changes": [],
"users": [],
"orderMetadata": null
},
"postProcessing": {
"bucketLink": null,
"emailSent": false
}
}{
"environment": "sandbox",
"paymentSucceeded": false,
"requestId": "a63285ae",
"orderId": "eJzTd9ePNPfw9vIFAAs8AmA",
"processingTime": 0.799,
"error": {
"message": "The flightOrder is already issued",
"code": "4926",
"type": "INVALID DATA RECEIVED",
"details": [
{
"status": 400,
"code": 4926,
"title": "INVALID DATA RECEIVED",
"detail": "The flightOrder is already issued"
}
]
},
"supplier": {
"id": "amadeus_aqc_dz_1",
"technology": "amadeus_aqc",
"name": "Amadeus AQC"
},
"agency": {
"currency": "DZD"
},
"meta": {
"supportHold": true,
"supportVoid": true,
"voidDeadline": "2026-11-01T23:00:00Z",
"supplierStatusCode": 400,
"request_id": "a63285ae",
"status": 200
},
"success": false,
"errors": [
{
"code": "4926",
"type": "supplier_error",
"title": "Invalid data received",
"message": "The flightOrder is already issued",
"field": null,
"details": {
"supplier_type": "INVALID DATA RECEIVED",
"supplier_details": [
{
"status": 400,
"code": 4926,
"title": "INVALID DATA RECEIVED",
"detail": "The flightOrder is already issued"
}
]
},
"documentation_url": "https://fx-port.com/docs/errors#4926"
}
],
"request_id": "a63285ae"
}Request
Body
Required, JSON.
order_idstringThe supplier's order id (booking.reference of the booking response). Preferred.
booking_idstringThe PNR of the booking.
pnrstringThe airline record locator.
payment_typestringOnly Duffel reads it; Amadeus Algeria and Travelport pay from the balance whatever you send. Default balance.
One of balance, card, arc_bsp_cash. Default balance.
three_d_secure_session_idstringFor a Duffel card payment that needs 3-D Secure.
price_guaranteedbooleanDefault true: pay the price of the hold. Leave it out.
supplier_idstringOnly used when the booking has no supplier of its own.
agency_idstringNot needed: the agency of a call is always the one of your API key. The field is accepted so that older clients keep working, and it is ignored.
orderIdstringdeprecatedLegacy name, still accepted. Use order_id instead.
The previous spelling of order_id: The supplier's order id (booking.reference of the booking response).
bookingIdstringdeprecatedLegacy name, still accepted. Use booking_id instead.
The previous spelling of booking_id: The PNR of the booking.
paymentTypestringdeprecatedLegacy name, still accepted. Use payment_type instead.
The previous spelling of payment_type: Only Duffel reads it; Amadeus Algeria and Travelport pay from the balance whatever you send.
threeDSecureSessionIdstringdeprecatedLegacy name, still accepted. Use three_d_secure_session_id instead.
The previous spelling of three_d_secure_session_id: For a Duffel card payment that needs 3-D Secure.
priceGuaranteedbooleandeprecatedLegacy name, still accepted. Use price_guaranteed instead.
The previous spelling of price_guaranteed: Default true: pay the price of the hold.
supplierIdstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
The previous spelling of supplier_id: Only used when the booking has no supplier of its own.
agencyIdstringdeprecatedLegacy name, still accepted. Use agency_id instead.
The previous spelling of agency_id: Not needed: the agency of a call is always the one of your API key.
Response
200The paid order. success: false with paymentSucceeded: false and error when the supplier refused the payment.
environmentstringThe environment of the key that made the call: sandbox for fxp_test_ keys, live for fxp_live_ keys. Present in every JSON body.
One of sandbox, live.
request_idstringThe id of the request, also in the X-Request-Id header.
warningsarray of objectPresent only when the request used a previous spelling of a field or something the endpoint ignored.
ShowHide 5 attributes
codestringWhat the warning is about.
One of deprecated_field, ignored_field, coerced_value, deprecated_value, deprecated_endpoint.
fieldstringThe request field the warning is about.
replacementstringThe name to use instead, for deprecated_* warnings.
messagestringA sentence that says what happened and what to do.
documentation_urlstringWhere the naming rules are explained.
successbooleantrue when the order was created (booking) or paid (payment).
requestIdstringdeprecatedLegacy name, still accepted. Use request_id instead.
The id of this request, 8 characters, for support.
paymentSucceededbooleanpay_order only: whether the payment succeeded. Read it together with success.
searchIdstringdeprecatedLegacy name, still accepted. Use search_id instead.
book_flight only: the search_id you sent.
search_idstringbook_flight only: the search_id you sent. The snake_case twin of searchId, with the same value: use this name.
offerIdstringdeprecatedLegacy name, still accepted. Use offer_id instead.
book_flight only: the offer_id you sent.
offer_idstringbook_flight only: the offer_id you sent. The snake_case twin of offerId, with the same value: use this name.
orderIdstringdeprecatedLegacy name, still accepted. Use order_id instead.
pay_order only: the supplier's order id.
order_idstringpay_order only: the supplier's order id. The snake_case twin of orderId, with the same value: use this name.
processingTimenumberdeprecatedLegacy name, still accepted. Use processing_time instead.
Seconds spent.
processing_timenumberSeconds spent. The snake_case twin of processingTime, with the same value: use this name.
paymentDetailsobjectpay_order only: paymentId, status, type (issuance), paymentAmount, currency, createdAt, message.
bookingobjectThe order as the supplier knows it.
ShowHide 12 attributes
referencestringdeprecatedLegacy name, still accepted. Use order_id instead.
The supplier's order id (ord_... for Duffel, a base64-like text for Amadeus; for a cancelled hold of Amadeus Algeria the PNR). Send it as order_id to pay_order, cancel_order and cancel_quote.
order_idstringThe supplier's order id (ord_... for Duffel, a base64-like text for Amadeus; for a cancelled hold of Amadeus Algeria the PNR). Send it as order_id to pay_order, cancel_order and cancel_quote. The snake_case twin of reference, with the same value: use this name.
statusstringconfirmed, pending (a hold that is not paid yet), awaiting_payment, cancelled, failed or partial_refund.
pnrstringThe airline record locator. Not unique across suppliers and airlines.
typestringinstant: ticketed at once. hold: reserved, not paid.
One of instant, hold.
createdAtstringWhen the order was created.
cancelledAtstringnullableWhen the order was cancelled.
contentstringWho manages the order: managed.
syncedAtstringWhen FX-Port last synchronised the order with the supplier.
availableActionsarray of stringWhat can still be done with the order.
voidableUntilstringnullableISO 8601 UTC end of the same-day void window.
cancellationobjectnullableHow the order was cancelled: type, deleted, deletedAt.
supplierobjectThe supplier of the order.
ShowHide 7 attributes
idstringdeprecatedLegacy name, still accepted. Use supplier_id instead.
Id of the supplier.
supplier_idstringId of the supplier. The snake_case twin of id, with the same value: use this name.
technologystringThe technology of the supplier: amadeus_aqc or duffel.
namestringdeprecatedLegacy name, still accepted. Use supplier_name instead.
Name of the supplier.
supplier_namestringName of the supplier. The snake_case twin of name, with the same value: use this name.
offerIdstringnullabledeprecatedLegacy name, still accepted. Use supplier_offer_id instead.
The supplier's own id of the offer.
supplier_offer_idstringnullableThe supplier's own id of the offer. The snake_case twin of offerId, with the same value: use this name.
agencyobjectYour agency. The id of the agency is not returned: you know it.
ShowHide 1 attribute
currencystringISO 4217 currency of your agency. Every amount of the response is in it.
pricingobjectThe 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
supplierCurrencystringISO 4217 currency in which the supplier prices the fare.
agencyCurrencystringISO 4217 currency of your agency. Every amount of the block is in it.
basePricenumberdeprecatedLegacy name, still accepted. Use base_price instead.
The airline's base fare, before taxes, in the agency currency.
base_pricenumberThe airline's base fare, before taxes, in the agency currency. The snake_case twin of basePrice, with the same value: use this name.
taxesAndFeesnumberdeprecatedLegacy name, still accepted. Use taxes_and_fees instead.
Taxes plus the platform's fees, folded together. Excludes your agency commission.
taxes_and_feesnumberTaxes plus the platform's fees, folded together. Excludes your agency commission. The snake_case twin of taxesAndFees, with the same value: use this name.
agencyCommissionnumberdeprecatedLegacy name, still accepted. Use agency_commission instead.
The commission of your agency on this sale.
agency_commissionnumberThe commission of your agency on this sale. The snake_case twin of agencyCommission, with the same value: use this name.
finalPricenumberdeprecatedLegacy name, still accepted. Use final_price instead.
What the traveler pays: basePrice + taxesAndFees + agencyCommission.
final_pricenumberWhat the traveler pays: basePrice + taxesAndFees + agencyCommission. The snake_case twin of finalPrice, with the same value: use this name.
b2bPricenumberdeprecatedLegacy name, still accepted. Use b2b_price instead.
The amount debited from your agency balance: finalPrice - agencyCommission.
b2b_pricenumberThe amount debited from your agency balance: finalPrice - agencyCommission. The snake_case twin of b2bPrice, with the same value: use this name.
totalAmountnumberOrder quote only: an alias of b2bPrice.
taxAmountnumberOrder quote of a Duffel order only: the airline's taxes in your agency currency.
originalTaxAmountnumberOrder quote of a Duffel order only: the same taxes in the supplier currency.
additionalServicesarray of objectPaid extras. A list in the offers of a search (empty for most offers).
acdobjectWhether 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
appliedbooleantrue for an ACD fare: the booking needs one passport copy for every traveler, sent with upload_acd_documents. false for an ordinary fare.
scenariostringOnly on an ACD fare: the rule that adjusted the price. Informational.
One of A, B.
exemptbooleantrue when the search named an ACD-exempt company of your agency: the fare is priced without ACD.
reasonstringOnly on some ACD fares: why the rule applied. Informational; the wording can change.
requiresACDbooleanPresent only when true: the booking needs one passport copy for every traveler: see upload_acd_documents.
paymentobjectThe payment state of the order.
ShowHide 5 attributes
statusstringawaiting_payment for a hold, paid once ticketed.
paidAtstringnullableWhen the order was paid.
paymentRequiredBystringnullableThe payment deadline of a hold, when the supplier gives one.
priceGuaranteeExpiresAtstringnullableUntil when the price is guaranteed.
awaitingPaymentbooleantrue for a hold that still has to be paid.
documentsarray of objectThe e-tickets. Empty for a hold.
ShowHide 6 attributes
typestringelectronic_ticket.
uniqueIdentifierstringThe ticket number (Duffel sandbox: the text 1).
passengerIdsarray of stringThe passengers the document is for.
documentTypestringETICKET.
statusstringISSUED.
segmentIdsarray of stringThe segments the document covers.
bookingReferencesarray of objectThe record locators.
ShowHide 2 attributes
pnrstringThe airline record locator.
carrierobjectThe airline that issued the record locator.
ShowHide 4 attributes
iataCodestringIATA code of the airline.
namestringName of the airline.
logoUrlstringAddress of the logo.
logoLockupUrlstringnullableAddress of the wide logo.
passengersarray of objectThe passengers.
ShowHide 18 attributes
idstringdeprecatedLegacy name, still accepted. Use passenger_id instead.
Id of the passenger on the order: "1" (Amadeus) or pas_... (Duffel).
passenger_idstringId of the passenger on the order: "1" (Amadeus) or pas_... (Duffel). The snake_case twin of id, with the same value: use this name.
typestringdeprecatedLegacy name, still accepted. Use passenger_type instead.
ADULT, CHILD, INFANT_WITHOUT_SEAT ... as the supplier writes it.
passenger_typestringADULT, CHILD, INFANT_WITHOUT_SEAT ... as the supplier writes it. The snake_case twin of type, with the same value: use this name.
titlestringmr, mrs ... derived from the gender.
givenNamestringdeprecatedLegacy name, still accepted. Use first_name instead.
Given name, as stored (Amadeus writes it in upper case).
first_namestringGiven name, as stored (Amadeus writes it in upper case). The snake_case twin of givenName, with the same value: use this name.
familyNamestringdeprecatedLegacy name, still accepted. Use last_name instead.
Family name, as stored.
last_namestringFamily name, as stored. The snake_case twin of familyName, with the same value: use this name.
genderstringmale or female.
bornOnstringdeprecatedLegacy name, still accepted. Use date_of_birth instead.
Date of birth, YYYY-MM-DD.
date_of_birthstringDate of birth, YYYY-MM-DD. The snake_case twin of bornOn, with the same value: use this name.
emailstringThe e-mail of the contact.
phoneNumberstringdeprecatedLegacy name, still accepted. Use phone_number instead.
The phone number of the contact.
phone_numberstringThe phone number of the contact. The snake_case twin of phoneNumber, with the same value: use this name.
infantPassengerIdstringnullableThe id of the lap infant this adult carries.
loyaltyProgrammeAccountsarray of objectFrequent-flyer accounts.
ticketNumberstringnullableThe ticket number of this passenger. null until the airline returns it.
travelerPricingarray of objectThe price of each traveler.
ShowHide 7 attributes
travelerIdstringdeprecatedLegacy 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.
travelerTypestringdeprecatedLegacy name, still accepted. Use passenger_type instead.
ADULT, SENIOR, YOUNG, CHILD, SEATED_INFANT or HELD_INFANT (a lap infant).
passenger_typestringADULT, SENIOR, YOUNG, CHILD, SEATED_INFANT or HELD_INFANT (a lap infant). The snake_case twin of travelerType, with the same value: use this name.
fareOptionstringThe fare option, for example STANDARD.
priceobjectThe price of one traveler.
ShowHide 5 attributes
supplierCurrencystringISO 4217 currency in which the supplier prices the fare.
agencyCurrencystringISO 4217 currency of your agency.
basenumberThe traveler's base fare in the agency currency.
totalnumberThe traveler's final price: what this traveler pays. The totals of all travelers add up to pricing.finalPrice.
b2bPricenumberThe traveler's share of the amount debited from your balance.
fareDetailsBySegmentarray of objectThe fare of this traveler on every segment.
ShowHide 9 attributes
segmentIdstringThe id of the segment this fare detail is about.
cabinstringCabin of the fare on this segment.
One of ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST.
fareBasisstringnullableFare basis code.
brandedFarestringnullableFare family code.
brandedFareLabelstringnullableDisplay label of the fare family.
bookingClassstringnullableBooking class letter.
includedCheckedBagsobjectThe checked baggage included in the fare.
ShowHide 1 attribute
quantityintegerNumber of checked bags included in the fare.
includedCabinBagsobjectThe cabin baggage included in the fare.
ShowHide 1 attribute
quantityintegerNumber of cabin bags included in the fare.
amenitiesarray of objectWhat else the fare includes or sells (seat, bag, meal, Wi-Fi ...).
itineraryarray of objectThe flights of the order.
ShowHide 8 attributes
directionstringoutbound, return ...
durationstringISO 8601 duration.
stopsintegerNumber of stops.
fareBrandNamestringName of the fare brand.
originobjectWhere this direction starts.
ShowHide 5 attributes
airportCodestringIATA code of the airport.
airportNamestringName of the airport.
cityNamestringName of the city.
countryCodestringISO 3166-1 alpha-2 country code.
timeZonestringIANA time zone.
destinationobjectWhere this direction ends.
ShowHide 5 attributes
airportCodestringIATA code of the airport.
airportNamestringName of the airport.
cityNamestringName of the city.
countryCodestringISO 3166-1 alpha-2 country code.
timeZonestringIANA time zone.
segmentsarray of objectThe flights of this direction.
ShowHide 8 attributes
idstringId of the segment.
departureobjectWhere and when a segment leaves or arrives.
ShowHide 7 attributes
airportCodestringIATA code of the airport.
airportNamestringName of the airport.
cityNamestringName of the city.
countryCodestringISO 3166-1 alpha-2 country code.
terminalstringnullableTerminal, when the supplier says.
datetimestringLocal date and time at the airport, YYYY-MM-DDTHH:MM:SS, without a time zone.
timeZonestringIANA time zone of the airport.
arrivalobjectWhere and when a segment leaves or arrives.
ShowHide 7 attributes
airportCodestringIATA code of the airport.
airportNamestringName of the airport.
cityNamestringName of the city.
countryCodestringISO 3166-1 alpha-2 country code.
terminalstringnullableTerminal, when the supplier says.
datetimestringLocal date and time at the airport, YYYY-MM-DDTHH:MM:SS, without a time zone.
timeZonestringIANA time zone of the airport.
flightobjectThe airline and the number of the flight.
ShowHide 3 attributes
carrierCodestringIATA code of the marketing airline.
flightNumberstringThe flight number.
operatingCarrierstringIATA code of the operating airline.
durationstringISO 8601 duration.
cabinstringThe cabin.
fareBasisstringnullableFare basis code.
passengerDetailsarray of objectWhat each passenger has on this segment.
conditionsobjectnullableWhat the fare allows before departure. Indicative only. A Duffel order can carry null for both when the airline does not say.
ShowHide 2 attributes
refundBeforeDepartureobjectnullableWhat the fare says about a refund before departure.
ShowHide 1 attribute
allowedbooleanWhether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
changeBeforeDepartureobjectnullableWhat the fare says about a change before departure.
ShowHide 1 attribute
allowedbooleanWhether a change is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
conditionsobjectWhat the fare allows before departure. Indicative only. A Duffel order can carry null for both when the airline does not say.
ShowHide 2 attributes
refundBeforeDepartureobjectnullableWhat the fare says about a refund before departure.
ShowHide 1 attribute
allowedbooleanWhether a refund is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
changeBeforeDepartureobjectnullableWhat the fare says about a change before departure.
ShowHide 1 attribute
allowedbooleanWhether a change is allowed before departure. Indicative, not a promise: the fare rules of the airline decide.
fareRulesobjectWhat exchange, refund and revalidation allow.
ownerobjectThe airline that owns the order.
ShowHide 6 attributes
idstringnullableDuffel's id of the airline.
iataCodestringIATA code of the airline that owns the order.
namestringName of the airline.
logoUrlstringAddress of the logo.
logoLockupUrlstringnullableAddress of the wide logo.
conditionsOfCarriageUrlstringnullableAddress of the conditions of carriage.
servicesarray of objectExtra services of the order (bags, seats). Empty.
metaobjectCapabilities of the order and what the supplier reports about it.
ShowHide 11 attributes
supportHoldbooleandeprecatedLegacy name, still accepted. Use support_hold instead.
Whether the supplier can hold.
support_holdbooleanWhether the supplier can hold. The snake_case twin of supportHold, with the same value: use this name.
supportVoidbooleandeprecatedLegacy name, still accepted. Use support_void instead.
Whether the supplier can void the ticket the same day.
support_voidbooleanWhether the supplier can void the ticket the same day. The snake_case twin of supportVoid, with the same value: use this name.
voidDeadlinestringnullabledeprecatedLegacy name, still accepted. Use void_deadline instead.
End of the same-day void window.
void_deadlinestringnullableEnd of the same-day void window. The snake_case twin of voidDeadline, with the same value: use this name.
voidWindowEndsAtstringnullableEnd of the void window, when the supplier gives it.
airlineInitiatedChangesarray of objectSchedule changes the airline made.
changesarray of objectChanges of the order.
usersarray of objectUsers of the order.
orderMetadataobjectnullableSupplier-specific metadata of the order.
exchangeRatenumberdeprecatedLegacy name, still accepted. Use exchange_rate instead.
Only when the supplier's currency is not your agency's.
exchange_ratenumberOnly when the supplier's currency is not your agency's. The snake_case twin of exchangeRate, with the same value: use this name.
internalBookingobjectThe FX-Port identifiers of the booking.
ShowHide 2 attributes
bookingIdstringThe PNR.
internalIdstringThe FX-Port id of the booking (a UUID), the same as postProcessing.bookingDbId of the booking call.
postProcessingobjectWhat FX-Port did after the supplier call.
ShowHide 5 attributes
bookingDbIdstringThe FX-Port id of the booking (a UUID). The best key to store: it is accepted as booking_id by get_booking.
bucketLinkstringnullableAddress of the PDF of the ticket, null until it is generated. A public link.
emailSentbooleanWhether the confirmation e-mail went out.
bookingStatusUpdatedbooleancancel_order: whether the FX-Port booking was updated.
refundMethodstringconfirm_cancel: where the refund went: balance.
balanceDebitedbooleanbook_flight only. Always false in the sandbox: nothing is charged.
transactionCreatedbooleanbook_flight only. Always false in the sandbox.
payoutCreatedbooleanbook_flight only. Always false in the sandbox.
errorobjectOnly when success is false: the refusal of the supplier for pay_order.
ShowHide 5 attributes
messagestringThe supplier's message.
codestringThe supplier's code: a number as text for Amadeus (4926), a name for Duffel (order_not_cancellable).
typestringThe supplier's error type.
detailsarray of objectThe supplier's details, in its own format.
userMessagestringA sentence the supplier wrote for the traveler, when there is one.
errorsarray of objectOnly when success is false: the unified error list. errors[0].code is the supplier's code in lower case and errors[0].type is supplier_error.
ShowHide 7 attributes
codestringStable, machine-readable code in snake_case. Branch on this, never on the message.
typestringThe family of the error: tells you how to react.
One of authentication_error, permission_error, validation_error, not_found, conflict, payment_error, rate_limit_error, supplier_error, internal_error.
titlestringA short label of the error.
messagestringA sentence for a human: what is wrong and how to fix it. Wording can change; the code does not.
fieldstringnullableThe request field the error is about, when there is one.
detailsobjectnullableStructured extras of the error (for example available and required for an insufficient balance).
documentation_urlstringThe documentation of this error code.
Errors
| Status | Code | Example message |
|---|---|---|
| 400 | bad_request | Missing required parameter: order_id (or booking_id / pnr) |
| 400 | invalid_booking_id | `order_id` is not a valid identifier (letters, digits and - _ . : = ~ only, up to 128 characters). |
| 400 | bad_request | Do not pass 'currency'. Currency is resolved automatically from booking/supplier context. |
| 402 | insufficient_balance | Agency balance is insufficient. Available: 120.0 DZD, Required: 29876.81 DZD. |
| 403 | read_write_permission_required | This endpoint requires an API key with read_write permission. |
| 404 | not_found | Booking not found for order_id: ZZZZZZ |
| 503 | balance_lock_timeout | The agency balance is busy with another operation. Retry in a few seconds. |
The shape of the error body depends on the endpoint. See Errors for every shape and code.