FX-Port API
Flights

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

FieldDescription
order_idPreferred. Supplier order ID returned when the hold was created.
booking_idFX-Port booking ID or stored booking reference.
pnrAirline 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

FieldMeaning
booking.status"cancelled" on success
booking.availableActionsEmpty once cancelled — no further actions apply to this order
cancellation.deletedtrue when the reservation was fully released with the supplier
cancellation.refundAmountAlways 0 here — a held reservation was never paid, so there's nothing to refund
cancellation.messageHuman-readable outcome, useful for support/debug logs

Cancelling a hold does not touch your agency balance — nothing was ever debited for an unpaid reservation.

On this page