Skip to content
FX-Port/Docs
GuidesAPI referenceChangelog
Get API keys
  • Introduction
  • Quickstart
  • Security
  • Authentication
  • Environments and Postman
  • Sandbox
  • Conventions and naming
  • Legacy names and twins
  • Errors
  • Rate limits and fair use
  • Streaming search results

Concepts

  • Overview
  • Booking flows
  • Passengers and ages
  • Pricing
  • Post-booking operations

Search and price

  • Airport autocomplete
  • Search flights
  • Basic routes
  • Passengers and cabins
  • Filters
  • Supplier selection
  • Open-jaw and multi-city
  • Flexible dates
  • Price an offer

Book, pay and cancel

  • Book
  • Quote a held booking
  • Pay a held booking
  • Cancel a held booking
  • Quote a cancellation
  • Confirm a cancellation

After booking

  • Get a booking
  • Get the ticket PDF
  • Get the ticket number
  • ACD passport uploads
  • Use these docs with AI

Flights · Concepts

Flights API overview

Search, price, book, hold, pay and manage flight orders across every enabled GDS, airline and NDC supplier.

Search, price, book and manage flight orders across every enabled supplier through one API. A search fans out to the suppliers that can serve the route and returns the fares of each, with prices in your agency's currency.

For a summary of what the API covers, who it is for and how to get access, see the flight booking API for travel agencies.

New suppliers are added without a change on your side. FX-Port keeps connecting GDS, NDC and low-cost suppliers, direct airline deals and more office ids. An integration that selects suppliers automatically benefits from every new supplier and fare. Richer content (more fare families, ancillary types) ships under a new API version, so your current integration keeps working.

Flight concepts

Read these before you integrate: they apply to every flight endpoint.

Booking flowsInstant issue, hold then pay, and how cancelling works.Passengers and agesPassenger types, ages at departure, seated and lap infants, capacity limits.Flight pricingWhat each price field means and the b2bPrice formula.Post-booking operationsCancel, refund, void and exchange: what is self-serve and what is manual.Streaming search resultsThe first offers in about two seconds, supplier by supplier.

Endpoints

MethodPathPermissionDescription
POST/api/v1/get_flightsReadSearch for flights. Add ?stream=true for server-sent events
POST/api/v1/flights/flexible_searchReadThe ±3-day price matrix
POST/api/v1/flights/price_flightReadPrice an offer: required before booking
POST/api/v1/flights/book_flightRead+WriteCreate a booking, instant issue or hold
POST/api/v1/flights/get_order_quoteReadThe current price and state of a held order
POST/api/v1/flights/pay_orderRead+WritePay a held order and issue the tickets
POST/api/v1/flights/cancel_orderRead+WriteCancel a held (unpaid) reservation
POST/api/v1/flights/cancel_quoteReadAsk what cancelling an issued Duffel order would refund
POST/api/v1/flights/confirm_cancelRead+WriteConfirm that cancellation: irreversible
POST/api/v1/flights/get_bookingReadThe booking, with the PDF links
POST/api/v1/flights/get_ticketReadThe ticket PDF links
POST/api/v1/flights/get_ticket_numberReadThe e-ticket number
POST/api/v1/flights/get_acd_documentsReadThe passport documents of an ACD booking: ACD passport uploads
POST/api/v1/flights/upload_acd_documentsRead+WriteAdd or replace those passports (multipart)
GET/api/v1/flights/airportsPublicAirport autocomplete
GET/api/v1/flights/top-airportsPublicThe most searched airports

Every endpoint is described in the API reference.

What every flight endpoint has in common

  • Auth. Authorization: Bearer fxp_test_... (sandbox) or fxp_live_... (live). A read key is enough for the Read endpoints; the Read+Write endpoints answer 403 read_write_permission_required to a read key. See Authentication.
  • Sandbox suppliers. amadeus_aqc_dz_1 (Amadeus Algeria: only routes that touch Algeria; supports hold and void) and duffel_1 (Duffel: worldwide; instant ticketing only). See Sandbox.
  • Names. Requests use snake_case; older spellings still work and are answered with a warnings array. Responses keep their keys and add snake_case twins. See Conventions and naming.
  • Your agency. It is always the one of your API key. Every flights endpoint accepts an agency_id (older spelling agencyId) so that older clients keep working, and ignores it: do not send it.
  • Identifiers. A booking is found by its PNR, its supplier order id or its FX-Port id (a UUID), depending on the endpoint: each page says which.
  • Rate limits. Search and general endpoints 6,000 requests per minute per key; booking endpoints (book_flight, pay_order, cancel_order, get_order_quote, get_booking) 1,200. See Rate limits.
  • Size. A search response is 0.7 to 14 MB: send Accept-Encoding: gzip.

Important notes

Hold warning. Holding a flight can prevent you from creating another booking for the same passenger on the same airline and route with some suppliers. If you no longer need a hold, cancel it (cancel_order) to release the PNR. A displayed deadline is not a guarantee: an airline can release the PNR early, and only a successful pay_order confirms the issue. See Cancelling.

Fee accuracy. The exchange fees, refund fees and penalties in conditions are indicative and can differ from what is charged. Tell travelers that a ticket is "refundable for a fee" or "changeable for a fee"; do not quote exact amounts.

Check success, not only the status. After a booking, pay_order, get_order_quote, cancel_quote and confirm_cancel answer 200 with "success": false when the supplier refuses the request. See Errors.

Error responses

Every error carries a stable code: branch on errors[0].code, not on the text. The error body is described in Errors.

StatusTypical codesCause
400invalid_airport_code, invalid_date, invalid_cabin_class, missing_field, hold_not_supported, invalid_booking_typeThe request is wrong; read errors[0].field
401authentication_required, invalid_api_keyMissing, malformed or revoked key
402insufficient_balanceLive only: the balance cannot pay the booking
403read_write_permission_required, agency_not_activeA read key on a write endpoint, or an agency that is not approved. A booking of another agency is never a 403: it is a 404, like an unknown id
404search_not_found, offer_not_found, offer_not_priced, booking_not_foundThe id is unknown for your agency and environment
409duplicate_booking, booking_in_progress, invalid_booking_statusThe request is valid but not possible in the current state
410offer_expiredThe supplier withdrew the offer: search again
413request_too_largeThe body is too large
422supplier validation codesThe supplier rejected a passenger detail (a booking only)
429rate_limit_exceeded, concurrency_limit_exceededToo many requests, or too many streams open at the same time: wait for Retry-After
503all_suppliers_failed, supplier_busy, service_overloaded, supplier_temporarily_unavailable, balance_lock_timeoutNo supplier answered, a supplier lane is full, FX-Port is too busy to prepare a large answer, or another operation holds your balance for a moment: retry with backoff (Retry-After says how long when it is sent)

The codes of each endpoint are in its page.

Questions?

Write to the FX-Port developer team at [email protected] for integration help, feature requests or to report an API error. For a void, an exchange, a re-issue or a refund of an issued Amadeus ticket, use Request support on the booking page in the FX-Port dashboard or write to the same address.

PreviousStreaming search resultsNext Booking flows

On this page

  • Flight concepts
  • Endpoints
  • What every flight endpoint has in common
  • Important notes
  • Error responses
  • Questions?

© 2026 FX-Port

TermsPrivacy[email protected]