Try it nowBook flights directly — try the Norba booking platform

One API integration. Flights from every airline.

Norba is the production-grade aggregation layer that normalises multi-airline NDC responses into a single canonical schema — with quality scoring, circuit breakers and webhooks, out of the box.

Hello, offer ID
ba_offer-0X9PTK
NDC Direct
BA
British Airways
BA117 · Boeing 777-300ER
Nonstop
09:45
LHR
Heathrow · T5
8h 30m
Mon 15 Jun
13:15
JFK
Kennedy · T7
Total price
€542.10 (2 pax)
Per adult
€271.05
Cabin
Economy
Return
22 Jun · BA178 · JFK→LHR
Baggage
1× checked 23 kg
Carry-on
1× per passenger
Non-refundableChangeable (€150 fee)

This is real NDC data

0.92Quality Score

This offer looks complete

Fare rules, baggage, and pricing fully normalised from the airline NDC feed.

How quality scores are calculated
Fare rulesComplete
Baggage allowanceComplete
Price breakdownComplete
Seat availabilityPartial
Core features

Normalise once. Ship everywhere.

offer_id:"ba_offer-1234"
airline:"BA"
slices:[ 2 ]
origin:"LHR"
destination:"JFK"
segments:[ 1 ]
quality_score:0.92

Canonical schema

Offers, orders and ancillaries arrive in one Slice-based shape — whether they came from NDC 17.2, 18.1, 19.2 or 21.3.

Slices
100%
Segments
100%
Fare basis
90%
Baggage
80%
Terminal
55%
Fare family
40%

Quality scoring

Every offer is scored 0.0–1.0 for completeness. Missing baggage allowance? Terminal? You'll know before you render.

British Airwaysclosed
Iberiaclosed
American Airlineshalf-open
Lufthansaopen

Circuit breakers built-in

Fan-out to every connector in parallel. One airline's outage never cascades — degraded carriers are skipped automatically.

Aviation Data API

More than booking. A full aviation data layer.

The same API key that books flights also unlocks a rich set of reference and operational data: airlines, airports, aircraft types, fleet registries and live ADS-B tracking — all normalised, all with source provenance.

GET/v1/aviation/airlines/{iata}
{
  "iata_code": "BA",
  "name": "British Airways",
  "country": "GB",
  "alliance": "Oneworld",
  "status": "active",
  "hubs": ["LHR", "LGW"]
}

Airlines reference

Look up any airline by IATA or ICAO code. Get full name, country, alliance membership, operational status and a fleet summary derived from the aircraft registry.

GET/v1/aviation/airports/{id}/arrivals
{
  "iata_code": "LHR",
  "name": "Heathrow Airport",
  "timezone": "Europe/London",
  "runways_count": 2,
  "scheduled_service": true
}

Airports & live traffic

Rich airport records with coordinates, timezone, runway data and OurAirports provenance. Live departure and arrival feeds when an ADS-B source is wired.

GET/v1/aviation/aircraft-types/{icao_type}
{
  "icao_type_code": "B77W",
  "manufacturer": "Boeing",
  "model": "777-300ER",
  "aircraft_class": "widebody",
  "wake_turbulence_category": "H"
}

Aircraft types catalog

ICAO Doc 8643 type designators for 700+ aircraft. Engine type, wake turbulence category and class (narrowbody, widebody, regional) — all queryable by manufacturer or class.

GET/v1/tracking/states
{
  "icao24": "400936",
  "callsign": "BAW177",
  "latitude": 51.4775,
  "longitude": -0.4614,
  "baro_altitude": 12192.0,
  "on_ground": false
}

Live ADS-B tracking

Real-time state vectors from OpenSky: latitude, longitude, barometric altitude, velocity and heading. Filter by bounding box or ICAO24 Mode-S transponder address.

GET/v1/aviation/fleet/{registration}
{
  "registration": "G-VIIV",
  "icao_type": "B77W",
  "operator_iata": "BA",
  "serial_number": "28840",
  "first_flight": "1998-09-12",
  "status": "active"
}

Fleet registry

Individual aircraft registrations cross-referenced with operator, type, serial number and first-flight date. Useful for ancillary compliance rules and seat-map selection.

