Skip to main content

Cancel an order (XML)

Cancel a paid order in two steps — quote, then commit:

  1. OrderReshop — quote the cancellation (penalty and refund)
  2. OrderChange — accept the cancelled offer

There is no standalone OrderCancel operation in these NDC versions — cancellation rides IATA_OrderReshopRQ + IATA_OrderChangeRQ. This cancels the order built up in the previous walkthroughs ($59 fare + $14 seat + $35 bag = $108 paid). Examples were captured live on v21.3; v25.4 is identical apart from the URL segment and the response <VersionNumber>.

Step 1 — OrderReshop — quote the cancellation

POST /ndc/v21.3/OrderReshop

UpdateOrder carries an empty CancelOrderRef — quote cancelling the whole order:

IATA_OrderReshopRQ
<?xml version="1.0" encoding="UTF-8"?>
<IATA_OrderReshopRQ xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage">
<DistributionChain>
<DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Ordinal>1</Ordinal>
<OrgRole>Seller</OrgRole>
<ParticipatingOrg>
<OrgID>BZ</OrgID>
</ParticipatingOrg>
</DistributionChainLink>
<DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Ordinal>2</Ordinal>
<OrgRole>Carrier</OrgRole>
<ParticipatingOrg>
<OrgID>MX</OrgID>
</ParticipatingOrg>
</DistributionChainLink>
</DistributionChain>
<Request>
<OrderRefID xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">MXYTG780SE6I</OrderRefID>
<UpdateOrder xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<CancelOrderRef/>
</UpdateOrder>
</Request>
</IATA_OrderReshopRQ>

The quote comes back as a reshop offer with one DeleteOrderItem per order item and a PriceDifferential. DifferentialTypeCode Refund with DiffPrice $108 means a full refund — this order was booked less than 24 hours ago for travel more than 7 days out. Capture the OfferID for step 2:

IATA_OrderReshopRS — 200 OK
<?xml version="1.0" encoding="UTF-8"?>
<IATA_OrderReshopRS xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage">
<Response>
<Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<OrderID>MXYTG780SE6I</OrderID>
<OwnerCode>MX</OwnerCode>
</Order>
<ReshopResults xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<ReshopOffers>
<Offer>
<OfferID>OF-b82ce552-bc1f-4ccb-a9bf-030d5b916661</OfferID>
<OwnerCode>MX</OwnerCode>
<DeleteOrderItem>
<ExistingOrderItem>
<OrderItemRefID>OOI-FL-UHxQQVgtUVVSVUxURXxTfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDQ</OrderItemRefID>
</ExistingOrderItem>
<OfferItemID>OFI-CX-T09JLUZMLVVIeFFRVmd0VVZWU1ZVeFVSWHhUZkZCV1ZWTk9RWHd5TURJMk1Ea3hOWHhOV0RFMk5EUXww</OfferItemID>
<PriceDifferential>
<DifferentialTypeCode>Refund</DifferentialTypeCode>
<DiffPrice>
<Price>
<TotalAmount CurCode="USD">108.00</TotalAmount>
</Price>
</DiffPrice>
<NewPrice>
<Price>
<TotalAmount CurCode="USD">0.00</TotalAmount>
</Price>
</NewPrice>
<OldPrice>
<Price>
<TotalAmount CurCode="USD">108.00</TotalAmount>
</Price>
</OldPrice>
</PriceDifferential>
</DeleteOrderItem>
</Offer>
</ReshopOffers>
</ReshopResults>
</Response>
<PayloadAttributes>
<Timestamp xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">2026-08-17T15:29:38.424Z</Timestamp>
<VersionNumber xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">21.3</VersionNumber>
</PayloadAttributes>
</IATA_OrderReshopRS>

Outside the 24-hour window the refund follows the fare's cancellation policy. Applicable penalties are disclosed on every priced offer's CancelRestrictions. The value may be returned as flight credit rather than to the original form of payment.

Step 2 — OrderChange — commit the cancel

POST /ndc/v21.3/OrderChange

ChangeOrderChoice > AcceptCancelledOffer references just the quoted cancel offer's OfferID — a removal has no items to select:

