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.
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.
This is real NDC data
This offer looks complete
Fare rules, baggage, and pricing fully normalised from the airline NDC feed.
How quality scores are calculatedOffers, orders and ancillaries arrive in one Slice-based shape — whether they came from NDC 17.2, 18.1, 19.2 or 21.3.
Every offer is scored 0.0–1.0 for completeness. Missing baggage allowance? Terminal? You'll know before you render.
Fan-out to every connector in parallel. One airline's outage never cascades — degraded carriers are skipped automatically.
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.
/v1/aviation/airlines/{iata}{
"iata_code": "BA",
"name": "British Airways",
"country": "GB",
"alliance": "Oneworld",
"status": "active",
"hubs": ["LHR", "LGW"]
}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.
/v1/aviation/airports/{id}/arrivals{
"iata_code": "LHR",
"name": "Heathrow Airport",
"timezone": "Europe/London",
"runways_count": 2,
"scheduled_service": true
}Rich airport records with coordinates, timezone, runway data and OurAirports provenance. Live departure and arrival feeds when an ADS-B source is wired.
/v1/aviation/aircraft-types/{icao_type}{
"icao_type_code": "B77W",
"manufacturer": "Boeing",
"model": "777-300ER",
"aircraft_class": "widebody",
"wake_turbulence_category": "H"
}ICAO Doc 8643 type designators for 700+ aircraft. Engine type, wake turbulence category and class (narrowbody, widebody, regional) — all queryable by manufacturer or class.
/v1/tracking/states{
"icao24": "400936",
"callsign": "BAW177",
"latitude": 51.4775,
"longitude": -0.4614,
"baro_altitude": 12192.0,
"on_ground": false
}Real-time state vectors from OpenSky: latitude, longitude, barometric altitude, velocity and heading. Filter by bounding box or ICAO24 Mode-S transponder address.
/v1/aviation/fleet/{registration}{
"registration": "G-VIIV",
"icao_type": "B77W",
"operator_iata": "BA",
"serial_number": "28840",
"first_flight": "1998-09-12",
"status": "active"
}Individual aircraft registrations cross-referenced with operator, type, serial number and first-flight date. Useful for ancillary compliance rules and seat-map selection.
/v1/aviation/routes{
"origin": "LHR",
"destination": "JFK",
"carriers": ["BA", "AA", "VS"],
"frequency": "daily",
"distance_km": 5539,
"avg_block_time": "PT7H30M"
}Route availability by origin–destination pair, aggregated across carriers. Includes distance, average block time and codeshare flags — ready for route planning or carbon estimation.
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.
4 hops · stacking fees · filed fares only
1 hop · airline price · live content
Indicative industry figures. Actual GDS fees vary by carrier, region and contract — but the structural difference doesn't.
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.
<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>{
"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
}No SDKs to learn, no XML to write. Just HTTPS + JSON.
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.
# 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" }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.
Prices come straight from the airline's NDC API — no GDS markup, no segment fees, no per-booking surcharges.
A single canonical REST endpoint for every carrier we support. No per-airline XML schemas to learn — we handle the translation.
Redis cache-aside with a 90-second TTL. Repeat searches return instantly without burning airline API quotas.
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.
Every airline connector is probed every 60 s. Degraded or down connectors are flagged automatically so you never serve stale availability.
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.
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.
1,000 requests per month at no cost. No credit card required to start.
Create free accountIncludes
After your 1,000 free requests, add a payment method and pay only for what you use. No monthly minimum.
Get API keyIncludes
Volume discounts, dedicated infra, custom SLAs and a direct line to our engineering team.
Contact salesIncludes
Questions? hello@norba.io
Free sandbox, no credit card required. Live connectors in minutes.