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 one API to search and book flights direct with the airline — fares, seats, bags and ancillaries normalised into a single standard, so you integrate once instead of per carrier.
Every booking you have made at an airline — record locator, itinerary, ticketing deadline and price.
| Created | PNR | ||||||
|---|---|---|---|---|---|---|---|
| 15 Jun, 09:12 | X7K9M2 | Ticketed | AA | BCN → JFK | AA 67 | 15 Jun · 11:15 | €542.10 |
| 14 Jun, 18:40 | QR4T81 | Ticketed | IB | MAD → LHR | IB 3170 | 18 Jun · 07:40 | €188.40 |
| 14 Jun, 11:03 | LH72PB | On hold | LH | FRA → SFO | LH 454 | 21 Jun · 10:05 | €2,140.00 |
| 12 Jun, 16:55 | AF3KD9 | Ticketed | AF | CDG → GRU | AF 456 | 24 Jun · 23:25 | €1,012.75 |
| 11 Jun, 08:21 | KL8W2C | Pending | KL | AMS → NRT | KL 861 | 27 Jun · 14:10 | €731.20 |
| 10 Jun, 20:14 | TK5MN7 | Ticketed | TK | IST → DXB | TK 762 | 29 Jun · 19:35 | €296.00 |
| 09 Jun, 13:02 | UA1QX4 | Ticketed | UA | EWR → LIS | UA 194 | 02 Jul · 21:50 | €612.35 |
Airlines we are integrating
Available in the sandbox today. Production availability is announced per airline.
[ 01 of 09 ] · METRICS
NDC operations
Shopping, pricing, seats, services, ordering and servicing — the same eleven per airline.
NDC versions
17.2, 18.1, 19.2 and 21.3 collapse into one models.Offer.
Canonical shape
Offers, orders and ancillaries arrive identical whichever carrier answered.
Intermediaries
Prices come straight from the airline. No GDS markup, no segment fees.
[ 02 of 09 ] · FEATURES
Offers, 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.
[ 03 of 09 ] · BENEFITS
Norba is an NDC aggregator for online travel agencies. We maintain the airline integrations — you call one 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 REST endpoint for every airline we support. No per-airline XML schemas to learn — we handle the translation.
The same search twice returns instantly, without spending an airline's API quota on it.
Every webhook attempt, retry and failure is on the record — so a broken integration is a lookup, not an investigation.
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.
[ 04 of 09 ] · USE CASES
One canonical payload fans out to every healthy connector in parallel.
Price the offer, then order it. The airline holds the seat under its own deadline.
Changes, cancellations and refunds against the order you already hold.
[ 05 of 09 ] · ENGINE
Norba sits between your application and every airline's NDC API — normalizing, caching, and routing in real time so you never touch XML.
Input
OTA
Online travel agencies
Corporate
Business travel platforms
Metasearch
Fare comparison engines
Search Engine
Processing liveAirlines · NDC
In integration
How the engine processes every request
Search Request
POST /v1/shopping/offers
Norba Engine
validate · fan-out · normalise · score
Canonical JSON Response
200 OK · models.Offer[]
No XML. No per-airline schemas. Just one REST endpoint — consistent across every carrier we support.
[ 06 of 09 ] · NORMALIZATION
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.
LH · raw AirShoppingRS
<AirShoppingRS xmlns=".../EDIST/2021.3">
<PricedOffer>
<OfferID Owner="LH">LH-OFFER-1234</OfferID>
<TotalPrice>
<DetailCurrencyPrice>
<Total Code="EUR">542.10</Total>
<Taxes><Total Code="EUR">132.10</Total></Taxes>
</DetailCurrencyPrice>
</TotalPrice>
<Penalties>
<Penalty type="Cancel">
<Description>CHANGE FEE EUR 150</Description>
</Penalty>
</Penalties>
</PricedOffer>
</AirShoppingRS>models.Offer · canonical
{
"offer_id": "lh_offer-1234",
"airline": "LH",
"source": "ndc_direct",
"source_version": "21.3",
"total_price": { "amount": 542.10, "currency": "EUR" },
"base_fare": 410.00,
"taxes_fees": 132.10,
"cabin_class": "economy",
"fare_rules": {
"refundable": false,
"changeable": true,
"change_penalty": { "amount": 150.00, "currency": "EUR" }
},
"quality_score": 0.92
}17.2, 18.1, 19.2 and 21.3 all collapse into the same models.Offer.
"NONREFUNDABLE / CHANGE FEE EUR 150" becomes structured FareRules with extracted money amounts.
Airport timezones, airline alliance and aircraft body type are injected before you see the offer.
[ 07 of 09 ] · COMPARISON
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
Cost per booking
€8.08 – €15.45 per booking
1 hop · airline price · live content
Cost per booking
1.99% of the base fare · capped at €25.00 · no markup
Indicative industry figures. Actual GDS fees vary by carrier, region and contract — but the structural difference doesn't.
[ 08 of 09 ] · PRICING
Nothing to integrate, no subscription, no minimum. You pay 1.99% of the base fare when a booking is confirmed — never less than €2.00, never more than 2.5% of the fare, and never more than €25.00 — and the rate falls to 1.29% as your monthly volume grows. Extras are priced the same way. Every API call counts as a request, and the first 500 requests of the account are free — once, not every month.
Everything you need to start selling flights. No up-front cost and no monthly fee — you pay a share of each booking, and nothing at all until you make one.
1.99%/ of the base fare, per confirmed booking
Min €2.00 — never above 2.5% of the fare · Max €25.00 · No subscription
Key features
For agencies at scale. A negotiated rate from your first booking, with dedicated infrastructure and custom SLAs.
1.29%/ negotiated, from the first booking
Volume terms · dedicated SLA · your own IATA accreditation
Key features
The full fee schedule, the volume ladder and the pricing questions.
What a booking costs
Move the fare to see the fee. The curve is the tariff, not an approximation.
Norba fee
€8.76
Effective rate
1.99%
Fees breakdown
| What you are charged for | How it is priced | Price |
|---|---|---|
| Completed booking | 1.99% of the base fare, once the airline confirms and tickets the order. Taxes are excluded — you don't earn on them, so neither do we. | 1.99% of the base fare |
| Minimum per booking | The fixed cost of a booking. It never exceeds 2.5% of the fare, so low-cost content stays worth selling. | €2.00 min · max 2.5% |
| Maximum per booking | The fare fee stops growing once the base fare passes €1,256. A €5,000 business ticket costs the same €25.00. | €25.00 max |
| Seat selection | 1.99% of the seat price, capped at €5.00 per seat. No minimum — a seat costs us nothing fixed. | 1.99% max €5.00 |
| Ancillary sold | Bags, meals, lounge, priority and every other extra. 1.99% of the price, capped at €5.00 per item. | 1.99% max €5.00 |
| Ceiling per order | The fare fee and every extra on one booking, together. Nothing a single order can do costs more than this. | €35.00 max per order |
| Servicing | Change, cancellation, refund or reissue of an existing order. Fare added by a reissue is billed as a new sale. | €2.00 per operation |
| Cancelled within 24h | Void or refund a booking the same day and the booking fee and every extra fee are credited back in full. | €0.00 fully credited |
| API requests | ||
| Free allowance | Every API call — searches, bookings, servicing, order reads, reference data, monitoring — draws from one pool of 500 requests, per customer. The pool is granted ONCE for the life of the account and nothing renews it each month. Nothing below it is charged; the allowance needs a verified email. | 500 requests, once |
| Airline call | Every call that reaches an airline, past the allowance: search, price, quote, seat map, services, creating an order and servicing one. Booking and servicing fees come on top. | €0.005 per call once the 500 are gone |
| Data call | Every call answered from our own data, past the allowance: airlines, fleet, airports, routes, reference data, reading your orders and connector status. | €0.0025 per call once the 500 are gone |
| Excess look-to-book | Every airline caps the searches it will serve per booking, in its own contract. While your ratio with one airline is above the ratio that airline allows, each request to THAT airline carries this on top of the call — never to the others, and never below 1,000 searches, so a new integration is never charged for its first morning. A booking on that airline recalculates the ratio at once, and the charge stops the moment it comes back inside. | €0.01 per request over the ratio |
Billed monthly in arrears via Stripe, in euros. Nothing is charged until you complete your first booking, and a month below €0.50 is not charged at all. The base fare excludes taxes and carrier-imposed charges.
Volume discount
The rate falls as you grow, applied marginally over each calendar month — orders in a band are billed at that band's rate, so your bill never rises faster than your volume. It arrives as a credit line on the invoice.
| Orders per month | Rate on the base fare |
|---|---|
| 1 – 250 | 1.99% |
| 251 – 1,000 | 1.79% |
| 1,001 – 5,000 | 1.59% |
| 5,001+ | 1.29% |
Still have questions?
Every airline caps how many searches it will serve per booking in its own contract — its look-to-book ratio — and breaching it is the most common reason an NDC connection gets suspended. We never refuse or throttle your searches for being over it. Instead, while your ratio with that airline is above what it allows, each request to that airline costs €0.01 on top of the call. It applies only to the airline you are over with and never to the others, it is not applied below 1,000 searches with that carrier, and it stops the moment a booking brings the ratio back inside. Your ratio, the limit and anything charged are on the Airlines page of your dashboard.
Because a €70 short-haul and a €4,000 business ticket are not the same sale. A flat €3 was 4.3% of the first and 0.09% of the second — too expensive to make low-cost content worth selling, and far too cheap on premium. A rate with a floor and a ceiling is priced to what you actually earn on each booking.
What the airline charges for the seat, before taxes and carrier-imposed charges and before anything you add on top. Taxes can be half a long-haul ticket and you make nothing on them, so we don't charge on them either. Extras are billed on their own lines at the same rate.
A booking has a fixed cost whatever it is worth — a PNR, a ticket, a support surface — and €2.00 covers it. But a flat floor on a €20 low-cost fare would be 10%, which prices that content off the platform, so the floor is itself capped: the fee is never more than 2.5% of the fare, whatever the fare.
Void or refund it within 24 hours and the booking fee and every extra fee on it are credited back in full, on the same invoice. You are not billed for your own typos.
Every call you make with an API key is a request — a search costs us an airline request whether or not it becomes a sale, and a booking, a servicing operation or an order read costs us work all the same. The first 500 requests of the account are free, per customer — once, for the life of the account, not each month; past that an airline call is €0.005 and a data call €0.0025, from then on, with the booking and servicing fees on top. Make 5,000 searches in a month with the allowance already spent and they come to €25.00.
The self-serve ladder reaches 1.29% above 5,000 orders a month. Enterprise is that same bottom rung from your first order, without having to get there — so if you are already processing volume and want a negotiated flat rate, dedicated infrastructure or a custom SLA, write to hello@norba.io.
Enterprise customers can. Contact our sales team to discuss it. Alternatively you can sell under ours — no additional forms and no up-front capital.
Questions? hello@norba.io
[ 09 of 09 ] · FAQ
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.
Norba handles 17.2, 18.1, 19.2 and 21.3. The VersionDetector reads the XML namespace before any parsing, so version-specific handling is applied automatically.
Contact our team to request a new airline integration. We continuously expand our connector network based on customer demand.
Searches and data lookups share one allowance of 500 free requests — granted once, for the life of the account, not each month. Past that, a search is €0.005 per call and a data lookup €0.0025, from then on. Bookings themselves are charged as a share of what they sold: 1.99% of the base fare, minimum €2.00 but never more than 2.5% of the fare, capped at €25.00, falling to 1.29% with monthly volume.
Every airline caps how many searches it serves per booking in its own contract — its look-to-book ratio. We never refuse or throttle your searches for being over it. Instead, while your ratio with that airline is above what it allows, each request to that airline costs €0.01 on top of the call. It applies only to the airline you are over with, never below 1,000 searches with it, and it stops the moment a booking brings the ratio back inside. Your ratio, the limit and anything charged are all on the Airlines page of your dashboard.
Yes. Postgres row-level security is enabled on all multi-tenant tables. Each agency has its own API keys, and a query only ever returns that agency's own rows.
All traffic uses HTTPS and API keys. Verify TLS on both sides and keep your API keys confidential.
Free sandbox, no credit card required. Your first call in minutes.