POST /api/v1/flights/cancel_order
Cancel a held (unpaid) flight reservation to release the PNR. This is not a refund.
Cancel a held (unpaid) reservation. This deletes the reservation and releases the PNR with the airline.
Permission: Read+Write
This is NOT a refund and does NOT apply to issued (paid) tickets. A held reservation was never paid, so nothing is refunded — the reservation is simply cancelled and the PNR released.
For refund / void / exchange of an issued ticket, see Post-booking operations (currently handled manually by the FX-Port team through dashboard Request support or [email protected]).
Why cancel a hold
If you create a hold and then abandon it, the airline may refuse a new booking for the same passenger on the same route while the un-voided reservation is pending. Always cancel the old hold to release the PNR before re-booking that passenger.
Identifying the booking
| Field | Description |
|---|---|
order_id | Preferred. Supplier order ID returned when the hold was created. |
booking_id | FX-Port booking ID or stored booking reference. |
pnr | Airline PNR returned when the hold was created. |
Prefer order_id. PNRs are not globally unique across suppliers/airlines.
Send only one identifier. FX-Port resolves it to the supplier order ID before cancelling the hold.
Request example
curl --request POST \
--url https://api.fx-port.com/api/v1/flights/cancel_order \
--header 'Authorization: Bearer fxp_test_YOUR_KEY' \
--header 'Content-Type: application/json' \
--data '{
"order_id": "eJzTd9ePMo-0dDQFAAsmAj8"
}'Response example
{
"environment": "sandbox",
"success": true,
"requestId": "cc91fce4",
"orderId": "eJzTd9ePMo-0dDQFAAsmAj8",
"processingTime": 1.243,
"booking": {
"reference": "Z7Y9A5",
"status": "cancelled",
"pnr": "Z7Y9A5",
"type": "hold",
"createdAt": "2026-08-27T18:15:15.920345+00:00",
"cancelledAt": "2026-08-27T18:15:23.952210",
"availableActions": [],
"voidableUntil": null,
"cancellation": {
"type": "void",
"deleted": true,
"deletedAt": "2026-08-27T18:15:23.952210"
}
},
"supplier": {
"id": "amadeus_aqc_dz_1",
"technology": "amadeus_aqc",
"name": "Amadeus Algeria"
},
"cancellation": {
"status": "deleted",
"deleted": true,
"deletedAt": "2026-08-27T18:15:23.952210",
"refundAmount": 0,
"refundCurrency": "DZD",
"refundTo": null,
"message": "Reservation deleted successfully."
},
"meta": {
"supportHold": true,
"supportVoid": true,
"voidDeadline": "2026-08-27T23:00:00Z"
}
}Field meanings
| Field | Meaning |
|---|---|
booking.status | "cancelled" on success |
booking.availableActions | Empty once cancelled — no further actions apply to this order |
cancellation.deleted | true when the reservation was fully released with the supplier |
cancellation.refundAmount | Always 0 here — a held reservation was never paid, so there's nothing to refund |
cancellation.message | Human-readable outcome, useful for support/debug logs |
Cancelling a hold does not touch your agency balance — nothing was ever debited for an unpaid reservation.
POST /api/v1/flights/pay_order
Pay a held order, issue tickets, and debit the agency balance. Requires Read+Write permission.
POST /api/v1/flights/get_booking
Retrieve full booking details through one booking_id field that accepts an internal UUID, supplier order ID, or PNR. Includes the PDF download link.