Pricing is where a charging network's costs, its drivers' expectations, and regulation meet. Get it wrong and you either lose money on every session at a site with high demand charges, or you drive away customers with prices they cannot predict. This guide covers the common price components, the cost drivers behind them, the rules that constrain them, and what a tariff engine needs to support.
Price components
| Component | Charged for | Good for | Watch out for |
|---|---|---|---|
| Energy (per kWh) | Energy delivered | Fairness; matches cost of electricity | Requires accurate metering; may be mandatory |
| Time (per minute or hour) | Time connected or charging | Encourages turnover | Penalizes slow-charging vehicles |
| Session fee | Each session | Covers fixed transaction costs | Disproportionate on short sessions; restricted in some markets |
| Idle or occupancy fee | Time after charging ends | Frees up chargers | Needs a clear grace period and notification |
| Parking fee | Time on site | Sites where parking is the product | Often outside the charger's data |
Energy-based pricing
Pricing per kWh is the most intuitive for drivers and the most closely tied to the main variable cost, electricity. It needs metering accurate enough for billing, which in many jurisdictions means meters and chargers approved under weights-and-measures or metrology rules. In the US, NEVI-funded chargers must price on a $/kWh basis, and in the EU, AFIR requires ad-hoc prices at points of 50 kW and above to be based on price per kWh.
Time-based pricing
Per-minute pricing was common where selling energy by the kWh was legally awkward, and it still has a role as a turnover tool. Its weakness is fairness: a car that charges slowly pays more for the same energy. Tiered per-minute rates by delivered power reduce that problem but are harder to explain.
Idle fees
An idle fee starts when charging has finished (or after a grace period) and the car is still connected. It is the most effective tool against blocked chargers. Implementation detail matters: you need a reliable signal that charging has stopped (in OCPP 1.6, a connector moving to SuspendedEV or Finishing; in 2.0.1, TransactionEvent with a chargingState of SuspendedEV or EVConnected), a clear grace period, and a notification to the driver before the fee starts. In the EU, the Commission's AFIR Q&A indicates per-minute occupancy fees are acceptable for discouraging long occupancy, but a fee charged from the start of the session is unlikely to be proportionate.
What drives your costs
- Energy charges: the per-kWh rate from the utility, often time-of-use.
- Demand charges: many commercial utility tariffs bill on the highest power drawn during a billing period. A DC fast charging site with few sessions can see a large share of its bill come from a single peak. This is the cost driver most often missed in business cases.
- Payment processing: card fees and pre-authorization costs, which weigh heavily on small sessions.
- Roaming: the eMSP's margin and any hub fees on roaming sessions.
- Network and operations: software, connectivity, maintenance and support, mostly fixed per port.
Demand charges are partly a pricing problem and partly a load management problem. Capping site power with smart charging can cut peaks; pricing can shift demand to off-peak periods. Most sites need both.
Time-of-use and dynamic pricing
Passing time-of-use structure through to drivers aligns their behaviour with your costs. The complication is sessions that cross a rate boundary. Some rules require the price at the start of a session to hold for the whole session: NEVI's 23 CFR 680.116(a) says the price at the start of a session cannot change during that session. Your tariff engine must snapshot the applicable tariff at session start and price the session against that snapshot, not the current tariff.
Expressing tariffs: OCPI as a model
Even if you never roam, OCPI's tariff model is a useful template: a tariff is a list of elements, each with price components (ENERGY, TIME, PARKING_TIME, FLAT) and optional restrictions (time of day, day of week, kWh or duration ranges, power ranges). Here is a tariff with a per-kWh rate, and a parking fee that applies only to parking time between 08:00 and 20:00:
{
"country_code": "US",
"party_id": "HTS",
"id": "DC-STD-01",
"currency": "USD",
"elements": [
{
"price_components": [
{ "type": "ENERGY", "price": 0.45, "step_size": 1 }
]
},
{
"price_components": [
{ "type": "PARKING_TIME", "price": 24.00, "step_size": 60 }
],
"restrictions": { "start_time": "08:00", "end_time": "20:00" }
}
],
"last_updated": "2026-10-26T00:00:00Z"
}Prices in TIME and PARKING_TIME components are per hour, and step_size is the billing increment in seconds (or Wh for energy). The OCPI tariffs post works through how a CDR is priced against a tariff like this.
Member, roaming and ad-hoc prices
Most networks end up with several prices for the same kWh: a subscription or member rate, the standard rate for app users, the wholesale tariff published to roaming partners, and the ad-hoc price for card payments. That is legitimate, but each adds a dimension to tariff assignment, and some rules limit the differences. NEVI forbids requiring a membership to charge, and AFIR requires prices to be non-discriminatory between end users and mobility service providers unless differences are proportionate and objectively justified. Keep the assignment logic explicit and auditable so you can show which tariff applied to any session and why.
Showing prices on the charger
Drivers need to see the price before they start and ideally the running cost during the session. OCPP 1.6 has no standard tariff messages, so displays depend on vendor extensions. OCPP 2.0.1 adds tariff and cost functionality (CostUpdated, cost in transaction responses, SetDisplayMessage) and OCPP 2.1 extends it further. See display messages and costs.
Tariff engine requirements
- Versioned tariffs, with the version used stored on each session.
- Components for energy, time, flat fees and idle time, with restrictions by time of day, day of week, power and duration.
- Tariff assignment by site, EVSE, customer group, and roaming partner.
- Timezone-correct evaluation using the location's local time.
- Deterministic rounding rules that match what you publish to partners and print on receipts.
- Re-pricing tools for disputes, using the stored tariff version and the raw meter data.
Key takeaways
- Per-kWh pricing is the default and is required in some regulated contexts; time and idle fees manage turnover.
- Demand charges can dominate DC site economics; address them with load management as well as pricing.
- Snapshot the tariff at session start, and model tariffs in a structure that maps cleanly to OCPI.
HashTech builds tariff and billing engines into the charging platforms we deliver.

