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.
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 you make, and a small price per API call once your 500 free requests are spent.
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 the order — ticketed, or held unpaid to pay later: a hold is a booking and is charged the same. 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 | Every post-sale operation on an existing order that succeeds — adding seats or extras, a change or reissue, a cancellation, a refund — once per operation. Paying a hold is not one: a booking is charged once, when it is made. Quotes, a retry answered with the result of the first request, a repeat that changes nothing (cancelling an order that is already cancelled) and an operation the airline refuses are free of it. Fare or extras added after the sale are billed as a new sale as well. | €2.00 per operation that succeeds |
| Cancelled within 24h | Cancel or refund a booking within 24 hours of making it and its fees come to nothing: the booking fee, every extra, everything added after the sale and the servicing fees on it — the cancellation's own included — are credited back in full. The API calls themselves are metered as usual. | €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 account, in the sandbox and in production alike. The pool is granted ONCE for the life of the account and nothing renews it each month. The calls inside it are free; booking and servicing fees still apply. The allowance needs a verified email. | 500 requests, once |
| Airline call | Every call that reaches an airline, past the allowance, sandbox calls included: 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, sandbox calls included: 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. Building and testing costs nothing while your 500 free requests last; once they are spent every call is billed, in the sandbox as well, whether or not you have booked anything yet. 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.
Cancel or refund it within 24 hours of booking and its fees come to nothing: the booking fee, every extra fee and the servicing fees on it — the cancellation's own included — are credited back in full. If the booking was already invoiced, the credit goes against your next invoice. The API calls are metered as always. You are not billed for your own typos.
Yes. A hold is a booking: the airline has confirmed it and is holding the seats, so it carries the booking fee from the moment it is created, whether or not you pay for it later. Paying it later costs nothing more: a booking is charged once. Cancel a hold within 24 hours of making it and every fee on it is credited back; a hold left to lapse keeps its fee.
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 account — once, for the life of the account, not each month, and sandbox calls draw from them like any other; 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.
Whichever version each connected airline runs — Norba speaks it to the airline, and you never see the difference: every answer comes back in the same JSON schema. The source_version field on each offer says which NDC version produced it.
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. Each agency has its own API keys, and every request is scoped to the agency behind the key and to the key's environment: an agency can only read or act on its own orders, keys and data, and another agency's order id answers 404 as if it did not exist.
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.