Collecting fares on public transit. 6 chapters and a final quiz.
How a transit operator collects fare revenue, end to end. Price the trade-off between open loop and closed loop, split a validation budget of under 500 ms, wire the three pillars of a transit transaction (offline authentication, no cardholder verification, deferred authorization), write a capping rule that stands up to rider disputes, contain first-ride losses, and then put all of it into contracts with an acquirer and a systems integrator.
Price the all-in cost per tap under both architectures, and derive the aggregation period from it
Split the entry-point decision budget between application selection, offline authentication, and the deny list
Configure the three pillars of a transit transaction and avoid the declines specific to deferred authorization
Write a fare-capping algorithm that stands up to disputes, anchored on a stable account identifier
Chapter 1. Pricing the trade-off before choosing an architecture.
An operator is not choosing between two technologies but between two cost structures. A closed loop ties up capital in a fleet of fare media and collects before the ride; an open loop ties up nothing and collects after the trip, once the period has closed. One metric decides between them: the all-in cost per tap. Everything else follows from it.
You will not find this cost in any sales brochure: it is built line by line from the operator's own statements. Two items dominate it: the fixed component of the processing fee, charged on every transaction, and the annualized cost of the fare media fleet. The first penalizes small amounts, the second large fleets.
Item
Closed loop
Open loop
Where to get the number
Fare media production and distribution
Unit cost per card, times annual replacements
Zero for riders who carry a payment card
Card supply contracts, loss and damage rates across the fleet
Reload network
Station vending machines, retail agent commissions, cash collection
The line items that change when a network goes open loop, and where to measure them
Cost-per-tap worksheet: structure and worked example
PARAMETERS TO FILL IN FROM YOUR OWN STATEMENTS
t average fare collected per tap (monetary unit u)
n taps per rider per period (aggregation period)
cv percentage component of the processing fee (%)
cf fixed component of the fee (u per transaction)
S annualized cost of the fare media fleet / annual taps
F float income / annual taps
I net unpaid fares observed / taps
COST PER TAP, OPEN LOOP
cost = t*cv + cf/n + I
^^^^ the fixed component is DIVIDED by the number
of taps aggregated into a single debit
COST PER TAP, CLOSED LOOP
cost = (acceptance cost of the reload / n_reload) + S - F
WORKED EXAMPLE — ILLUSTRATIVE VALUES, NOT MARKET DATA
t = 2.00 u cv = 1.2% cf = 0.05 u I = 0.01 u
n = 1 (one debit per tap) -> 0.024 + 0.050 + 0.01 = 0.084 u
n = 4 (daily aggregation) -> 0.024 + 0.0125 + 0.01 = 0.047 u
n = 20 (weekly aggregation) -> 0.024 + 0.0025 + 0.01 = 0.037 u
READING
From n=1 to n=4, the cost drops 44%. From n=4 to n=20, only 21%.
The return on aggregation runs out fast; exposure, by contrast, grows
linearly with the length of the period. The stopping point is calculated,
not decreed.
🔑
The aggregation period is the only parameter with two opposing effects
It divides the fixed fee component and, in the same stroke, multiplies the unsettled balance exposed to a decline, whereas every other lever moves in one direction only. This one is tuned on production data rather than on a model. The operating rule has three steps: launch with a short period, measure the actual decline rate after period close, then lengthen the period for as long as marginal bad debt stays below the marginal fee saving.
S$40M
funding announced to keep card-based ticketing running in Singapore until at least 2030, after plans to retire NETS FlashPay were canceled
Land Transport Authority, 2024
112M
Suica cards issued, including 33 million Mobile Suica accounts: the scale of a fare media fleet an operator has to manage
JR East, 2025
≤ 500 ms
decision budget at the entry point, from the tap to the rider's green light
U.S. Payments Forum, Technical Solution for Pay As You Go, v2.0, 2018, requirement M4
⚠️
The fare media fleet never disappears entirely
Reduced fares, minors, riders without a payment card, and employer-funded passes all stay outside the open loop. So the budget for non-bank fare media survives the switch, but it is spread over a smaller fleet, which drives up the unit cost per card. A model that takes this line to zero overstates the expected savings, and the gap only surfaces in operation.
🎯 Quick question
A network already aggregates four taps per debit. What does it gain by going to 20?
Chapter 2. Holding the decision budget at the entry point.
The entry point must show a green or red light in under a second, and the U.S. Payments Forum sets the target at no more than 500 milliseconds after a valid tap, including presentation of the card or device. A second requirement follows, less often cited and far more demanding: the reader must not need to contact the operator's server to decide. Everything that controls whether the gate opens lives in the reader.
Certification authority public keys (CAPKs) for each accepted network, current and correctly loaded.
The list of accepted application identifiers (AIDs), and the selection logic when the card offers several.
The operator's deny list, replicated locally and checked on every tap.
Fare parameters needed for display, never for calculating the final price.
A local tap queue, sized for the longest offline period the operator accepts.
The decision sequence, in the order the reader runs it
Instrument
Enters the reader's field and presents its applications
Anti-collision, then the list of AIDs available on the chip or in the wallet
➜
Reader
Selects a common application
No AID shared by card and reader: the transaction stops and entry is refused
➜
Reader
Authenticates the chip offline
Dynamic data authentication: the reader verifies on its own that the card or device is genuine
➜
Reader
Skips cardholder verification
No PIN, no signature: the entry point has neither a certified PIN pad nor the time
➜
Reader
Checks its local deny list
Identifier listed: entry refused, without querying anyone
➜
Gate
Opens the gate and queues the tap
The authorization request goes out later, once the trip has been taken
The three levels of offline authentication
Card type
What it protects against
What it does not protect against
Status in open-loop ticketing
SDA, static data authentication
Basic counterfeiting
Card copying: the signed data can be replayed
Ruled out: the U.S. Payments Forum says it is no longer an industry standard (2018)
DDA, known as fDDA for contactless
Counterfeiting and copying: each transaction carries a unique signature
Interception between chip and reader
Acceptable at the entry point, and adopted by some networks
CDA, combined data authentication
Counterfeiting, copying, and interception between chip and reader
Nothing about whether the account can pay
Recommended: the highest level of protection at the entry point
What each offline authentication method protects against, and what it lets through
⚠️
A successful authentication says nothing about the balance
The reader establishes that the card or device is genuine, and nothing more. It does not tell you that the account exists, that it is funded, or that an authorization will be approved after the trip. Authenticity and ability to pay are two separate questions, handled at two different points in the chain. Conflating them in system design leads to a misjudged exposure, and to customer service giving riders the wrong explanation.
ℹ️
Three causes of authentication failure, and one of them is on you
The card or device may be expired or damaged. It may also be counterfeit. A third cause is certification authority public keys that were not loaded correctly into the reader, and that is an operational failure, not fraud. It shows up as clusters of declines on one family of cards, often after a reader fleet update. The life cycle of these keys is written into the acquirer contract, then monitored in production.
🎯 Quick question
A reader loses its connection to the operator's server for two hours. What should it do?
Chapter 3. Wiring the rail: three pillars and a deferred authorization.
An ordinary card transaction rests on three pillars: authenticate the card, verify the cardholder, obtain authorization. Transit keeps all three but resolves them differently, because none of them fits in the time available at the entry point. The U.S. Payments Forum formalized this triad in 2018, and it still shapes configurations today.
Pillar
Risk covered
Chosen approach
What the operator configures
Card authentication
Counterfeit or cloned card
Offline dynamic authentication, backed by list management
No verification, backed by a deny list fed by authorization responses
Time to list a card after a decline, criteria for removing it from the list
Financial authorization
Unfunded account
Deferred authorization, sent after the rider has traveled
Aggregation period, amount requested, deferred indicator agreed with the network
The three pillars, rewritten for a transit entry point
Deferred authorization has a strict definition, and a broader one than it looks: any request sent after the rider has been allowed to travel falls under it. The delay does not matter. A request sent three seconds after the gate opened is handled exactly like one sent the next day, and the indicator that flags this status is agreed network by network.
Two message pitfalls that cause unwarranted declines
TRAP 1 — THE TRANSACTION COUNTER ARRIVES OUT OF ORDER
Every chip increments a counter (ATC) with each transaction.
Many issuers check that it keeps moving forward to detect a cloned card.
In transit, authorizations go out AFTER the fact, sometimes
from entry points that were offline at different times.
tap 09:12 ATC=0141 offline entry point -> authorization sent at 11:40
tap 09:47 ATC=0142 online entry point -> authorization sent at 09:47
The issuer receives 0142, THEN 0141. A strict check reads this as an anomaly.
ACTION: out-of-order counters are normal in transit. The operator
documents this with the networks; issuers widen their
tolerance instead of declining.
TRAP 2 — THE CRYPTOGRAM AMOUNT IS NOT THE REQUESTED AMOUNT
At the moment of the tap, the fare is UNKNOWN. Yet the chip generates its
cryptogram over an amount (tag 9F02, carried in
field 55). The amount actually requested from the issuer is
calculated after the fact and sits in a different field of the message.
9F02 (in field 55) ....... amount seen by the chip at the tap
requested amount ......... aggregated total for the period
These two values DIFFER, and that is the expected behavior.
ACTION: validate the cryptogram on the field 55 data alone.
Any cross-check against the requested amount makes
verification fail and produces a decline that should never have happened.
⚠️
The amount the rider is shown is not the amount that will be charged
The operator can request a flat amount at the tap, then settle the actual fare once capping and free transfers have been applied, while the cardholder gets a real-time notification from their bank. So riders see one amount, then another. This mismatch is a consequence of the model, not a bug, and it is handled through rider communication rather than technology; otherwise it drives calls to customer service and disputes.
Revenue is classified according to the merchant category code (MCC) the acquirer sends. That code is not a mere declaration. It determines which interchange schedule applies, eligibility for the networks' transit rules, and how disputes are handled. A wrong code costs money on every transaction, for years, without ever triggering an alert, so the code must be checked on the first batches, transaction by transaction.
🎯 Quick question
An issuer is declining a transit network's authorizations in bulk, citing an invalid cryptogram. What cause should you check first?
Chapter 4. Capping fares: a pivot identifier and a replayable calculation.
Capping requires recognizing that several taps belong to the same account; otherwise there is no cap, just a running total. The problem arrived with mobile wallets: a phone does not present the card number but a device-specific number, and a watch presents a third one. Three devices, three identifiers, three caps calculated separately.
The identifier that links all the devices on one account
EMVCo defined the Payment Account Reference, or PAR, for exactly this: a 29-character identifier tied to a payment account, not to a cardholder. It accompanies the actual card number as well as each device number derived from it, so two devices sharing the same PAR point to the same account. That gives the operator its capping pivot.
Route
What it requires
Verdict for an operator
In the authorization response
The acquirer must return it, for tokenized and non-tokenized accounts alike
Recommended route: no dependency on the device or the terminal manufacturer
Through a dedicated request
A lookup interface exposed by the acquirer or the network
Useful for catch-up, costly at volume: one call per unknown identifier
Read from the card or device at the tap
Card or wallet app personalization that carries the PAR
Depends on the issuer and the wallet provider: slow rollout, partial coverage
Three ways to obtain the PAR, and what each requires
⚠️
PAR is not universal, and the fallback must be written down
Some card types lack one, and some wallets do not pass it along. A program that assumes it is present therefore produces wrong caps on part of its traffic without knowing it. The fallback rule documented by the U.S. Payments Forum is simple: a complete trip must be made with a single card or device, and each one is charged separately. The rule is published to riders and displayed at the entry point; otherwise complaints are guaranteed.
Capping algorithm: what the calculation must guarantee
INPUTS
taps(pivot, window) pivot = PAR if available, otherwise the device identifier
fares(trip) unit price rebuilt from tap-in/tap-out
caps(zone, window) daily, weekly, by mode
SERVICE DAY
It does not start at midnight. It is defined, published, and enforceable
against a rider who disputes a cap. If it is not published, there is no defense.
CALCULATION
1. rebuild the trips match tap-ins with tap-outs
2. price each trip missing tap-out -> explicit rule
3. total over the window day, then week
4. apply the most favorable cap
5. deduct what has ALREADY been authorized over the window
6. charge the difference never the recalculated total
REPLAYABILITY — the property everything else depends on
A tap uploaded late from an offline entry point
ARRIVES AFTER its window has closed. The calculation must then:
· replay over the window concerned,
· compare with the amount already authorized,
· charge only a top-up, or issue a refund.
A calculation that cannot be replayed double-charges on every network incident.
CASES TO COVER WITH A TEST, ONE BY ONE
· two devices on the same account, with PAR / without PAR
· missed tap-out, then a rider complaint
· double tap at the same entry point within a few seconds
· tap arriving after its window has closed
· trip spanning two service days
· cap already reached, then a trip canceled
🔑
Fare capping shifts fare optimization from the rider to the operator
No one buys a pass just in case anymore, and no one pays full fare for lack of understanding the fare table. Revenue falls mechanically among riders who used to under-optimize, and rises among those the complexity used to deter. Those two effects must be measured separately, on the real rider base, before any fare announcement. An operator that estimates only the first will announce a loss it will not actually incur.
🎯 Quick question
A rider taps in with their phone and taps out with their physical card. PAR is not available for this account. What does the system produce?
The industry calls it first-tap risk. An unfunded account gets through the entry point once without any obstacle, since nobody was asked, and the ride taken cannot be recovered. The whole setup therefore targets the second tap, never the first. The goal is to bound this risk at a known cost, not to eliminate it.
From authorization decline to debt recovery
Operator's server
Receives a decline after period close
The exact reason matters: insufficient funds, blocked card, expired card
➜
Operator's server
Adds the identifier to the deny list
The time between the decline and the listing is an open exposure window
➜
Reader fleet
Receives the updated list
The propagation delay measures tolerated fraud, and nothing else
➜
Entry point
Declines the next tap
Or accepts it and triggers a debt recovery request at the moment of the tap
➜
Traveler
Settles their debt
Online payment, or a new authorization approved at the entry point
➜
Operator's server
Removes the identifier from the list
The removal criterion is set in advance: debt paid, or listing expired
Lever
Effect on exposure
Trade-off accepted
Account status check
Screens out nonexistent or blocked accounts from the first known tap
One extra transaction per new identifier; approval does not guarantee payment
Shorten the aggregation period
Reduces the unsettled balance proportionally
Raises the fixed fee component per tap, exactly as in chapter 1
Exposure limit per identifier
Cuts off a given card's exposure at a set amount
Declines frequent riders acting in good faith; the threshold is calibrated on the real rider base
Speed up list propagation
Shrinks the window in which a declined identifier still gets through
Network load across the entire reader fleet, and an update frequency to size
Four levers for reducing unpaid fares, and their trade-offs
ℹ️
The account status check, borrowed from fuel dispensers
A zero- or minimal-amount authorization request queries the issuer without holding real funds. It establishes that the account exists and that the issuer allows the cardholder to transact; depending on network rules, an approval can even unlock capped financial protection. The mechanism comes from automated fuel dispensers, which also have to serve a customer before knowing the amount. Amounts and protections vary by network and must be verified before any configuration.
Bounding exposure: the metric to watch every week
EXPOSURE FROM A BAD CARD
E = average_fare x taps_before_block
taps_before_block
= taps during the current aggregation period
+ taps during the listing delay
+ taps during propagation to the readers
Three delays, three different owners:
aggregation period ...... operator's decision (chapter 1)
listing delay ........... processing of authorization responses
propagation delay ....... reader fleet infrastructure
METRICS TO PRODUCE FROM LAUNCH, NOT LATER
· decline rate after period close, by issuer reason
· median and maximum deny list propagation time
· unsettled balance to date, by age
· 30-day recovery rate
· missing tap-out rate BY STATION and BY ENTRY POINT
A network-wide average missing tap-out rate means nothing.
A single badly placed entry point generates maximum fares
charged in error, and the disputes that come with them.
⚠️
Demand the actual decline reason, not a generic decline
An acquirer that converts every negative response into an “issuer decline” makes debt recovery impossible to manage. Insufficient funds call for a retry later, a blocked card for immediate listing, an expired card for a message to the rider. Three reasons, three responses. Passing these reasons through is negotiated in the acquiring contract, then verified in acceptance testing on deliberately triggered cases.
🎯 Quick question
Which metric directly measures the fraud an operator is willing to tolerate in an open loop?
Chapter 6. Contracting with the acquirer, then testing.
An open-loop ticketing program rarely fails at reading the chip. It fails on what the acquirer cannot do, and what nobody thought to require in writing before signing. Transit departs from standard acquiring on a series of specific points, and each one becomes a contract clause, then a test case.
Handle an amount that is unknown at the time of the tap under the network's transit rules, without format rejects.
Accept deferred authorizations sent after the trip, with the indicator agreed network by network.
Absorb the volume: a dense network generates authorization peaks unlike anything in retail.
Pass through the actual decline reason without converting it into a generic decline.
Return the PAR in the authorization response, for tokenized and non-tokenized accounts alike.
Manage the life cycle of certification authority keys: loading, renewal, and removal across the entire fleet.
Issue reversals and re-presentments on transit transactions, to correct a cap or a missing tap-out.
Apply the agreed merchant category code, verifiable on batches from the first week.
No after-the-fact fare calculation back office; no unpaid fare management
Tied-up capital and an aging fare media fleet
Open loop, payment card
Fare calculation back office, replayable capping, lists, debt recovery, proof of travel
No issuance, no reload network, no float to hold
First-ride losses and disputes over aggregated charges
Transit media backed by a card network
Loading the embedded purse, host network's rules
Issuing the payment card itself
Dependence on the host network's rules and timetable
Instant payment rail or displayed code
Rail acceptance, a validation flow that keeps pace with gate throughput
No proprietary fare media fleet
Validation time: scanning a code does not fit a gate's time budget
Four operating models, seen through the obligations they create
Phase 0
Limited scope, low exposure
One mode or one low-volume line. The goal is to measure, not to collect revenue. This is where deny list propagation time and the decline rate after period close are calibrated.
Phase 1
Short aggregation period
Launch with the shortest period you can sustain. Unpaid fares are measured on real data, never on the chapter 1 model.
Phase 2
Capping switched on
Capping goes live once trip reconstruction is stable. Replay and missing tap-out cases are dealt with before, not during.
Phase 3
Lengthening the aggregation period
The period is lengthened for as long as marginal bad debt stays below the marginal fee saving. Each step is measured before the next.
Phase 4
Full rollout, then retirement of the old card
The proprietary card is withdrawn only after most riders have switched, and never for the groups only it can serve.
✅
The eight acceptance test cases that decide the program's fate
A genuine card declined because of a missing key; a reader offline for two hours, then its queue replayed without creating duplicates. Two devices on the same account, first with PAR, then without; a missed tap-out, then a complaint investigated all the way to proof of travel. A tap arriving after period close, with a top-up charge and no double debit; a decline after period close, with listing and timed propagation. A decline reason passed through unchanged; the merchant category code checked on a real batch. These eight cases are run before commercial launch, never after.
🔑
Transit buys throughput, not an approval rate
A standard acceptance chain optimizes the authorization rate and the cost per transaction. A transit operator optimizes first for the number of riders passing through an entry point per minute, and makes payment subordinate to that capacity constraint. Any proposal that improves acceptance by adding a few tens of milliseconds gets rejected, even when it reduces fraud, and a vendor that has not internalized this hierarchy loses the bid without understanding why.
🎯 Quick question
In what order does an operator open its network and lengthen its aggregation period?