OrderChange
IATA_OrderChangeRQ modifies an existing booking: passenger, contact, and payment changes, ancillary seat/service acceptance, cancelling unpaid orders, and committing reshop offers. It is the XML counterpart of the JSON change order. Returns an IATA_OrderViewRS with the updated order.
POST /ndc/{version}/OrderChange with version one of v21.3, v24.1, v25.4, or v26.2.
Authorization
Section titled “Authorization”OrderChange requires full transaction (book) permissions on the API key.
See payments for accepted methods and the sandbox test card.
Request
Section titled “Request”Every request carries Order with OrderID (record locator) and OwnerCode MX. The change itself is one of:
ChangeOrderChoice > UpdatePax > PaxSharingPref: move the named passenger to a new booking. See Split order below. OnePaxRefIDper request.ChangeOrderChoice > UpdatePax+DataLists.PaxList: patch a passenger’s details, including the passenger’s own contact via a Pax-referencedContactInfo(email/phone; a new row is skipped when it merely restates the primary contact, so full echoes are safe). TheUpdatePaxelement may carry at most 4 travel documents (passports, visas, and redress cases combined).DataLists.ContactInfoListalone (noChangeOrderChoice): replace the primary booking contact with oneContactInfocarrying anIndividualname; other contact types are rejected. When aChangeOrderChoiceis present, contacts are passenger data forUpdatePax. See contacts.ChangeOrderChoice > CancelUnpaidOrder: cancel a hold booking.PaymentFunctions(noChangeOrderChoice): pay the outstanding balance and confirm a hold.ChangeOrderChoice > AcceptSelectedQuotedOfferListreferencingOFI-ST-*/OFI-SR-*items from SeatAvailability / ServiceList.ChangeOrderChoice > AcceptRepricedOrderreferencing an offer priced by OrderQuote.ChangeOrderChoice > AcceptCancelledOfferreferencing a cancellation quote from OrderReshop.
AcceptSelectedQuotedOfferList is for post-sale seats and services only. Reshop offers use AcceptRepricedOrder; cancellation quotes use AcceptCancelledOffer.
Pay and confirm a hold
Section titled “Pay and confirm a hold”<?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> <Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderID>ABC123</OrderID> <OwnerCode>MX</OwnerCode> </Order> <PaymentFunctions xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <PaymentProcessingDetails> <Amount CurCode="USD">250</Amount> <Payer> <PayerName> <IndividualName> <GivenName>Jane</GivenName> <Surname>Doe</Surname> </IndividualName> </PayerName> <PaymentAddress> <PostalAddress> <CityName>Los Angeles</CityName> <CountryCode>US</CountryCode> <CountrySubDivisionName>California</CountrySubDivisionName> <PostalCode>90210</PostalCode> <StreetText>123 Main St</StreetText> </PostalAddress> </PaymentAddress> </Payer> <PaymentMethod> <PaymentCard> <CardBrandCode>VI</CardBrandCode> <CardNumber>4111111111111111</CardNumber> <CardSecurityCode>123</CardSecurityCode> <ExpirationDate>1227</ExpirationDate> </PaymentCard> </PaymentMethod> </PaymentProcessingDetails> </PaymentFunctions> </Request></IATA_OrderChangeRQ>Update a passenger
Section titled “Update a passenger”<?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"> <UpdatePax> <Current> <PaxRefID>ADT-1</PaxRefID> </Current> </UpdatePax> </ChangeOrderChoice> <DataLists xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <PaxList> <Pax> <Individual> <Birthdate>1990-05-15</Birthdate> <GenderCode>F</GenderCode> <GivenName>Jane</GivenName> <Surname>Doe</Surname> </Individual> <PaxID>ADT-1</PaxID> <PTC>ADT</PTC> </Pax> </PaxList> </DataLists> <Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderID>ABC123</OrderID> <OwnerCode>MX</OwnerCode> </Order> </Request></IATA_OrderChangeRQ>Cancel an unpaid order
Section titled “Cancel an unpaid order”<?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"> <CancelUnpaidOrder> <OrderRefID>ABC123</OrderRefID> <OwnerCode>MX</OwnerCode> </CancelUnpaidOrder> </ChangeOrderChoice> <Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderID>ABC123</OrderID> <OwnerCode>MX</OwnerCode> </Order> </Request></IATA_OrderChangeRQ>Ancillary acceptance rules
Section titled “Ancillary acceptance rules”Only BOO-generated a-la-carte offer item IDs (OFI-ST-*, OFI-SR-*) are accepted; raw seat unit keys, SSR-only IDs, or client-generated IDs are rejected. Those IDs carry identity only; price is recomputed from live booking state before commit:
- Accepted items creating a positive balance without
PaymentFunctionsare rejected before commit, except on a held (unpaid) order, where the change commits and grows the balance due by the payment time limit. - With zero balance and no payment, the change commits.
- With payment supplied,
PaymentProcessingDetails > Amountmust match the live positive balance before payment is collected. A mismatch is rejected withERR-3006. - Negative balances are rejected.
- If the reservation system rejects a seat/service (unavailable, already assigned, duplicate), the failed change is surfaced; re-query availability before retrying.
Response
Section titled “Response”The updated order as IATA_OrderViewRS, the same shape as OrderRetrieve.
<?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> <!-- Contacts listed without a ContactInfoRefID are associated with the entire order. A ContactInfoRefID value indicates an association to a specific passenger. --> </ContactInfoList> <PaxList> <Pax> <Individual> <GivenName>Jane</GivenName> <Surname>Doe</Surname> </Individual> <PaxID>PAX-example</PaxID> <PTC>ADT</PTC> </Pax> </PaxList> <!-- OriginDestList, PaxJourneyList, PaxSegmentList, DatedMarketingSegmentList, DatedOperatingSegmentList, DatedOperatingLegList, PriceClassList, ServiceDefinitionList, BaggageAllowanceList (present when bags are booked; bag service definitions link to it via ServiceDefinitionAssociation/BaggageAllowanceRef) --> </DataLists> <Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderID>ABC123</OrderID> <OrderItem> <FareDetail> <FareComponent> <PaxSegmentRefID>SEG-example</PaxSegmentRefID> </FareComponent> <PaxRefID>PAX-example</PaxRefID> </FareDetail> <OrderItemID>OOI-FL-example</OrderItemID> <Price> <BaseAmount CurCode="USD">91.5</BaseAmount> <TaxSummary> <TotalTaxAmount CurCode="USD">7.5</TotalTaxAmount> </TaxSummary> <TotalAmount CurCode="USD">99</TotalAmount> </Price> <StatusCode>CANCELLED</StatusCode> <!-- purchased ancillaries appear as further OrderItem / Service entries --> </OrderItem> <StatusCode>CLOSED</StatusCode> <TotalPrice> <BaseAmount CurCode="USD">91.5</BaseAmount> <TaxSummary> <TotalTaxAmount CurCode="USD">7.5</TotalTaxAmount> </TaxSummary> <TotalAmount CurCode="USD">99</TotalAmount> </TotalPrice> </Order> <!-- TicketDocInfo elements when tickets exist; Warning elements when applicable --> </Response></IATA_OrderViewRS>Split order
Section titled “Split order”UpdatePax > PaxSharingPref moves the named passenger (and any lap infant associated with them) to a new booking with its own record locator. It is the NDC equivalent of the JSON split order.
Send one PaxRefID per request. To move multiple passengers, send one request per passenger. Lap infants are not named; they follow their adult automatically.
SharingInd must be false.
Split request
Section titled “Split request”<?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"> <UpdatePax> <PaxSharingPref> <PaxRefID>ADT-2</PaxRefID> <SharingInd>false</SharingInd> </PaxSharingPref> </UpdatePax> </ChangeOrderChoice> <Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderID>ABC123</OrderID> <OwnerCode>MX</OwnerCode> </Order> </Request></IATA_OrderChangeRQ>Split response
Section titled “Split response”The response is a normal IATA_OrderViewRS for the original (parent) order, reflecting only the passengers who stayed. The Warning element carries the new order’s ID and record locator:
Passengers ADT-2 moved to order MX0000000001 (record locator CHILD1).Retrieve the child order separately using its record locator from that warning.
Split validation
Section titled “Split validation”| Rule | Error |
|---|---|
| Passenger reference not found on the order | ERR-1004 |
| A lap infant ID listed directly | ERR-1004 |
| The named passenger is the only one on the order | ERR-1005 |
| Either resulting order would have no adult | ERR-7009 |
| Any journey has already departed | ERR-4007 |
OrderChange errors
Section titled “OrderChange errors”| Code | HTTP status | Cause |
|---|---|---|
ERR-1000 | 400 | Malformed XML. |
ERR-1002 | 404 | Unsupported version segment in the path. |
ERR-1003 | 400 | Missing required element. |
ERR-1004 | 400 | Invalid field value or unsupported ancillary offer item ID. |
ERR-3004 | 400 | Reshop offer must be priced with OrderQuote before it can be accepted. |
ERR-3006 | 409 | Live amount due does not match the stated payment amount. |
ERR-4000 | 404 | Order not found. |
ERR-4002 | 400 | Requested change could not be applied. |
ERR-4007 | 400 | Journey already flown, or a passenger boarded or no-showed. |
ERR-6000 | 422 | Payment method not supported. |
ERR-6001 | 422 | Card brand not supported. |
ERR-6002 | 400 | Payment rejected. |
ERR-6005 | 503 | Payment processing timed out. |
ERR-7007 | 400 | Passenger update rejected. |
ERR-7009 | 422 | Split would leave a child without an adult on either resulting order. |
ERR-8000 | 401 | Missing or invalid API key or bearer token. |
ERR-8001 | 403 | API key lacks full transaction permissions. |
ERR-8002 | 503 | Authentication store unavailable. |
ERR-9003 | 500 | Booking change failed upstream. |