The driver never types the price
An unattended charger asks the driver for one thing before it will deliver a single electron: an amount. Not a per-kWh rate. Not a tariff table. A number — the most they’re willing to spend on this charge.
That number is a fiction, and a useful one. It isn’t the price of energy. It’s a ceiling the driver picks so the terminal has something to hold against a card. The real price gets computed later, by the charger and the tariff, and almost never equals the number on the screen.
Everything hard about pricing at an unattended charger lives in the gap between that authorized number and the amount that finally settles. This is a piece about that gap — what fills it, and why keeping three different systems agreeing on it is harder than it looks.
What a tariff actually is
“Price per kWh” is the version drivers think they’re buying. The real tariff is usually a small stack of dimensions, and most chargers combine several:
- Per-kWh — the energy component. Simple to explain, dominant on DC.
- Per-minute — time-based; sometimes the whole price on AC, sometimes layered on top of energy to discourage hogging a connector.
- A session or connection fee — a flat amount just for starting, independent of how much you draw.
- Idle fees — a per-minute penalty that typically kicks in once charging completes and the bay is still occupied, to free it for the next car.
A single real-world session can touch all four: a connection fee, then per-kWh while charging, then per-minute idle once the battery’s full and you’re still parked. The “price” is a piecewise function of energy and time, with thresholds. None of that is visible at the moment of payment, because at that moment none of it has happened yet.
So the terminal can’t show a price. It can only show — and authorize — a guess at the maximum.
Three amounts, three moments
There are three numbers in any card-present charge, and conflating them is where most of the pain comes from.
The displayed amount is what the driver keys in or sees offered: the authorization ceiling. It’s intentionally generous. It has to cover the worst plausible case — a full session plus fees — or the charge stops short when the hold runs out.
The authorized amount is what the card issuer actually reserves. Usually this equals the displayed ceiling — but not always. Issuers can partially approve, or the pre-authorization strategy might hold a standard amount rather than the driver’s figure. This is the money that is unavailable to the driver during the charge: held, not taken.
The captured amount is what finally moves: the true cost of the energy and time consumed, computed from the tariff against the charger’s metered values, plus tax. This is the only number that ends up on a bank statement, and it’s almost always less than what was authorized.
The driver’s mental model is one number. The system’s reality is three, separated in time by the length of the charge.
A clean implementation makes the difference invisible: hold the ceiling, capture the truth, release the rest the instant the session closes. A sloppy one leaves drivers staring at a hold for a charge they finished an hour ago.
Where tax folds in
Tax isn’t a fourth amount. It’s baked into all three — and that’s the subtlety.
The displayed ceiling a driver authorizes is tax-inclusive. It has to be, because it’s what comes off their card, and consumers are quoted gross prices. The captured amount is likewise gross. But the tariff components underneath may be defined net, with a country-specific rate applied on top. Say the energy and fees work out to a net cost and a country-specific rate applies on top: the captured figure is that cost grossed up, and the receipt has to break out the net, the tax, and the gross so it’s a document a tax authority will accept.
Here’s the trap. The number the driver controls — the gross ceiling — and the numbers the tariff is expressed in — often net components — live on opposite sides of the tax calculation. The pre-authorization has to reason in gross; that’s what the card sees. The capture and the receipt have to reconcile gross back to net plus tax; that’s what the books and the fiscalization round-trip need. Get the direction of that arithmetic wrong and the receipt won’t foot, even though the right amount left the card.
Why consistency is the actually-hard part
Pricing math is arithmetic. Keeping the same answer across three systems that were never designed to agree is the engineering problem.
The terminal knows what it authorized. It put the hold on the card over the card-network rails and it owns the relationship with the acquirer. It does not, on its own, know the metered energy or the tariff.
The charger and its CSMS know what was delivered. The charger reports the kWh, the minutes, and the start and stop as MeterValues and a stop transaction over OCPP; the backend turns that into a settled record. They don’t own the payment hold and have no idea what the card was authorized for.
The receipt has to state a single coherent story: this much energy, at this tariff, this much tax, this gross total, charged to this card — and it has to be the same total the acquirer captured and the same delivery the charger metered.
These three are populated by different parties, on different clocks, over different rails. OCPI standardizes the connection between the operator and the roaming network — the session start and stop, the tariff, the final CDR derived from the charger’s metered values — but it sits at the backend, knows nothing about the card hold, and carries nothing for the tax round-trip. Even the ad-hoc terminal-payment flow OCPI defines describes the messages, not the country-specific fiscal leg. Making the displayed, authorized, captured, and printed amounts tell one story is work that sits above the protocol — stitching the card-rails leg to the OCPI leg to the local fiscal leg.
And the cases where they disagree are the whole job:
- The charger meters slightly more energy than the tariff snapshot assumed at authorization, so the captured cost would exceed the hold. Resolve before capture; never silently overcharge.
- The session drops mid-charge. There’s partial energy, a partial cost, and a hold that now needs to be partially captured and partially released.
- The CDR the network derives from the charger’s metered values and the amount the acquirer is willing to settle disagree. Someone has to decide which is canonical and reconcile the difference.
- The finalization fails after energy was delivered. The driver got their charge; the capture didn’t land. That can’t just be dropped.
Each of these is a place where the three amounts drift apart. Closing the gap correctly — every time, including the non-happy paths — is what turns a number on a terminal into a charge a driver trusts and a receipt a tax office accepts.
What the driver should feel
None of the above should reach the driver. The good version is almost boring: key in a comfortable ceiling, tap a card — contactless, which is why Apple Pay and Google Pay work too — and walk away. A status link by SMS shows the charge climbing in real time. Unplug or hit stop whenever. Moments later, a link to a proper fiscal receipt: net, tax at the country’s rate, gross — matching to the cent what came off the card, and the unused part of the hold already on its way back.
The ceiling they typed is forgotten because it never mattered. What mattered was that the captured amount was right, the tax was broken out correctly, and one total appeared everywhere it had to.
That alignment doesn’t come from the tariff being simple — tariffs aren’t simple, and the AFIR-driven shift toward ad-hoc card payment across the public network only multiplies the terminals that have to get it right. It comes from one engine reconciling the three amounts across the terminal, the CSMS, and the receipt, in whatever country the charger happens to live in — while the operator keeps their own acquirer, card-present economics, and merchant of record. Bolt builds that reconciliation once, so the driver only ever sees the number they chose and a total they can trust.