The Flight booking object
A flight booking of your agency as FX-Port stores it: its status, price, ticket number, the links of the PDF tickets and the ACD state.
get_booking returns it under booking. id is the FX-Port UUID, the stable key to store; booking_id (also pnr) is the airline record locator, which is not unique across suppliers and airlines; amadeus_id (also order_id) is the supplier's order id, the value pay_order, cancel_order and cancel_quote take. The booking is a database row: more keys than the ones listed here exist (the void history, the details of a changed schedule); they are internal and not part of the contract. The links bucket_link (pdf_url) and bucket_link_no_price are public addresses of PDFs that hold the traveler's name and the fare, and the link of every entry of acd_documents (also acd_links) is a public address of a passport: treat them all as sensitive. FX-Port's own storage keys of the passports are never returned. See Get a booking.
{
"id": "711371c3-00aa-4be2-b790-9f0ca2ccfdb7",
"booking_id": "Y7PAEU",
"amadeus_id": "eJzTd9ePNA9wdA0FAAs8AmE",
"status": "confirmed",
"created_at": "2026-11-01T15:26:14.871035+00:00",
"paid_at": "2026-11-01T15:26:21.961664+00:00",
"updated_at": "2026-11-01T15:26:21.998944+00:00",
"total_price": 4930.37,
"agency_commission": 4.93,
"currency": "DZD",
"departure_airport": "ALG",
"arrival_airport": "ORN",
"departure_date": "2026-12-22T19:45:00",
"arrival_date": "2026-12-22T20:45:00",
"return_departure_date": null,
"return_arrival_date": null,
"included_checked_bags": "0",
"ticketing_agreement": "DELAY_TO_CANCEL",
"supplier_name": "Amadeus Algeria",
"supplier_id": "amadeus_aqc_dz_1",
"ticket_number": "124-2446977397",
"bucket_link": "https://s3.example.com/flight-bookings/Y7PAEU-JAMES-SMITH.pdf",
"bucket_link_no_price": "https://s3.example.com/flight-bookings/Y7PAEU-JAMES-SMITH-no-price.pdf",
"email_sent": false,
"require_acd": false,
"acd_submitted": false,
"acd_links": null,
"acd_amount": null,
"acd_paid": false,
"acd_documents_revision": 0,
"acd_documents": null,
"has_changed": false,
"new_flight_details": null,
"voided_at": null,
"refund_amount": null,
"refund_currency": null,
"refund_method": null,
"agent_id": null,
"environment": "sandbox",
"pricingBreakdown": {
"supplier_currency": "DZD",
"agency_currency": "DZD",
"base_price": 3160,
"taxes_and_fees": 1765.44,
"agency_commission": 4.93,
"final_price": 4930.37,
"b2b_price": 4925.44,
"created_at": "2026-11-01T15:26:22.176516+00:00",
"environment": "sandbox"
},
"travelerPricing": [
{
"traveler_id": "1",
"traveler_type": "ADULT",
"fare_option": "STANDARD",
"supplier_currency": "DZD",
"agency_currency": "DZD",
"base": 3160,
"total": 4930.37,
"b2b_price": 4925.44,
"created_at": "2026-11-01T15:26:15.133066+00:00",
"environment": "sandbox"
}
],
"balanceOperations": [],
"order_id": "eJzTd9ePNA9wdA0FAAs8AmE",
"pnr": "Y7PAEU",
"pdf_url": "https://s3.example.com/flight-bookings/Y7PAEU-JAMES-SMITH.pdf",
"pdf_url_no_price": "https://s3.example.com/flight-bookings/Y7PAEU-JAMES-SMITH-no-price.pdf",
"acd_required": false,
"requires_acd": false
}Attributes
idstringThe FX-Port UUID of the booking. Use it as the key when you store or re-read a booking.
booking_idstringdeprecatedLegacy name, still accepted. Use pnr instead.
The PNR. Not unique; prefer id.
pnrstringThe PNR. Not unique; prefer id. The snake_case twin of booking_id, with the same value: use this name.
amadeus_idstringdeprecatedLegacy name, still accepted. Use order_id instead.
The supplier's order id (the name is historical: it also holds the ord_... of a Duffel order). This is the order_id of pay_order, cancel_order and cancel_quote.
order_idstringThe supplier's order id (the name is historical: it also holds the ord_... of a Duffel order). This is the order_id of pay_order, cancel_order and cancel_quote. The snake_case twin of amadeus_id, with the same value: use this name.
statusstringconfirmed, awaiting_payment (a hold), cancelled, partial_refund, failed; voided, refunded and expired can appear for changed orders.
created_atstringWhen the booking was created.
paid_atstringnullableWhen it was paid.
updated_atstringWhen it last changed.
total_pricenumberThe final price in the currency of the agency.
agency_commissionnumberYour commission.
currencystringCurrency of the agency.
departure_airportstringIATA code of the first departure.
arrival_airportstringIATA code of the last arrival.
departure_datestringLocal departure time, without a zone.
arrival_datestringLocal arrival time, without a zone.
return_departure_datestringnullableLocal departure time of the return.
return_arrival_datestringnullableLocal arrival time of the return.
included_checked_bagsstringThe checked bags included, as a text.
ticketing_agreementstringnullableThe ticketing-time-limit agreement of an Amadeus booking, for example DELAY_TO_CANCEL.
supplier_namestringName of the supplier.
supplier_idstringId of the supplier.
ticket_numberstringnullableThe e-ticket number(s), as one text; several numbers are joined by commas. null until the airline returns one.
bucket_linkstringnullabledeprecatedLegacy name, still accepted. Use pdf_url instead.
Address of the PDF of the ticket (a hold: the hold voucher). null until generated. A public link.
pdf_urlstringnullableAddress of the PDF of the ticket (a hold: the hold voucher). null until generated. A public link. The snake_case twin of bucket_link, with the same value: use this name.
bucket_link_no_pricestringnullabledeprecatedLegacy name, still accepted. Use pdf_url_no_price instead.
Address of the same PDF without prices. A public link.
pdf_url_no_pricestringnullableAddress of the same PDF without prices. A public link. The snake_case twin of bucket_link_no_price, with the same value: use this name.
email_sentbooleanWhether the confirmation e-mail went out.
require_acdbooleantrue for an ACD booking (the stored flag).
acd_requiredbooleantrue for an ACD booking whose passports FX-Port did not waive: the same value as acd.acd_required of get_acd_documents.
requires_acdbooleanThe same value as acd_required.
acd_submittedbooleantrue once every traveler has a passport. Never null.
acd_documentsarray of objectnullableThe passports uploaded through the API, one entry for each traveler who has one. null for a booking that never had one. get_acd_documents gives the same information for each traveler, with the files FX-Port staff added from the dashboard.
ShowHide 12 attributes
traveler_idstringThe traveler the passport belongs to: the traveler_id of get_acd_documents.
traveler_namestringThe name on the booking.
traveler_typestringThe passenger type, for example ADULT.
linkstringThe public address of the file: anybody who has it can open the passport. Treat it as sensitive.
filenamestringThe file name that was sent.
content_typestringThe type FX-Port detected from the content, for example application/ or image/.
sizeintegerThe size of the stored file in bytes (size_bytes in get_acd_documents).
formatstringThe detected format: pdf, jpeg, png, webp, heif, avif, tiff, bmp, gif, jp2 or jxl.
uploaded_atstringWhen the file was stored: ISO 8601, UTC.
replaced_countintegerHow many times the passport was replaced.
previous_linksarray of objectThe files this passport replaced, oldest first. Empty for a passport that was never replaced.
ShowHide 3 attributes
linkstringThe public address of a file that was replaced.
uploaded_atstringWhen that file was stored.
replaced_atstringWhen it was replaced.
sourcestringHow the file arrived: api for an upload through the API.
acd_linksarray of stringnullableThe public addresses of every passport file of the booking, including the ones FX-Port staff added. null when there is none.
acd_amountnumbernullableThe ACD amount of the booking in euros, saved when the set of passports became complete. Informational. null before.
acd_paidbooleantrue once FX-Port's team has marked the ACD amount as paid. You cannot set it.
acd_documents_revisionintegerIncreases by one with each upload that stored a file. 0 for a booking without any.
has_changedbooleantrue when the airline changed the schedule after ticketing.
new_flight_detailsobjectnullableThe new schedule, when has_changed.
voided_atstringnullableWhen the ticket was voided.
refund_amountnumbernullableThe refund of a cancelled Duffel order.
refund_currencystringnullableCurrency of the refund.
refund_methodstringnullableHow the refund was paid: balance.
agent_idstringnullableYour own agent id, when you sent one.
environmentstringsandbox or live.
pricingBreakdownobjectnullableThe price of the booking in snake_case. The rate and the ACD details are not here.
ShowHide 7 attributes
supplier_currencystringCurrency of the supplier.
agency_currencystringCurrency of the agency.
base_pricenumberBase fare.
taxes_and_feesnumberTaxes and fees.
agency_commissionnumberYour commission.
final_pricenumberWhat the traveler pays.
b2b_pricenumberWhat was debited from your balance.
travelerPricingarray of objectThe price of each traveler.
balanceOperationsarray of objectThe ledger entries of this booking (debits, refunds). Empty in the sandbox.
ShowHide 9 attributes
idstringId of the entry.
flight_booking_idstringThe id of the booking.
operationstringdebit, refund ...
amountnumberThe amount.
currencystringCurrency of the amount.
descriptionstringWhat the entry is for.
created_atstringWhen it was written.
b2b_pricenumberThe booking's b2b_price at that time.
final_pricenumberThe booking's final_price at that time.
apiResponseobjectOnly with include_api_response: true: the stored answer of the booking call, with the full passenger list.