IATA_OrderChangeRQ
<?xml version="1.0" encoding="UTF-8"?>
<IATA_OrderChangeRQ xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage">
<DistributionChain>
<DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Ordinal>1</Ordinal>
<OrgRole>Seller</OrgRole>
<ParticipatingOrg>
<OrgID>BZ</OrgID>
</ParticipatingOrg>
</DistributionChainLink>
<DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Ordinal>2</Ordinal>
<OrgRole>Carrier</OrgRole>
<ParticipatingOrg>
<OrgID>MX</OrgID>
</ParticipatingOrg>
</DistributionChainLink>
</DistributionChain>
<Request>
<ChangeOrderChoice xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<AcceptCancelledOffer>
<OfferID>OF-b82ce552-bc1f-4ccb-a9bf-030d5b916661</OfferID>
<OwnerCode>MX</OwnerCode>
</AcceptCancelledOffer>
</ChangeOrderChoice>
<Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<OrderID>MXYTG780SE6I</OrderID>
<OwnerCode>MX</OwnerCode>
</Order>
</Request>
</IATA_OrderChangeRQ>

The order closes — StatusCode CLOSED, total $0, no order items — and one refund per original payment appears as a negative PaymentProcessingSummary back to the card:

IATA_OrderViewRS — 200 OK (trimmed)
<?xml version="1.0" encoding="UTF-8"?>
<IATA_OrderViewRS xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage">
<Response>
<DataLists xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<!-- ContactInfoList and PaxList elided -->
</DataLists>
<Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<CreationDateTime>2026-08-17T14:57:57.337Z</CreationDateTime>
<LastModifiedDateTime>2026-08-17T15:30:07.29Z</LastModifiedDateTime>
<OrderID>MXYTG780SE6I</OrderID>
<OwnerCode>MX</OwnerCode>
<StatusCode>CLOSED</StatusCode>
<TotalPrice>
<BaseAmount CurCode="USD">0</BaseAmount>
<TotalAmount CurCode="USD">0</TotalAmount>
</TotalPrice>
</Order>
</Response>
<PayloadAttributes>
<Timestamp xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">2026-08-17T15:30:08.745Z</Timestamp>
<VersionNumber xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">21.3</VersionNumber>
</PayloadAttributes>
<PaymentFunctions>
<PaymentProcessingSummary xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Amount CurCode="USD">59</Amount>
<PaymentID>PAY-MQ</PaymentID>
<PaymentStatusCode>SUCCESSFUL</PaymentStatusCode>
<!-- card details elided -->
</PaymentProcessingSummary>
</PaymentFunctions>
<!-- the original $14 and $35 payments elided -->
<PaymentFunctions>
<PaymentProcessingSummary xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Amount CurCode="USD">-59</Amount>
<PaymentID>PAY-NA</PaymentID>
<PaymentStatusCode>PENDING</PaymentStatusCode>
<!-- card details elided -->
</PaymentProcessingSummary>
</PaymentFunctions>
<PaymentFunctions>
<PaymentProcessingSummary xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Amount CurCode="USD">-14</Amount>
<PaymentID>PAY-NQ</PaymentID>
<PaymentStatusCode>PENDING</PaymentStatusCode>
</PaymentProcessingSummary>
</PaymentFunctions>
<PaymentFunctions>
<PaymentProcessingSummary xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">
<Amount CurCode="USD">-35</Amount>
<PaymentID>PAY-Ng</PaymentID>
<PaymentStatusCode>PENDING</PaymentStatusCode>
</PaymentProcessingSummary>
</PaymentFunctions>
</IATA_OrderViewRS>

Refund payments start PENDING and settle asynchronously. A cancelled order stays retrievable — OrderRetrieve keeps returning it with StatusCode CLOSED.

Notes

  • Hold (unpaid) bookings don't need a quote — cancel them with ChangeOrderChoice > CancelUnpaidOrder in a single OrderChange.
  • The quote is informational — the commit recomputes penalty and refund from live booking state at execution time.
  • POST /ndc/{version}/OrderCancel exists as a route but returns ERR-5000 (501 Not Implemented) — use the flow above.

Full schema reference: OrderReshop and OrderChange.