Shopping vs Orders
The single most important conceptual split in NDC. Get this wrong and the rest of the system makes no sense.
Nothing is reserved. Two simultaneous searches can return the same seat. Offers expire in seconds to minutes.
Persists at the airline. Inventory is held, ticketing is triggered, changes are audited.
Shopping
A request asks for available flights and returns a list of offers. Each offer is a price-and-itinerary package the airline is willing to sell, right now, for a bounded time. Nothing is reserved on the airline side.
Each offer carries
- OfferID — opaque token unique to the airline.
- ExpiresAt — usually 1–30 minutes from issue. After expiry the offer cannot be turned into an order.
- Slices + segments — the itinerary.
- Price — total + base fare + taxes, in a specific currency.
- References to fare rules — refundability, change fees.
- Sometimes: an OfferItem per branded option (Basic / Standard / Flex) or per ancillary.
Why offers expire
- Inventory — a seat at a given fare class only makes sense if the airline still has that inventory open by the time you book.
- Currency — mid-day FX movements would otherwise invalidate the price.
- L2B economics — long offer lifetimes encourage re-shopping, inflating the look-to-book ratio.
Orders
An order is the persistent record at the airline that a passenger intends to fly. It is created from one or more priced offers, passenger data and — optionally — payment, which in Norba's model is the agency's own card and never the traveller's. See the Payment Flow guide for the three movements of money.
Order lifecycle
| State | Meaning |
|---|---|
| pending | Transitional: the carrier returned the order before any order item existed. A held-but-unpaid reservation is not reported here — it comes back as confirmed. |
| confirmed | The carrier holds a reservation (PNR) for the order. It says nothing about payment: an order created without payment sits here as an unpaid hold until the ticketing deadline in expires_at, after which the carrier may cancel it. Payment state is in payments[].status. |
| ticketed | e-Ticket number issued. Passenger can check in. Only here does a ticket exist. |
| cancelled | Order has been cancelled. A refund event may follow. |
| refunded | The carrier has returned the money to the payment method submitted on the booking — your agency's own card, not the traveller's. You then refund your traveller through your own payment provider. |
The bridge: OfferPrice
OfferPrice is the bridge between shopping and ordering. Take the cheap AirShopping OfferID, send it to the airline, and get a priced offer that survives long enough to book against (5–15 min). Some airlines guarantee price-lock; others may reject the order if the price moved.