Make a test booking (NDC/XML)
This walkthrough creates a booking using our NDC/XML API:
- Get an access token
AirShopping: search for flightsOfferPrice: price the selected offerOrderCreate: book and payOrderRetrieve: retrieve completed order
The request and response samples come from our test environment. Only the API key and bearer token are redacted.
Before you start
Section titled “Before you start”| Test base URL | https://api-staging.flybreeze.com/zephyr/breeze-offer-order |
| Production base URL | https://api.flybreeze.com/zephyr/breeze-offer-order |
| Route used | PVU → SNA (Provo → Orange County). Operates daily, so any date works |
| Passenger | 1 adult, paying with the sandbox Visa test card 4111 1111 1111 1111 |
NDC versions. The examples use /ndc/v21.3/…. To run the same flow on another version, change the version segment (/ndc/v25.4/…). Requests are identical on every version, and through 25.4 so are these responses: only the <VersionNumber> in PayloadAttributes differs. On 26.2 the payment sections change shape; see the version differences. Each message also has a reference page covering the full schema: AirShopping, OfferPrice, OrderCreate, OrderRetrieve.
All POST requests need two headers:
Authorization: Bearer <access token from step 0>Content-Type: application/xmlStep 0: Get an access token
Section titled “Step 0: Get an access token”Exchange your API key for a JWT. The token is valid for 30 minutes (expires_in: 1800); when a request starts returning 401, fetch a new one.
curl -X POST "https://api-staging.flybreeze.com/zephyr/breeze-offer-order/auth/token" \ -H "x-api-key: <your-api-key>"{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…", "token_type": "Bearer", "expires_in": 1800}Send the token on every following request as Authorization: Bearer <access_token>.
If you hold a partner API key for several sellers, add -d '{ "sellerId": "<seller id>" }' (with -H "Content-Type: application/json") to get a token for a specific seller. See Partner API keys.
Step 1: AirShopping (search for flights)
Section titled “Step 1: AirShopping (search for flights)”POST /ndc/v21.3/AirShoppingThe DistributionChain identifies you (the seller) and Breeze (MX, the carrier); use your own seller OrgID in place of BZ. The Request carries the origin/destination criteria and the passenger list.
<?xml version="1.0" encoding="UTF-8"?><IATA_AirShoppingRQ 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> <FlightRequest xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <FlightRequestOriginDestinationsCriteria> <OriginDestCriteria> <DestArrivalCriteria> <IATA_LocationCode>SNA</IATA_LocationCode> </DestArrivalCriteria> <OriginDepCriteria> <Date>2026-09-15</Date> <IATA_LocationCode>PVU</IATA_LocationCode> </OriginDepCriteria> </OriginDestCriteria> </FlightRequestOriginDestinationsCriteria> </FlightRequest> <PaxList xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <Pax> <PaxID>PX1</PaxID> <PTC>ADT</PTC> </Pax> </PaxList> </Request></IATA_AirShoppingRQ>The response contains one Offer per fare product per flight (this search returned 8: four fare tiers on each of two flights). Everything an offer references (segments, journeys, price classes, service definitions) lives in DataLists.
From the offer you want, capture two values for the next step:
OfferID:OF-ce9e1a3b-6e36-43bd-92f6-3046eff2b8b7OfferItemID:OFI-ce9e1a3b-6e36-43bd-92f6-3046eff2b8b7-0-ADT
Offers expire at OfferExpirationTimeLimitDateTime (about 30 minutes). If you take longer, just search again.
<?xml version="1.0" encoding="UTF-8"?><IATA_AirShoppingRS xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage"> <Response> <DataLists xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <!-- BaggageAllowanceList, BaggageDisclosureList, PriceClassList, SeatProfileList and ServiceDefinitionList elided --> <DatedMarketingSegmentList> <DatedMarketingSegment> <Arrival> <AircraftScheduledDateTime>2026-09-15T20:30:00</AircraftScheduledDateTime> <IATA_LocationCode>SNA</IATA_LocationCode> </Arrival> <CarrierDesigCode>MX</CarrierDesigCode> <DatedMarketingSegmentId>DMS-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</DatedMarketingSegmentId> <DatedOperatingSegmentRefId>DOS-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</DatedOperatingSegmentRefId> <Dep> <AircraftScheduledDateTime>2026-09-15T19:31:00</AircraftScheduledDateTime> <IATA_LocationCode>PVU</IATA_LocationCode> </Dep> <MarketingCarrierFlightNumberText>1644</MarketingCarrierFlightNumberText> </DatedMarketingSegment> <!-- second flight elided --> </DatedMarketingSegmentList> <OriginDestList> <OriginDest> <DestCode>SNA</DestCode> <OriginCode>PVU</OriginCode> <OriginDestID>OD-UFZVU05BfDIwMjYwOTE1</OriginDestID> <PaxJourneyRefID>JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxJourneyRefID> </OriginDest> </OriginDestList> <PaxJourneyList> <PaxJourney> <Duration>PT1H59M</Duration> <PaxJourneyID>JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxJourneyID> <PaxSegmentRefID>SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxSegmentRefID> </PaxJourney> </PaxJourneyList> <PaxList> <Pax> <PaxID>PX1</PaxID> <PTC>ADT</PTC> </Pax> </PaxList> <PaxSegmentList> <PaxSegment> <CabinTypeAssociationChoice> <SegmentCabinType> <CabinTypeCode>5</CabinTypeCode> <CabinTypeName>Economy</CabinTypeName> </SegmentCabinType> </CabinTypeAssociationChoice> <DatedMarketingSegmentRefId>DMS-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</DatedMarketingSegmentRefId> <PaxSegmentID>SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxSegmentID> </PaxSegment> </PaxSegmentList> </DataLists> <OffersGroup xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <CarrierOffers> <Offer> <BaggageDisclosureRefID>BDISC-UEVSU09OQUxfSVRFTQ</BaggageDisclosureRefID> <BaggageDisclosureRefID>BDISC-Q0FSUllfT04</BaggageDisclosureRefID> <BaggageDisclosureRefID>BDISC-Q0hFQ0tFRF9CQUc</BaggageDisclosureRefID> <JourneyOverview> <JourneyPriceClass> <PaxJourneyRefID>JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxJourneyRefID> </JourneyPriceClass> </JourneyOverview> <OfferExpirationTimeLimitDateTime>2026-08-17T15:25:39.540Z</OfferExpirationTimeLimitDateTime> <OfferID>OF-ce9e1a3b-6e36-43bd-92f6-3046eff2b8b7</OfferID> <OfferItem> <FareDetail> <FareComponent> <CabinType> <CabinTypeCode>5</CabinTypeCode> <CabinTypeName>Economy</CabinTypeName> </CabinType> <FareBasisCode>CNO00</FareBasisCode> <PaxSegmentRefID>SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxSegmentRefID> <RBD> <RBD_Code>C</RBD_Code> </RBD> </FareComponent> <PaxRefID>PX1</PaxRefID> <Price> <BaseAmount CurCode="USD">13.58</BaseAmount> <TaxSummary> <TotalTaxAmount CurCode="USD">45.42</TotalTaxAmount> </TaxSummary> <TotalAmount CurCode="USD">59</TotalAmount> </Price> </FareDetail> <MandatoryInd>true</MandatoryInd> <OfferItemID>OFI-ce9e1a3b-6e36-43bd-92f6-3046eff2b8b7-0-ADT</OfferItemID> <Price> <BaseAmount CurCode="USD">13.58</BaseAmount> <TaxSummary> <TotalTaxAmount CurCode="USD">45.42</TotalTaxAmount> </TaxSummary> <TotalAmount CurCode="USD">59</TotalAmount> </Price> <Service> <OfferServiceAssociation> <PaxJourneyRef> <PaxJourneyRefID>JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxJourneyRefID> </PaxJourneyRef> </OfferServiceAssociation> <PaxRefID>PX1</PaxRefID> <ServiceID>SVC-FL-Y2U5ZTFhM2ItNmUzNi00M2JkLTkyZjYtMzA0NmVmZjJiOGI3fDB8QURU</ServiceID> </Service> </OfferItem> <OwnerCode>MX</OwnerCode> <TotalPrice> <BaseAmount CurCode="USD">13.58</BaseAmount> <TaxSummary> <TotalTaxAmount CurCode="USD">45.42</TotalTaxAmount> </TaxSummary> <TotalAmount CurCode="USD">59</TotalAmount> </TotalPrice> </Offer> <!-- 7 more Offer elements elided --> </CarrierOffers> </OffersGroup> <PaymentFunctions xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <PaymentSupportedMethod> <PaymentBrandCode>VI</PaymentBrandCode> <PaymentTypeCode>CC</PaymentTypeCode> </PaymentSupportedMethod> <!-- AX, DS, CA elided --> </PaymentFunctions> </Response> <PayloadAttributes> <Timestamp xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">2026-08-17T14:55:39.943Z</Timestamp> <VersionNumber xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">21.3</VersionNumber> </PayloadAttributes></IATA_AirShoppingRS>Step 2: OfferPrice (price the selected offer)
Section titled “Step 2: OfferPrice (price the selected offer)”POST /ndc/v21.3/OfferPriceReference the shopping offer by OfferRefID/OfferItemRefID and repeat the passenger list.
<?xml version="1.0" encoding="UTF-8"?><IATA_OfferPriceRQ 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> <DataLists xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <PaxList> <Pax> <PaxID>PX1</PaxID> <PTC>ADT</PTC> </Pax> </PaxList> </DataLists> <PricedOffer xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <SelectedOfferList> <SelectedOffer> <OfferRefID>OF-ce9e1a3b-6e36-43bd-92f6-3046eff2b8b7</OfferRefID> <OwnerCode>MX</OwnerCode> <SelectedOfferItem> <OfferItemRefID>OFI-ce9e1a3b-6e36-43bd-92f6-3046eff2b8b7-0-ADT</OfferItemRefID> <PaxRefID>PX1</PaxRefID> </SelectedOfferItem> </SelectedOffer> </SelectedOfferList> </PricedOffer> </Request></IATA_OfferPriceRQ>The priced offer also carries fare rules (CancelRestrictions / ChangeRestrictions), tax breakdown, baggage disclosures, and a fresh OfferExpirationTimeLimitDateTime.
<?xml version="1.0" encoding="UTF-8"?><IATA_OfferPriceRS xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage"> <Response> <DataLists xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <!-- same lists as AirShopping: segments, journeys, pax, baggage disclosures, seat profiles, elided --> </DataLists> <PricedOffer xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <BaggageDisclosureRefID>BDISC-UEVSU09OQUxfSVRFTQ</BaggageDisclosureRefID> <BaggageDisclosureRefID>BDISC-Q0FSUllfT04</BaggageDisclosureRefID> <BaggageDisclosureRefID>BDISC-Q0hFQ0tFRF9CQUc</BaggageDisclosureRefID> <JourneyOverview> <JourneyPriceClass> <PaxJourneyRefID>JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxJourneyRefID> </JourneyPriceClass> </JourneyOverview> <OfferExpirationTimeLimitDateTime>2026-08-17T15:25:39.540Z</OfferExpirationTimeLimitDateTime> <OfferID>OF-6a15d613-70e5-4277-a889-24e5b2acfbae</OfferID> <OfferItem> <FareDetail> <FareComponent> <CabinType> <CabinTypeCode>5</CabinTypeCode> <CabinTypeName>Economy</CabinTypeName> </CabinType> <CancelRestrictions> <AllowedModificationInd>true</AllowedModificationInd> <JourneyStageCode>Prior To Departure</JourneyStageCode> </CancelRestrictions> <CancelRestrictions> <AllowedModificationInd>false</AllowedModificationInd> <JourneyStageCode>No Show</JourneyStageCode> </CancelRestrictions> <ChangeRestrictions> <AllowedModificationInd>false</AllowedModificationInd> <ChangeTypeCode>Flight</ChangeTypeCode> </ChangeRestrictions> <FareBasisCode>CNO00</FareBasisCode> <PaxSegmentRefID>SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxSegmentRefID> <RBD> <RBD_Code>C</RBD_Code> </RBD> </FareComponent> <PaxRefID>PX1</PaxRefID> <Price> <BaseAmount CurCode="USD">13.58</BaseAmount> <TaxSummary> <Tax> <Amount CurCode="USD">5.6</Amount> <DescText>PVU-SNA</DescText> <TaxCode>AY</TaxCode> </Tax> <Tax> <Amount CurCode="USD">4.5</Amount> <DescText>PVU-SNA</DescText> <TaxCode>XF</TaxCode> </Tax> <Tax> <Amount CurCode="USD">5.3</Amount> <DescText>PVU-SNA</DescText> <TaxCode>ZP</TaxCode> </Tax> <Tax> <Amount CurCode="USD">1.02</Amount> <DescText>PVU-SNA</DescText> <TaxCode>US</TaxCode> </Tax> <Tax> <Amount CurCode="USD">29</Amount> <DescText>PVU-SNA</DescText> <TaxCode>TDC</TaxCode> </Tax> <TotalTaxAmount CurCode="USD">45.42</TotalTaxAmount> </TaxSummary> <TotalAmount CurCode="USD">59</TotalAmount> </Price> </FareDetail> <MandatoryInd>true</MandatoryInd> <OfferItemID>OFI-6a15d613-70e5-4277-a889-24e5b2acfbae-0-ADT</OfferItemID> <Price> <!-- same amounts as FareDetail price, elided --> <TotalAmount CurCode="USD">59</TotalAmount> </Price> <Service> <OfferServiceAssociation> <PaxJourneyRef> <PaxJourneyRefID>JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxJourneyRefID> </PaxJourneyRef> </OfferServiceAssociation> <PaxRefID>PX1</PaxRefID> <ServiceID>SVC-FL-NmExNWQ2MTMtNzBlNS00Mjc3LWE4ODktMjRlNWIyYWNmYmFlfDB8QURU</ServiceID> </Service> </OfferItem> <OwnerCode>MX</OwnerCode> <TotalPrice> <!-- same amounts as above, elided --> <TotalAmount CurCode="USD">59</TotalAmount> </TotalPrice> </PricedOffer> </Response> <PayloadAttributes> <Timestamp xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">2026-08-17T14:56:01.687Z</Timestamp> <VersionNumber xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">21.3</VersionNumber> </PayloadAttributes></IATA_OfferPriceRS>Step 3: OrderCreate (book and pay)
Section titled “Step 3: OrderCreate (book and pay)”POST /ndc/v21.3/OrderCreateThree parts:
CreateOrder: accepts the priced offer (OF-6a15d613-…from step 2).DataLists: the real passenger (name, birthdate, gender) and the booking primary contact. Leave the primaryContactInfounreferenced by anyPax; aContactInfoRefIDon a passenger marks a per-passenger contact instead. See contacts.PaxIDmust match the ID used while shopping (PX1).PaymentFunctions: card payment.Amountmust equal the pricedTotalAmount(CurCodeUSD). In the test environment use the Visa test card below; no real charge is made. See payments.
<?xml version="1.0" encoding="UTF-8"?><IATA_OrderCreateRQ 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> <CreateOrder xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <AcceptSelectedQuotedOfferList> <SelectedPricedOffer> <OfferRefID>OF-6a15d613-70e5-4277-a889-24e5b2acfbae</OfferRefID> <OwnerCode>MX</OwnerCode> <SelectedOfferItem> <OfferItemRefID>OFI-6a15d613-70e5-4277-a889-24e5b2acfbae-0-ADT</OfferItemRefID> <PaxRefID>PX1</PaxRefID> </SelectedOfferItem> </SelectedPricedOffer> </AcceptSelectedQuotedOfferList> </CreateOrder> <DataLists xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <ContactInfoList> <ContactInfo> <ContactInfoID>CT1</ContactInfoID> <EmailAddress> </EmailAddress> <Phone> <PhoneNumber>8015551212</PhoneNumber> </Phone> <PostalAddress> <CityName>Los Angeles</CityName> <CountryCode>US</CountryCode> <CountrySubDivisionName>California</CountrySubDivisionName> <PostalCode>90210</PostalCode> <StreetText>123 Main St</StreetText> </PostalAddress> </ContactInfo> </ContactInfoList> <PaxList> <Pax> <Individual> <Birthdate>1980-01-01</Birthdate> <GenderCode>M</GenderCode> <GivenName>John</GivenName> <Surname>Doe</Surname> </Individual> <PaxID>PX1</PaxID> <PTC>ADT</PTC> </Pax> </PaxList> </DataLists> <PaymentFunctions xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <PaymentProcessingDetails> <Amount CurCode="USD">59.00</Amount> <Payer> <PayerName> <IndividualName> <GivenName>John</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_OrderCreateRQ>Success returns 201 with an IATA_OrderViewRS. The key fields:
OrderID:MXYTG780SE6I, the order’s identity for every later call.BookingID:JE88TR, the underlying reservation-system record locator.- Order
StatusCode:OPENED; the flight service inside isCONFIRMED. PaymentStatusCode: may still readPENDINGin the create response while the charge settles; retrieve the order (step 4) to see it flip toSUCCESSFUL.
<?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> <ContactInfo> <ContactInfoID>CTC-UA</ContactInfoID> <EmailAddress> </EmailAddress> <Phone> <ContactTypeText>Other</ContactTypeText> <PhoneNumber>+18015551212</PhoneNumber> </Phone> </ContactInfo> </ContactInfoList> <DatedMarketingSegmentList> <DatedMarketingSegment> <Arrival> <AircraftScheduledDateTime>2026-09-15T20:30:00</AircraftScheduledDateTime> <IATA_LocationCode>SNA</IATA_LocationCode> </Arrival> <CarrierDesigCode>MX</CarrierDesigCode> <DatedMarketingSegmentId>DMS-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</DatedMarketingSegmentId> <DatedOperatingSegmentRefId>DOS-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</DatedOperatingSegmentRefId> <Dep> <AircraftScheduledDateTime>2026-09-15T19:31:00</AircraftScheduledDateTime> <IATA_LocationCode>PVU</IATA_LocationCode> </Dep> <MarketingCarrierFlightNumberText>1644</MarketingCarrierFlightNumberText> </DatedMarketingSegment> </DatedMarketingSegmentList> <!-- DatedOperatingLegList, DatedOperatingSegmentList, OriginDestList, PaxJourneyList, PaxSegmentList elided --> <PaxList> <Pax> <ContactInfoRefID>CTC-UA</ContactInfoRefID> <Individual> <Birthdate>1980-01-01</Birthdate> <GenderCode>M</GenderCode> <GivenName>John</GivenName> <IndividualID>PAX-QURULTE</IndividualID> <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"> <CreationDateTime>2026-08-17T14:57:57.337Z</CreationDateTime> <LastModifiedDateTime>2026-08-17T14:57:57.337Z</LastModifiedDateTime> <OrderID>MXYTG780SE6I</OrderID> <OrderItem> <FareDetail> <FareComponent> <CabinType> <CabinTypeCode>5</CabinTypeCode> <CabinTypeName>Economy</CabinTypeName> </CabinType> <FareBasisCode>CNO00</FareBasisCode> <PaxSegmentRefID>SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxSegmentRefID> <RBD> <RBD_Code>C</RBD_Code> </RBD> </FareComponent> <PaxRefID>ADT-1</PaxRefID> </FareDetail> <OrderItemID>OOI-FL-UHxQQVgtUVVSVUxURXxTfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDQ</OrderItemID> <OwnerCode>MX</OwnerCode> <Price> <BaseAmount CurCode="USD">13.58</BaseAmount> <TaxSummary> <Tax> <Amount CurCode="USD">5.6</Amount> <TaxCode>AY</TaxCode> </Tax> <Tax> <Amount CurCode="USD">4.5</Amount> <TaxCode>XF</TaxCode> </Tax> <Tax> <Amount CurCode="USD">5.3</Amount> <TaxCode>ZP</TaxCode> </Tax> <Tax> <Amount CurCode="USD">1.02</Amount> <TaxCode>US</TaxCode> </Tax> <Tax> <Amount CurCode="USD">29</Amount> <TaxCode>TDC</TaxCode> </Tax> <TotalTaxAmount CurCode="USD">45.42</TotalTaxAmount> </TaxSummary> <TotalAmount CurCode="USD">59</TotalAmount> </Price> <Service> <BookingRef> <BookingEntity> <Carrier> <AirlineDesigCode>MX</AirlineDesigCode> </Carrier> </BookingEntity> <BookingID>JE88TR</BookingID> <BookingRefTypeCode>6</BookingRefTypeCode> </BookingRef> <DeliveryStatusCode>CONFIRMED</DeliveryStatusCode> <OrderServiceAssociation> <PaxSegmentRef> <PaxSegmentRefID>SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxSegmentRefID> </PaxSegmentRef> </OrderServiceAssociation> <PaxRefID>ADT-1</PaxRefID> <ServiceID>SVC-FL-UEFYLVFVUlVMVEV8UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</ServiceID> <StatusCode>CONFIRMED</StatusCode> </Service> <StatusCode>ACTIVE</StatusCode> </OrderItem> <OwnerCode>MX</OwnerCode> <StatusCode>OPENED</StatusCode> <TotalPrice> <!-- same amounts as the order item, elided --> <TotalAmount CurCode="USD">59</TotalAmount> </TotalPrice> </Order> </Response> <PayloadAttributes> <Timestamp xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">2026-08-17T14:57:58.163Z</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> <PaymentProcessingSummaryPaymentMethod> <PaymentCard> <CardBrandCode>VI</CardBrandCode> <MaskedCardID>x1111</MaskedCardID> </PaymentCard> </PaymentProcessingSummaryPaymentMethod> <PaymentStatusCode>PENDING</PaymentStatusCode> </PaymentProcessingSummary> </PaymentFunctions></IATA_OrderViewRS>Step 4: OrderRetrieve (read the order back)
Section titled “Step 4: OrderRetrieve (read the order back)”POST /ndc/v21.3/OrderRetrieve<?xml version="1.0" encoding="UTF-8"?><IATA_OrderRetrieveRQ 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> <OrderValidationFilterCriteria xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderFilterCriteria> <OrderID>MXYTG780SE6I</OrderID> <OwnerCode>MX</OwnerCode> </OrderFilterCriteria> </OrderValidationFilterCriteria> </Request></IATA_OrderRetrieveRQ>The response is the same IATA_OrderViewRS shape as step 3, with the payment now settled:
<PaymentFunctions> <PaymentProcessingSummary xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <Amount CurCode="USD">59</Amount> <PaymentCommitmentDateTime>2026-08-17T14:57:58.527Z</PaymentCommitmentDateTime> <PaymentID>PAY-MQ</PaymentID> <PaymentProcessingSummaryPaymentMethod> <PaymentCard> <CardBrandCode>VI</CardBrandCode> <MaskedCardID>x1111</MaskedCardID> </PaymentCard> </PaymentProcessingSummaryPaymentMethod> <PaymentStatusCode>SUCCESSFUL</PaymentStatusCode> </PaymentProcessingSummary> </PaymentFunctions>That’s it: you have a paid, confirmed test booking.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Cause & fix |
|---|---|
401 on any call | Token expired (30-minute lifetime). Re-run step 0. |
ERR-3000 / ERR-3001 on OfferPrice or OrderCreate | The referenced offer was not found or has expired. Start again from AirShopping. |
ERR-4001 “order could not be created” on OrderCreate | Most common in testing: a passenger with the same name already holds a booking on the same flight. The reservation system rejects duplicate passenger names. Change the passenger name or the travel date between test bookings. |
Payment shows PENDING after create | Not an error; retrieve the order and it will read SUCCESSFUL. |
Next steps
Section titled “Next steps”Keep going with the same order:
- Hold and pay: if you created without
PaymentFunctions - Add seats: also covers including a seat in the initial OrderCreate
- Add bags & extras: also covers including bags in the initial OrderCreate
- Change an order
- Cancel an order