NDC Implementation
IATA New Distribution Capability (NDC) 21.3 implementation with Offer Engine architecture. JSON-native, aggregator-ready, generating dynamic offers instead of filing fares.
Technical Specs
| Specification | Value |
|---|
| Standard | IATA NDC 21.3 |
| Format | JSON-native (XML optional) |
| Primary Endpoint | /AirShopping |
| Aggregator Ready | Google Flights, Skyscanner optimized |
The Offer Engine
Architecture
The Offer Engine combines inventory and merchandising rules to generate dynamic offers:
┌─────────────────────────────────────────────────────────────────┐
│ Offer Engine │
│ │
│ ┌───────────────┐ │
│ /AirShopping ────►│ Inventory │ │
│ Request │ (P1-P5) │ │
│ └───────┬───────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ Merchandising │ │
│ │ Rules │ │
│ └───────┬───────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ Pricing │◄── Price = f(demand, ...) │
│ │ Engine │ │
│ └───────┬───────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ Tax Engine │◄── GST/VAT by O&D │
│ └───────┬───────┘ │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ Bundled │ │
│ │ Offer │──────► Response │
│ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
We Generate Offers, Not File Fares
| Legacy Approach | Our Approach |
|---|
| File fares with ATPCO | Generate offers in real-time |
| 26 booking classes | 5 price tiers (P1-P5) |
| Static fare basis codes | Dynamic pricing |
| Price valid for months | Price valid for 15 minutes |
Core Message Flows
| Message | Purpose | Response Time |
|---|
| AirShoppingRQ/RS | Flight search with dynamic offers | <500ms |
| OfferPriceRQ/RS | Price verification, lock inventory | <200ms |
| SeatAvailabilityRQ/RS | Seat maps and selection | <300ms |
| ServiceListRQ/RS | Available ancillary services | <200ms |
Order Management
| Message | Purpose |
|---|
| OrderCreateRQ/OrderViewRS | Book from selected offer (Order.Status = PAID) |
| OrderRetrieveRQ/OrderViewRS | Retrieve by Order ID (UUID) or PNR |
| OrderChangeRQ/OrderViewRS | Modify orders |
| OrderCancelRQ/RS | Cancel with refund |
| OrderReshopRQ/RS | Exchange shopping |
Servicing
| Message | Purpose |
|---|
| ItinReshopRQ/RS | Voluntary changes |
| AirDocIssueRQ/RS | Document issuance (if needed) |
| AirDocRefundRQ/RS | Refund processing |
Offer Validity Windows
┌─────────────────────────────────────────────────────────────────┐
│ │
│ Shopping Response │
│ └── Offer valid: 15 minutes │
│ │ │
│ ▼ │
│ OfferPrice (re-price) │
│ └── Priced offer valid: 10 minutes (matches inventory hold) │
│ │ │
│ ▼ │
│ OrderCreate (payment) │
│ └── Price LOCKED (Order.Status = PAID) │
│ │
└─────────────────────────────────────────────────────────────────┘
| Stage | Validity | Rationale |
|---|
| Shopping offers | 15 minutes | Allow comparison shopping |
| Priced offers | 10 minutes | Match inventory hold window |
| Order created | Price locked | Confirmed transaction |
Aggregator Integration
Supported Aggregators
| Aggregator | Protocol | Status | Notes |
|---|
| Google Flights | NDC/JSON | Ready | Primary metasearch |
| Skyscanner | NDC/JSON | Ready | High volume |
| Kayak | NDC/JSON | Ready | US market |
| Direct API | REST/JSON | Primary | Full NDC capability |
Aggregator Optimization
┌─────────────────────────────────────────────────────────────────┐
│ │
│ Aggregator Request │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Cache │◄── Hot routes pre-computed │
│ │ Layer │ TTL: 60 seconds │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Offer │◄── Dynamic pricing on cache miss │
│ │ Engine │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ Response (<500ms target) │
│ │
└─────────────────────────────────────────────────────────────────┘
ONE Order Integration
The NDC layer fully supports the Order-Centric model:
- Universal Order ID (UUID): Primary identifier in all responses
- RecordLocator (PNR): Included for backward compatibility
- State Tracking: Order.Status reflected in OrderViewRS
- DCS Integration: Check-in blocked unless Order.Status == PAID
Authentication
| Method | Use Case |
|---|
| OAuth 2.0 | Partner integrations |
| API Keys | Direct API access |
| JWT | Internal services |
Rate Limiting
| Partner Type | Requests/min |
|---|
| Aggregators | 10,000 |
| TMC/OTA | 1,000 |
| Direct API | 500 |
| Development | 100 |
Research Topics
Architecture Considerations
NDC Gateway Design
┌──────────────────────────────────────┐
Google Flights │ │
Skyscanner ────► NDC Gateway │
Direct API │ (JSON-native) │
OTAs/TMCs │ │
└────────────────┬─────────────────────┘
│
┌────────────────┼────────────────┐
│ │ │
┌────▼────┐ ┌─────▼─────┐ ┌────▼────┐
│ Offer │ │ Order │ │ Service │
│ Engine │ │ Manager │ │ Layer │
│ │ │ (OMS) │ │ │
└─────────┘ └───────────┘ └─────────┘
| Metric | Target |
|---|
| AirShopping | <500ms |
| OfferPrice | <200ms |
| OrderCreate | <1000ms |
| OrderRetrieve | <100ms |
| Uptime | 99.9% |
Integration Points
| System | Direction | Purpose |
|---|
| Inventory | Outbound | Availability by tier (P1-P5) |
| Pricing Engine | Outbound | Dynamic pricing |
| OMS | Bidirectional | Order creation/management |
| Tax Engine | Outbound | Tax calculation |
| Payment Vault | Outbound | Payment processing |
| Content | Inbound | Rich content, images |
Certification
ARM Index (Airline Retailing Maturity)
77 capabilities across 6 categories:
- Shop - Search, offers, ancillaries
- Order - Create, retrieve, modify, cancel
- Pay - Payment forms, refunds
- Settle - Direct settlement (no BSP for direct)
- Account - Corporate accounts, loyalty
- Setup - Configuration, content
Target Capabilities
| Category | Target | Notes |
|---|
| Shop | Full | All search/offer capabilities |
| Order | Full | Complete order lifecycle |
| Pay | High | Multiple payment methods |
| Settle | Medium | Direct settlement focus |
| Account | Medium | Loyalty integration |
| Setup | High | Rich content delivery |
NDC Providers
Build vs Buy
| Approach | Recommendation |
|---|
| Custom Build | Preferred for full control |
| Accelya FLX | Evaluate for faster time-to-market |
| TPConnects | Alternative SaaS option |
Decision: Custom build aligned with Order-Centric architecture and continuous pricing model.