How a fare is built
From the fare an airline files to the price on the booking screen, one layer at a time.
A ticket price is a stack: filed fares and their rules, the airline's surcharges, government and airport taxes at each end, then the fare family and extras. Step through a return trip in economy as the ticket fills up, then decode a fare basis and see how offer-based pricing changes the picture.
Worked example: a return to Paris in economy
Loading…
Where the money goes
Taxes and charges in the example, by country
published rates, per passengerGovernments and airports set these, and the airline only collects them. Each one is defined by who pays it (departing, arriving or connecting passengers, by cabin or by distance) and shows on the ticket under a two-letter code. They don't depend on the fare, so a cheap ticket carries the same taxes as a dear one and taxes weigh most on the cheapest fares.
Fare basis decoder
a teaching exampleA fare basis code names a fare and its rules. It is up to eight characters, starts with the booking class, and the rest is the airline's own convention, so the same letters can mean different things at different airlines. Type a code and see one plausible reading of each part.
Filed fares and offers
what changes with offer-based pricingEverything above is the filed-fare model: prices published in advance and assembled by a pricing engine from fares and rules. Offer-based pricing, built on IATA's NDC and ONE Order standards, lets the airline answer each search with an offer it computes itself: a price that need not be one of a few filed steps, and a bundle it can put together for that request. The layers at the bottom of the stack stay: an offer still carries the same taxes and airport charges.
| Filed fares | Offers | |
|---|---|---|
| Where the price comes from | Fares filed ahead of time (mostly through ATPCO), a handful of price points per market and cabin. | The airline's offer engine at the moment of the search; the price can be any amount. |
| How seats are controlled | Revenue management opens and closes booking classes; the cheapest open class sets the fare. | Revenue management's bid price feeds the price directly (continuous pricing). |
| Who builds the price | The pricing engine of a GDS, an online agency or the airline, applying fare construction rules. | The airline, through its own API (NDC) to agencies and on its website. |
| What's for sale | A seat with rules; fare families as branded sets of fares; extras sold separately on miscellaneous documents (EMDs). | A bundle assembled per request: seat, bags, seat choice, flexibility, priced together. |
| The record | A ticket, plus EMDs for extras. | An order holding every item, with the ticket kept alongside during the transition. |
| Taxes and charges | Unchanged: set by governments and airports, added on top either way. | |
How it works
The model
The price is built as a sum of layers, in the order a pricing engine applies them. For a ticket of fare components c sold in a country whose currency has the IATA rate of exchange ROE:
Fare = round( ROE × Σc NUCc ), with NUCc = Fc / ROE truncated to two decimals,
where Fc is each component's filed fare in local currency: half the round-trip fare for each direction of a return. Fare construction is done in neutral units of construction (NUC) so components filed in different currencies can be added; the total goes back to the currency of the country where travel starts. Then
Ticket = Fare + Σc YQ/YRc + Σt τt × BSRt,
with YQ/YR the carrier-imposed surcharge per component and τt each tax or airport charge in its own currency, converted at a bankers' selling rate BSR. Fare families and extras are added on top: a higher fare family is a different filed fare (here the same fare with a different brand suffix), and seats and bags are separate items.
In the example, both directions use round-trip fares halved and combined (a "half round trip" combination, allowed by each fare's category 10). The outbound departs in low season and the return in high season, so the two halves come from different fares: the ticket's two fare components. Each component's rules apply to its own direction, and the strictest rule of the two governs changes to the whole ticket. The fare's routing allows only the nonstop here; under the mileage system, a connecting routing is allowed up to the maximum permitted mileage (MPM, 120% of the ticketed point mileage), with surcharges in 5% steps up to 25% above it.
Data and sources
Concepts were checked against ATPCO, IATA and pricing-system documentation; tax rates against the governments' and airports' own publications, as in force on . Everything is stored in farebuild.json.
Fare basis conventions: no public standard covers the characters after the first one; the decoder's dictionary is assembled from common usage (see the Wikipedia article above) and is only one plausible reading.
Limitations
- Fares, the carrier surcharge, the fare family step, seat prices and the two exchange rates (1 EUR = CA$1.60 and US$1.16, and an ROE of 1.38 for CAD) are illustrative. Real ROEs are published by IATA and change quarterly; bankers' rates change daily.
- The French rates combine sources of different dates: the civil aviation rate is the one published for April 2025 to March 2026 and is indexed every April; the solidarity rate is the one in force since 1 March 2025; the Paris-CDG passenger charge is from Aéroports de Paris' first notification of 2026 tariffs. The security and safety rate at CDG is assumed at the top of the published range. French tax codes on tickets are left out because they vary by system.
- Montréal–Paris is 5,524 km great-circle, just over the 5,500 km threshold for the long-haul solidarity rate; a few kilometres less would put it in the €15 band.
- One passenger, an adult, nonstop both ways, no stopovers. Connections add taxes at each airport (often at reduced connecting rates), and itineraries with more points bring in fare construction checks this page skips: higher intermediate points, circle trips, open jaws and minimum fare checks.
- US amounts are those in force from 1 October 2026 (customs and agriculture fees are indexed each October, the transportation tax each January). Canadian GST/HST doesn't apply to international air travel, but does to domestic and some transborder tickets.
- Small items left out: a disability-assistance charge at Paris (about €2 to €5 per passenger depending on the airline), booking fees, and payment card surcharges.
- Rules shown are a plausible set for a discounted economy fare, not any airline's filed rules.
Fare classes, booking classes and fences in Revenue Management 101, chapter 01; offers, orders and NDC in chapter 08; fare families in the fare family designer, and prices set at any amount in the continuous pricing simulator. This is a personal project and isn't affiliated with any airline.