Skip to content
BreezePro docs

Make a test booking (NDC/XML)

This walkthrough creates a booking using our NDC/XML API:

  1. Get an access token
  2. AirShopping: search for flights
  3. OfferPrice: price the selected offer
  4. OrderCreate: book and pay
  5. OrderRetrieve: retrieve completed order

The request and response samples come from our test environment. Only the API key and bearer token are redacted.

Test base URLhttps://api-staging.flybreeze.com/zephyr/breeze-offer-order
Production base URLhttps://api.flybreeze.com/zephyr/breeze-offer-order
Route usedPVU → SNA (Provo → Orange County). Operates daily, so any date works
Passenger1 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

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.

Terminal window
curl -X POST "https://api-staging.flybreeze.com/zephyr/breeze-offer-order/auth/token" \
-H "x-api-key: <your-api-key>"
Response: 200 OK
{
"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.

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.

IATA_AirShoppingRQ
<?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-3046eff2b8b7
  • OfferItemID: OFI-ce9e1a3b-6e36-43bd-92f6-3046eff2b8b7-0-ADT

Offers expire at OfferExpirationTimeLimitDateTime (about 30 minutes). If you take longer, just search again.

IATA_AirShoppingRS: 200 OK (one offer shown, 7 elided)
<?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/OfferPrice

Reference the shopping offer by OfferRefID/OfferItemRefID and repeat the passenger list.

IATA_OfferPriceRQ
<?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.

IATA_OfferPriceRS: 200 OK (trimmed)
<?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>
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 primary ContactInfo unreferenced by any Pax; a ContactInfoRefID on a passenger marks a per-passenger contact instead. See contacts. PaxID must match the ID used while shopping (PX1).
  • PaymentFunctions: card payment. Amount must equal the priced TotalAmount (CurCode USD). In the test environment use the Visa test card below; no real charge is made. See payments.
IATA_OrderCreateRQ
<?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>
<EmailAddressText>[email protected]</EmailAddressText>
</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 is CONFIRMED.
  • PaymentStatusCode: may still read PENDING in the create response while the charge settles; retrieve the order (step 4) to see it flip to SUCCESSFUL.
IATA_OrderViewRS: 201 Created
<?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>
<EmailAddressText>[email protected]</EmailAddressText>
</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
IATA_OrderRetrieveRQ
<?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:

IATA_OrderViewRS: 200 OK (payment section)
<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.

SymptomCause & fix
401 on any callToken expired (30-minute lifetime). Re-run step 0.
ERR-3000 / ERR-3001 on OfferPrice or OrderCreateThe referenced offer was not found or has expired. Start again from AirShopping.
ERR-4001 “order could not be created” on OrderCreateMost 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 createNot an error; retrieve the order and it will read SUCCESSFUL.

Keep going with the same order: