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
| Test base URL | https://api-staging.flybreeze.com/breeze-offer-order |
| Production base URL | https://api.flybreeze.com/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/xml
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/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>.
Step 1 — AirShopping — search for flights
POST /ndc/v21.3/AirShopping
The 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
POST /ndc/v21.3/OfferPrice
Reference 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>
OfferPrice returns a new OfferID/OfferItemID — here OF-6a15d613-…, not the OF-ce9e1a3b-… you sent. OrderCreate only accepts the priced IDs. Also capture the guaranteed <TotalAmount>: OrderCreate needs the exact amount.
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
POST /ndc/v21.3/OrderCreate
Three 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
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
| 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
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