GET/v1/aviation/routes
{
  "origin": "LHR",
  "destination": "JFK",
  "carriers": ["BA", "AA", "VS"],
  "frequency": "daily",
  "distance_km": 5539,
  "avg_block_time": "PT7H30M"
}

Routes & schedules

Route availability by origin–destination pair, aggregated across carriers. Includes distance, average block time and codeshare flags — ready for route planning or carbon estimation.

How a booking actually flows

Cut the middlemen.Keep the margin.

A traditional GDS booking passes through four intermediaries — each one adding a fee, a markup, or a layer of legacy XML. Norba connects you straight to the airline's NDC API.

Traditional GDS path

4 hops · stacking fees · filed fares only

Legacy
  1. 01
    OTA / Agency
    Your booking app
  2. 02
    GDS terminal
    Amadeus · Sabre · Travelport
    + subscription
  3. 03
    Aggregator
    Tech provider markup
    + per-segment fee
  4. 04
    Consolidator
    Fare contracts
    + margin
  5. 05
    Airline CRS
    Filed fares only — no rich content
Cost stack
GDS segment fee
$3.50 – $6.00
Consolidator markup
1 – 3 %
Tech-provider fee
$0.50 – $2.00
Booking surcharge
$1 – $4
Effective cost$8.08 – $15.45 per booking

Norba · direct NDC

1 hop · airline price · live content

Direct
  1. 01
    OTA / Agency
    Your booking app
  2. 02
    Norba
    One REST API · normalized NDC
    $1.50 / order
  3. 03
    Airline NDC
    Live fares, ancillaries, seats, bundles
Cost stack
Confirmed order
flat $1.50
GDS segment fee
Consolidator markup
Hidden surcharges
Effective costflat $1.50 per confirmed order · no markup

Indicative industry figures. Actual GDS fees vary by carrier, region and contract — but the structural difference doesn't.

Normalization in action

Every airline, a different format. One canonical schema.

Every airline ships a different NDC dialect — different schema versions, custom extensions, free-text fare rules, inconsistent price elements. Pick a carrier and watch it collapse into one canonical offer.

Input·British Airways · NDC 21.3 (XML)
XML·ba-air-shopping-rs.xml
<AirShoppingRS xmlns="http://www.iata.org/IATA/EDIST/2021.3">
  <PricedOffer>
    <OfferID Owner="BA">BA-OFFER-1234</OfferID>
    <TotalPrice>
      <DetailCurrencyPrice>
        <Total Code="GBP">542.10</Total>
        <Taxes><Total Code="GBP">132.10</Total></Taxes>
      </DetailCurrencyPrice>
    </TotalPrice>
    <FlightsOverview>
      <FlightRef ODRef="OD1">FL-BA177</FlightRef>
    </FlightsOverview>
    <Penalties>
      <Penalty type="Cancel">
        <Description>CHANGE FEE GBP 150</Description>
      </Penalty>
    </Penalties>
  </PricedOffer>
</AirShoppingRS>
Output·models.Offer
quality 0.92
JSON·models.Offer
{
  "offer_id": "ba_offer-1234",
  "airline": "BA",
  "source": "ndc_direct",
  "source_version": "NDC-21.3",
  "total_price": { "amount": 542.10, "currency": "GBP" },
  "base_fare": 410.00,
  "taxes_fees": 132.10,
  "cabin_class": "economy",
  "fare_rules": {
    "refundable": false,
    "changeable": true,
    "change_penalty": { "amount": 150, "currency": "GBP" }
  },
  "slices": [ /* normalised, enriched, stop-counted */ ],
  "quality_score": 0.92
}
One schema, four NDC versions
17.2, 18.1, 19.2 and 21.3 all collapse into the same models.Offer.
Free-text fare rules parsed
"NONREFUNDABLE / CHANGE FEE EUR 150" becomes structured FareRules with extracted money amounts.
Reference data joined
Airport timezones, airline alliance and aircraft body type are injected before you see the offer.
How it works

From zero to first booking in four calls.

No SDKs to learn, no XML to write. Just HTTPS + JSON.

Step 01

Authenticate in one line

