Core concepts
Every NDC 24.4 message shares the same envelope, namespaces, and extension mechanism. Understanding them once makes all 48 messages read the same way.
The message envelope
A message root (e.g. IATA_AirShoppingRQ) wraps a small set of standard top-level
sections:
| Section | Purpose |
|---|---|
PayloadAttributes | Message metadata — version, correlation, timestamps. |
DistributionChain | The participants in the transaction and their roles (see below). |
POS | Point of sale — country, agency, channel context. |
Request / Response | The message-specific body (shopping criteria, order content, results…). |
AugmentationPoint | The standard extension point (see below). |
Signature | Optional W3C XML Digital Signature (xmldsig). |
Each reference page lists the top-level fields for that specific message, derived directly from the XSD.
The four namespaces
NDC 24.4 messages use qualified element names across four namespaces. With
elementFormDefault="qualified", every element is namespace-qualified, which is why
nested elements re-declare a default namespace in the examples.
| Prefix (conceptual) | Namespace URI | Used for |
|---|---|---|
| message | http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage | Message roots. |
| common | http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes | Shared data types. |
| paymentClearance | http://www.iata.org/IATA/2015/00/2022.1/ | The Payment Clearance family. |
| dsig | http://www.w3.org/2000/09/xmldsig# | XML Digital Signature. |
The DistributionChain
NDC models a transaction as a chain of participants, each with an OrgRole. The
common roles:
- Seller — the agency / OTA / retailer initiating the request.
- Aggregator — an intermediary or aggregator in the path (optional).
- Carrier — the airline (offer/order owner).
Each DistributionChainLink carries an Ordinal (its position in the chain), the
OrgRole, and the participating organization's id. The Postman environment exposes these
as {{sellerId}}, {{aggregatorId}}, and {{carrierCode}} so you fill them once.
Shopping with this airline
What an AirShoppingRQ gets back, and where each part comes from:
- Origin-destinations. One
OriginDestCriteriais a one-way; a second one that returns to the start is priced as one round trip (one offer covering both journeys). Anything else — multi-city, open jaw — is shopped per origin-destination: you get offers per OD and combine one per OD when you order. - Segments. Each flight is described three ways, as 24.4 intends:
PaxSegment(cabin) →DatedMarketingSegment(the flight number sold, e.g. RT 5456) →DatedOperatingSegment(who flies it — e.g. British Airways on a codeshare, Eurostar on a rail leg) →DatedOperatingLeg(equipment; a train isTRN, with station names). - Fare brands. Every flight comes in the airline's brands (Light / Standard / Plus)
as separate offers. Each brand is a
PriceClasswith its name and benefits, and the offer'sJourneyOverviewand fare components point to it. - Baggage allowance. Where the airline has set a brand's included bags, the offer
carries them as
BaggageAllowance(TypeCodeChecked/Carry on,PieceAllowanceandWeightAllowance/MaximumWeightMeasure— the most one bag may weigh, inKGM, sent only beside a piece count) and oneBaggageAssociationsper allowance, on the offer's journeys, for the adults and children. A brand whose allowance is not set sends none — read nothing into its absence, and never read an allowance out of thePriceClassbenefit text. The same allowance comes back inOfferPriceRSand, once booked, inOrderViewRS(a service per passenger and segment naming it, and on each e-ticket coupon). - Services with the offers. Add
OfferCriteria/ServiceCriteriato ask for the airline's à-la-carte services at shop time: beside each offer comes itsALaCarteOffer(OfferID= the offer's id +-ALC) with the airline's own services exactly asServiceListRQlists them — same ids, orderable the same way inOfferPriceRQ/OrderCreateRQ. Ground transport and partner products are not included: askServiceListRQfor them.RFIC,RFISCandTaxonomyCodenarrow the list (a parent taxonomy node includes the nodes below it). Services are listed for the first offers of the response only, and an offer whose services cannot be read comes back without them — aWarningsays so:services_limited,services_unavailable(temporary) orservices_refused(not temporary); askServiceListRQfor those. - Excluding services. A
ServiceCriteriawithIncludeIndfalse removes the offers whose fare brand includes that service, and leaves it out of the à-la-carte list. The airline can judge this only for the bags a brand includes as data (a checked bag); other content a brand bundles is described only in its benefit text and is not filtered — every such response carries theservice_criteria_partly_appliedWarning. - Conditions. Each fare-brand offer states its brand's conditions on its offer item
(
ChangeRestrictions/CancelRestrictions): whether it can be changed and whether it is refundable — the airline's own brand policy, the same terms it applies once the order is booked (a fare that is not changeable cannot be reshopped:fare_not_changeable). Change and cancellation fees and cutoffs depend on the time left before departure, so they are not on the offer: before booking,OrderRulesRQwith aFareRefanswers a quoted fare's full rules. Send this airline's code, theOfferIDthe fare was quoted in asFareRefText, and itsFareBasisCodewith theDep/Arrivalof its outbound journey. The answer repeats the conditions the offer carries and adds the servicing terms per time-to-departure band (onePenaltyper band and kind, in the order's currency); noPenaltystates a fee for something the fare does not allow. Fares are priced per offer, not filed, so a fare basis alone names no fare. If the brand policy could not be read when an offer was priced, the offer carries the supplier's conditions and thefare_conditions_supplierwarning says so. - Language. Ask for a language with
ResponseParameters/LangUsage/LangCode(orPayloadAttributes/PrimaryLangID), e.g.sv. The airline's content — fare-brand names and benefits, station, cabin, service and partner-product names, seat descriptions, promotion names, picture captions — comes back in it wherever the airline has translated it, and in English where it has not:Processing/LangUsagelists the languages the content is in (never one it is not in), and acontent_language_fallbackwarning names what stayed English. The same applies to booked orders. Text the gateway composes (penalty, rule, ride and allowance descriptions, warnings, errors) is English; carrier, operator and aircraft names are proper names. - Prices.
TotalPriceis the airline's price:BaseAmount(the fare — the price point), anyDiscount(with the pre-discount amount and what it was), anySurcharge(oneBreakdownline per surcharge, named, and itsTotalAmount), fees, andTotalAmount. EachOfferItem/Pricecarries the same parts for that item. Taxes are not itemised yet — the offer engine carries tax as zero, so noTaxSummaryis sent;TotalAmountis what you are charged. Prices are in yourCurParametercurrency when you send one. - Price adjustments. The airline's NDC pricing rules adjust its fares automatically,
on every shop: discounts down and surcharges up, by dates, route, cabin, fare brand,
passenger type (your
PTC, with ages) and the personalisation below. What applied is itemised as above and recorded on the order (OrderViewRSstates the same breakdown). If the rules cannot be applied at that moment you get the unadjusted fares and aprice_adjustments_unavailableWarning. A fixed amount the airline defined in another currency than your offers is not applied (never converted) —price_adjustment_currency_not_appliedsays so. Re-shopping a booked order (OrderReshopRQ) prices alternatives without these adjustments. - Personalised prices. Send this airline's
LoyaltyProgramAccount/AccountNumberon every fare-paying passenger, with the traveller'sIndividual/GivenNameandSurnameas the account holder's: the airline checks each account against its holder and looks up the tier itself (you never send a tier). Member prices apply only when all of them check out — otherwise the whole party is priced as travellers without accounts andmember_pricing_not_appliedsays so (an unknown number is treated exactly like a wrong name). Withmember_pricing_applied, book the offer with the same accounts on the same travellers:OrderCreateRQotherwise fails withmember_pricing_not_eligible(753) and nothing is charged. Agreements are priced for you, the authenticated seller — never for a seller named in the payload — and, when your agreement covers a negotiated programme (for example a corporate contract), send itsOfferCriteria/ProgramCriteriawithProgramOwner/Carrier= this airline andProgamContract/ContractID(the schema's spelling). OtherProgramCriteria, and anyProgramAccount, are not applied and say so in aWarning. An offer priced for you can be booked by you only: another seller'sOrderCreateRQfor it getsoffer_not_found. - Promotions. Send a code in
OfferCriteria/PromotionCriteria/PromotionID. The airline validates and prices it; an applied code appears asPromotionand as the offers'Discount. A code that is invalid or does not apply is aWarning— the offers come back without it, never as an error. - Pictures. Offers to destinations with airline imagery carry it as the offer
item's
RichMedia. - Expiry.
OfferExpirationTimeLimitDateTime— re-price (OfferPriceRQ) or re-shop after it.
AugmentationPoint — the extension mechanism
Most complex types carry an AugmentationPoint (an xs:any slot). It lets a participant
add bilaterally-agreed data without breaking schema validity. It is always optional;
the generated examples omit it. If you don't have a bilateral agreement that defines
augmentation content, leave it out.
Correlation & idempotency
Use PayloadAttributes correlation identifiers to tie a response back to its request and
to make retries safe. Treat order-mutating requests (OrderCreateRQ, OrderChangeRQ) as
idempotent on your correlation id — a retry with the same id must not create a second
order. See Authentication & connection for transport-level detail.
Versioning
This documentation covers NDC 24.4. The Payment Clearance family sits in the IATA 2022.1 namespace (above) but ships as part of the same 24.4 message set. The site is versioned: today there is a single published version, 24.4. When a future schema set lands, a new version is snapshotted and selectable from the version dropdown — existing 24.4 links keep working.