Guides · NDC

NDC Primer

Background for engineers new to NDC (New Distribution Capability). You never write NDC with Norba; skip this if you know what AirShoppingRQ is.

D-211
GDSOFFERGDSNDCAirlineBuilds its own offersBefore: a GDSGlobal Distribution System: a bare seatNDC: the airline's offerNew Distribution Capability: seat, bag, mealSellerAgency or app that sells

What problem does NDC solve?

Airline content reached agencies through GDSs (global distribution systems) speaking EDIFACT, a 1980s messaging format that cannot describe branded fares and bundled extras.

NDC is the XML API standard of IATA (International Air Transport Association), run by each airline, so agencies can sell airline content directly.

What is NDC, technically?

  • Schema: XML Schema Definitions published by IATA, versioned by year and release (17.2, 21.3, 24.1…).
  • Transport: HTTPS POST with an XML body; each airline picks its own authentication.
  • Envelope varies. Some airlines wrap messages in SOAP; the root element is always the operation (e.g. IATA_AirShoppingRQ).
  • Every operation has a request (*RQ) and a response (*RS), one HTTP round trip.

Message families

NDC defines about 40 message pairs. These are the ones that matter:

Shopping (stateless, returns transient offers)

MessagePurpose
AirShoppingRQ / RSFind flights for a route and date; returns offers.
OfferPriceRQ / RSConfirm an offer's price; returns a priced offer to book.
SeatAvailabilityRQ / RSSeat map per segment.
ServiceListRQ / RSList extras for an offer or an order.

Order management (stateful, persists at the airline)

MessagePurpose
OrderCancelRQ / RSCancel an order.
OrderChangeRQ / ViewRSChange an order: pay, add extras, exchange flights.
OrderCreateRQ / ViewRSBook a priced offer with passengers and, optionally, payment.
OrderReshopRQ / RSPrice alternatives or a refund for an existing order.
OrderRetrieveRQ / ViewRSFetch an order.

Anatomy of an NDC message

Since 21.3 every message carries the distribution chain (who sells), payload attributes (schema version) and the request. A 21.3 AirShoppingRQ for one adult, Madrid to London:

<IATA_AirShoppingRQ
    xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage"
    xmlns:cns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">

  <DistributionChain>
    <cns:DistributionChainLink>
      <cns:Ordinal>1</cns:Ordinal>
      <cns:OrgRole>Seller</cns:OrgRole>
      <cns:ParticipatingOrg><cns:OrgID>MYAGENCY</cns:OrgID></cns:ParticipatingOrg>
    </cns:DistributionChainLink>
  </DistributionChain>

  <PayloadAttributes>
    <cns:VersionNumber>21.3</cns:VersionNumber>
  </PayloadAttributes>

  <Request>
    <cns:FlightRequest>
      <cns:FlightRequestOriginDestinationsCriteria>
        <cns:OriginDestCriteria>
          <cns:DestArrivalCriteria>
            <cns:IATA_LocationCode>LHR</cns:IATA_LocationCode>
          </cns:DestArrivalCriteria>
          <cns:OriginDepCriteria>
            <cns:Date>2027-03-15</cns:Date>
            <cns:IATA_LocationCode>MAD</cns:IATA_LocationCode>
          </cns:OriginDepCriteria>
        </cns:OriginDestCriteria>
      </cns:FlightRequestOriginDestinationsCriteria>
    </cns:FlightRequest>
    <cns:PaxList>
      <cns:Pax><cns:PaxID>PAX1</cns:PaxID><cns:PTC>ADT</cns:PTC></cns:Pax>
    </cns:PaxList>
  </Request>

</IATA_AirShoppingRQ>

How Norba abstracts NDC

You send JSON. One search to POST /v1/shopping/offers reaches every connected airline on the route and returns one list in one offer schema, cheapest first. Pricing, booking, payment and servicing use the same JSON contract for every airline.

What Is IATA NDC? A Developer's Primer | Norba Docs