Issue an API key from the dashboard and drop it into any HTTP client. No SDK required, but a typed TypeScript client is published on npm.

  • API keys hashed with SHA-256, never stored in plaintext.
  • Rate limits scoped per agency to protect L2B ratios.
  • Zero-downtime key rotation from the dashboard.
BASH·shell
# 1. Export your key
export NORBA_KEY="nbr_live_a8b…"

# 2. Health check the gateway
curl -s https://api.norba.io/v1/health
# → { "status": "ok", "version": "1.0.0" }
Benefits

Ditch the GDS. Connect airlines directly.

Norba is an NDC aggregator for online travel agencies. We maintain the airline integrations — you call one clean REST API and get live fares, ancillaries and booking in a single, consistent response.

10×
Faster integrations vs. direct NDC
1
Canonical schema across airlines
0.92
Average offer quality score
90s
From sign-up to first booking
via GDS$842.00
via Norba$719.50
GDS segment fee+ $12.00 / pax
Norba feeflat rate

Direct airline pricing

Prices come straight from the airline's NDC API — no GDS markup, no segment fees, no per-booking surcharges.

POST /v1/shopping/offers
origin:"LHR"
destination:"JFK"
depart_date:"2026-08-10"
pax:[{ type: "adult" }]
British AirwaysIberiaAmericanLufthansa

One API. All airlines.

A single canonical REST endpoint for every carrier we support. No per-airline XML schemas to learn — we handle the translation.

MISS → BA fanout380 ms
HIT ← Redis L24 ms
HIT ← Redis L23 ms
HIT ← Redis L22 ms
TTL 90 s · cache-aside pattern

Sub-second cached search

Redis cache-aside with a 90-second TTL. Repeat searches return instantly without burning airline API quotas.

order.created · HMAC-SHA256
0 s
delivered
30 s
delivered
2 m
timeout
10 m
delivered

Retry-safe webhooks

HMAC-signed event deliveries with exponential backoff (0 s → 30 s → 2 m → 10 m → 1 h) and a dead-letter queue. ULID event IDs for safe idempotency.

British Airways
up
Iberia
up
American Airlines
degraded
Lufthansa
down

Real-time health monitoring

Every airline connector is probed every 60 s. Degraded or down connectors are flagged automatically so you never serve stale availability.

trip_type:"return"
slices:[ 2 ]
slice 0
origin:"LHR"
destination:"JFK"
slice 1
origin:"JFK"
destination:"LHR"

Slice-based offer model

Multi-city, open-jaw and return trips modelled as slices from day one. No flat-segment workarounds or post-processing glue code.

We add and maintain airline integrations on our end. Your team ships features, not connector code.

Pricing

Start free. Pay only when you scale.

Every account gets 1,000 free API requests per month — no credit card required. After that, simple per-call pricing across every category. No seats, no minimums.

Save 25%

Free

$0$0

1,000 requests per month at no cost. No credit card required to start.

Create free account

Includes

  • 1,000 API requests / month
  • Every reference, aviation and tracking endpoint
  • Canonical schema + quality scoring
  • Webhook subscriptions
  • Community support
Most popular

Pay as you go

Per call

After your 1,000 free requests, add a payment method and pay only for what you use. No monthly minimum.

Get API key

Includes

  • Everything in Free
  • Live NDC connectors (when booking GA's)
  • Pay-per-call across all categories
  • Monthly Stripe-backed invoicing
  • Priority email support
  • 99.9% uptime SLA

Enterprise

Custom

Volume discounts, dedicated infra, custom SLAs and a direct line to our engineering team.

Contact sales

Includes

  • Everything in Pay as you go
  • Volume discounts from 100k requests/mo
  • Self-hosted deployment option
  • Dedicated connector engineering
  • SSO / SAML
  • Dedicated SLA & support

Questions? hello@norba.io

FAQ

Questions? We've got answers.

NDC (New Distribution Capability) is IATA's XML messaging standard for selling airline products. Every airline implements it differently — different schema versions, custom extensions, proprietary codes. An aggregator gives you one integration that handles all those quirks.

Start aggregating NDC with exact precision.

Free sandbox, no credit card required. Live connectors in minutes.