If you build airline retail or pricing systems, ATPCO fare filing isn’t “legacy noise”—it’s the rulebook most
of the ecosystem still plays by. Even if you’re racing toward dynamic Offers & Orders, the filed world powers
interline, agency distribution, and servicing. Understanding it well makes modernization safer and faster.
1) Why this still matters
It encodes policy, not just prices. Advance purchase, seasonality, who can buy, how you can combine—filed data describes the product you intend to sell, consistently, in every channel.
It keeps you interoperable. GDSs, pricers, and settlement rely on shared semantics; filed fares are the lingua franca across carriers.
It protects servicing and compliance. Refunds, changes, taxes, and disclosures lean on what you filed. Skip it, and you invite ADMs and disputes.
Modern pitfall: jumping straight to dynamic pricing without a bridge to filed fares. You’ll ship faster—and break more—than you expect.
2) How fare data flows
Authoring. Pricing/RM define base fares, attach rules and footnotes, and prepare batches.
ATPCO processing & distribution. Validation, normalization, and distribution to subscribed systems (GDS, pricing engines, tax engines, data lakes). This is a source of timing/latency mismatch.
Shopping & pricing. Engines combine itinerary + inventory (RBD) + your filed data to form priceable candidates.
Ticketing & settlement. Fare basis, endorsements, amounts, and references make it onto the ticket/EMD and drive reissues, refunds, proration, and clearing.
Reality check: Every hop (authoring → ATPCO → cache → seller) is a chance for your price to drift from host inventory. Design for it.
3) The core building blocks
Fare record (base fare). Market, direction (OW/RT), currency, tariff, rule number, footnotes, dates, public/private flag, etc.
Fare basis code. Short-hand label customers never see fully; the rules clarify its meaning.
Rule number. Points to reusable rule content (categories).
Footnotes. A way to share or scope conditions across multiple fares without duplicating data.
RBD mapping. The inventory class a fare requires (e.g., Y, M, J). If the bucket closes, the fare isn’t usable.
Optional Services & Branded Fares. Filed separately; used to define brand attributes and ancillaries in a standard way.
Constructed, Cat 25/Cat 35. Build fares from parts (add-ons), transform bases, or carry negotiated/private amounts.
4) Rule categories (plain English)
Categories are just named chunks of logic. Here are the heavy hitters you’ll actually implement:
Cat
What it’s about
What to watch for
1
Eligibility
PAX type, residency, corporate ID. Quick early filter.
2
Day/Time
Local time windows; time zones matter.
3
Seasonality
Travel start windows; normalize to intervals.
4
Flight Application
Specific flights/equipment; match to schedules.
5
Advance Purchase
Book-by dates; evaluate at quote and at ticketing.
6
Minimum Stay
Often “Sat night” or X days.
7
Maximum Stay
Return time limits.
8
Stopovers
Count/charges; interacts with Cat 12 surcharges.
9
Transfers
Connection limits; prunes awkward itineraries.
10
Combinability
Half-round-trip and end-on-end logic; core to multi-fare trips.
12
Surcharges
Rule-level fees (distinct from YQ/YR).
14
Travel Restrictions
Blackouts, directional sequences.
15
Sales Restrictions
POS/POT; channel gating.
16
Penalties
Change/refund conditions (free text if not using 31/33).
17
HIP/Mileage Exceptions
Overrides to higher-intermediate-point checks.
31
Voluntary Changes
Structured change rules; newer, machine-friendly.
33
Voluntary Refunds
Structured refund rules; automates refunds.
25
Fare By Rule
Programmatic transforms—discount/markup off bases.
35
Negotiated
Private/net fares with access controls.
5) Footnotes, without the mystery
Footnotes are a scoping tool. A fare references a footnote code; that code maps to rows of category data that
apply only when that footnote is present. The engine merges “base rule” + “footnote rows” before evaluation.
Tip: cache a compiled rule keyed by hash(ruleNumber + sortedFootnotes) to avoid re-merging on every quote.
6) Routing vs MPM (and construction)
Routing numbers. A fare can point to a routing that spells out allowable paths (via cities, carriers, sometimes equipment). Think of it as a tiny grammar the itinerary must match.
Maximum Permitted Mileage (MPM). Mileage-based validity: you’re good if the flown (with allowed tolerance) fits within the published cap for that market.
Constructed pricing stitches fare halves (e.g., domestic add-on + international half). After construction, run
HIP (Higher Intermediate Point) and circle trip checks so you don’t under-collect versus an intermediate city.
7) YQ/YR, Cat 12, and taxes
Carrier-imposed surcharges (YQ/YR). Filed separately and applied under conditions (market, cabin, etc.). They’re not the base fare but commonly shown with it.
Category 12 surcharges. Rule-driven fees (e.g., specific DOW/season) that get applied before tax.
Taxes. Driven by tax points and jurisdiction rules; accuracy matters for settlement. Use an authoritative tax feed/engine; don’t home-roll.
Input: O&D, dates, pax types, cabin, corp codes, itinerary shape
1. Get availability (RBD per segment).
2. Build candidate itineraries (time, connection, alliance constraints).
3. Fetch fare candidates by market/cabin/effective dates/POS.
4. Compile rules (base + footnotes) into a fast structure.
5. Fast filters: Cat 2/3/5/15 to shrink the set early.
6. Map itinerary to fare components; validate routing or MPM.
7. Deep checks: Cat 6/7, Cat 8/9, Cat 10, HIP/circle trip.
8. Add Cat 12 surcharges, then YQ/YR, then taxes via tax engine.
9. Normalize currency & rounding; emit a detailed pricing trace.
9) Keeping prices honest
Determinism. Same dataset + same itinerary → same price. Hash the compiled rule set and surface it.
Availability vs price drift. Detect when required RBD shut after quote; reprice on commit and flag staleness.
HIP under-collection. Regression tests for multi-city and constructed scenarios.
Tax drift. Daily diffs against the authoritative tax engine; alert on variance beyond tolerance.
10) Caching what actually helps
Cache compiled rules and light metadata, not whole priced itineraries. Invalidate by ATPCO deltas, expose dataset timestamps, and publish a “staleness” metric with each response.
11) Frequent failure modes
What goes wrong
Why it happens
How to prevent it
Quote ≠ ticket
Stale Cat 5 or closed RBD between steps
Short quote validity; reprice at commit; verify dataset version
Penalty confusion
Cat 16 free-text; partial Cat 31/33 adoption
Prefer structured rules; clear customer copy if parsed text is ambiguous
Under-collection on circles
Skipped HIP/circle trip logic
Automate tests on known tricky markets
Wrong taxes on edges
Outdated tax tables or stopover detection bugs
Automated diffs; timezone-aware stopover logic
Reload latency spikes
Mass recompiles in the hot path
JIT compile + LRU cache; pre-warm popular composites
IATA: Maximum Permitted Mileage (MPM) manual and mileage suite.
Travelport & Amadeus support docs on Cat 25, YQ/YR, mileage, and HIP.
Industry primers on HIP and fare construction logic.
These are concept primers. For operational details, use your licensed documentation and data feeds.
19) Disclaimer
This article is for product and engineering orientation. It does not reproduce proprietary ATPCO specifications or paid datasets. Always validate against your airline’s licensed ATPCO/IATA documentation, local regulations, and internal revenue accounting policies.
Transparency note: AI assistance was used to draft and edit this article; all facts and recommendations were reviewed for accuracy and relevance before publication.