Settlement & Reconciliation

EV Roaming Settlement: How a Roamed Charging Session Gets Reconciled and Paid

EV roaming settlement explained: how a roamed charging session becomes an OCPI CDR, is reconciled between CPO and eMSP, and is invoiced and paid.

By YoHub10 min read

EV roaming settlement between a charge point operator and an e-mobility service provider

💡 EV Roaming Settlement: Key Highlights

  • The charge detail record (CDR) is the invoice line: kWh, UTC times, tariffs and total cost, unchangeable once sent.
  • Three stages: data exchange, reconciliation, invoicing and payment.
  • Two models: the hub invoices and pays out (YoHub in India), or parties pay each other while the hub reconciles (YoHub in the UAE).
  • Most mismatches come from six causes: missing CDRs, Wh/kWh errors, UTC month boundaries, mid-session tariff changes, rounding, and zero-energy sessions.
  • Corrections go through a credit CDR, never an edit.

EV roaming settlement is the work that turns a charging session on one company’s charger, started by another company’s customer, into money moving between the two. The driver sees a single charge in their app. Behind it, the charge point operator (CPO) that owns the charger and the e-mobility service provider (eMSP) that owns the customer have to agree on what happened, what it cost and who pays whom.

Below, we follow one roamed session from the driver’s tap to the CPO’s payout, name the OCPI 2.2.1 fields that carry the money, compare the two settlement models in use today, and list why the two sides’ numbers disagree.

What EV roaming settlement covers

Roaming lets an eMSP’s customers charge on a CPO’s network. Settlement is what happens after the session for that agreement to pay out. It has three parts, each of which can fail on its own:

  • Data exchange. The CPO sends the eMSP session data and, at the end, a charge detail record (CDR). No CDR, nothing to bill.
  • Reconciliation. Both sides compare their records, session by session, on energy (kWh) and amount.
  • Invoicing and payment. Agreed CDRs are invoiced for a period with local tax, and paid.

OCPI standardises the first part in detail, says little about the second and nothing about the third. Invoicing and payment are set by the roaming agreement, or by the hub both parties connect to.

One roamed session, end to end

A driver uses an eMSP’s app to start a DC fast-charging session on a CPO’s charger. Both companies connect to a roaming hub. Here is what moves, and when.

StepWhat happensOCPI 2.2.1 module
1. AuthoriseThe eMSP has shared its customer’s token. For app tokens the spec recommends whitelist = NEVER: the CPO checks with the eMSP in real time.Tokens
2. StartThe CPO creates a Session with the token, location, EVSE, connector and currency.Sessions, Commands (for an app start)
3. UpdateThe CPO sends updates with PUT or PATCH so the app shows live kWh and cost. The status moves from PENDING to ACTIVE to COMPLETED.Sessions
4. CloseThe driver unplugs; the CPO prices the session against the tariff that applied.Sessions, Tariffs
5. CDRThe CPO POSTs the CDR to the eMSP. eMSPs without push support GET it instead.CDRs
6. ReconcileBoth sides match the CDR to their own records on kWh and amount.Outside OCPI
7. Invoice and payCDRs for the period are invoiced with tax, and money moves through the hub or directly.Outside OCPI

The life of one roamed charging session. Steps 1 to 5 are defined by OCPI 2.2.1. Steps 6 and 7 depend on the settlement model.

Two details matter for finance. The Session and the CDR are separate objects, so a session can show in the eMSP’s app and never produce a CDR if a POST fails. And while the spec prefers near-real-time push, it allows periodic delivery, even monthly, by agreement (OCPI 2.2.1 CDRs module). An agreed delay is fine; an unnoticed one is a reconciliation problem.

For engineers building the integration, see the YoHub OCPI 2.2.1 developer page.

The CDR fields that decide the money

A CDR has more than 25 fields. These decide the money:

FieldWhat it carriesWhy it matters for settlement
country_code, party_id, idThe CPO that owns the CDR, and a unique ID per CPOMatching key. Duplicate or reused IDs cause double billing
cdr_tokenThe eMSP’s token: its own country code and party ID, uid, type and contract_idDecides which eMSP is billed. Wrong party ID means the wrong counterparty
start_date_time, end_date_timeStart and end of the session, always in UTCDecides which day and which month the session falls in
total_energyEnergy charged, in kWhThe kWh side of reconciliation
tariffs, charging_periodsThe tariffs that applied, and the periods with their dimensionsLets the eMSP check the price instead of trusting the total
currency, total_costISO 4217 currency, total cost with and without VATThe amount side of reconciliation
credit, credit_reference_idMarks a credit CDR and points to the originalThe only spec-compliant way to correct a CDR already sent

Key fields of the OCPI 2.2.1 CDR object. Field names as published in the OCPI 2.2.1 CDRs module.

One rule shapes everything downstream: once sent, a CDR cannot be changed, replaced or deleted. To fix an error the CPO sends a credit CDR with a new ID, credit set to true, credit_reference_id pointing to the original, and the total as a negative amount, then a corrected CDR with another new ID. Any process that edits CDRs in place drifts away from what the other side holds.

Two EV roaming settlement models: hub settles vs peer to peer

Once the CDRs are agreed, someone invoices and someone pays. There are two ways to set this up, and YoHub runs one of each, depending on the market.

Hub settlesPeer to peer, hub reconciles
Where YoHub uses itIndiaUAE
Who invoices the eMSPThe hubThe CPO, directly
Who pays the CPOThe hub, after collecting from the eMSPThe eMSP, directly
Counterparties for a CPOOne: the hubEvery eMSP it roams with
Who carries credit riskThe hubEach CPO, for each eMSP
Does the platform hold fundsYesNo
What the hub providesInterconnection, reconciliation, invoicing and payoutInterconnection, plus kWh and amount reconciliation that both parties can see

The two settlement models compared from a CPO’s point of view.

Hub settles: one invoice, one payout

In India, YoHub sits in the money flow. It issues one invoice to each eMSP with GST, collects from the eMSP, and pays each CPO. A CPO roaming with twenty eMSPs has one counterparty instead of twenty receivables. The trade-off: the hub carries the credit risk and holds the funds. How this works for Indian operators is described on the YoHub India page.

Peer to peer: the hub reconciles, the parties pay each other

In the UAE, YoHub never holds funds. The CPO invoices each eMSP directly and is paid directly. The hub makes sure both parties see the same CDRs with kWh and amounts matched, so the invoice doesn’t start an argument. The platform stays out of the payment flow, which is regulated in many jurisdictions; the cost is one commercial relationship per eMSP. The UAE setup is described on the YoHub UAE page.

Invoicing and GST in India

Public EV charging in India is taxed as a service, not as a sale of electricity. In September 2024 the GST Fitment Committee kept the tax on the full amount charged at public stations, following the Ministry of Power’s view that charging is a service that consumes electricity rather than a sale of it (Business Today). In the hub-settles model the hub issues the invoice, so the eMSP receives one GST invoice for all its roamed sessions instead of one per CPO. OCPI prices are quoted before VAT with the rate as a separate field, so total_cost can be checked with and without tax.

Why CPO and eMSP numbers disagree

When monthly totals don’t match, the cause is rarely fraud. It is usually one of these, and each leaves a sign in the data.

Sessions that never became a CDR

The eMSP saw the session, and may have billed its customer, but the CDR never arrived. Sign: a completed Session on the eMSP side with no matching CDR. Check: match Sessions to CDRs by session_id every day, not at month end.

Energy in Wh where kWh was expected

OCPI defines total_energy in kWh. Chargers often report meter values in Wh, so a missed conversion turns a 24.6 kWh session into 24,600 kWh. Sign: sessions with energy 1,000 times the charger’s plausible output. Check: reject any CDR whose kWh divided by charging hours exceeds the EVSE’s rated power.

Sessions that cross midnight or month end

OCPI timestamps are always in UTC (OCPI 2.2.1 types). A session in India that runs from 23:40 IST on 31 October to 00:35 IST on 1 November ends at 19:05 UTC on 31 October. A CPO that closes its books in IST counts it in November. An eMSP that closes in UTC counts it in October. Sign: month totals that differ by a handful of late-night sessions. Check: agree in the roaming agreement which time zone and which timestamp (start or end) assigns a session to a period.

Tariff changes during a session

Drivers accept the tariff valid at session start, and CPOs usually don’t switch mid-session, but OCPI allows it (OCPI 2.2.1 Tariffs module). An eMSP that prices sessions from its cached copy of the tariff will disagree with a CPO that published a new version mid-session. Sign: amount mismatches with matching kWh. Check: price against the tariffs carried in the CDR, not against the latest tariff on file.

Rounding and step size

OCPI 2.2.1 rounds consumed amounts up to the next multiple of a price component’s step_size. Systems that round differently end up a few paise or fils apart on every session. Sign: small, constant differences across many sessions. Check: agree on a tolerance per CDR and recompute with the same rounding rules.

Invalid and zero-energy sessions

A Session with status INVALID is, in the words of the OCPI 2.2.1 Sessions module, declared invalid and will not be billed. The spec is silent on zero-energy sessions, so one CPO may send a zero-kWh CDR with a flat fee while another sends nothing. Sign: CDRs with total_energy of 0 and a non-zero total_cost. Check: write the rule into the roaming agreement: is a zero-energy session billable, and if so, for what?

A settlement checklist for CPO and eMSP teams

These checks remove most disputes before they reach an invoice, under either model.

For CPO teams

  • Send every completed session as a CDR, and retry failed POSTs until the eMSP confirms receipt.
  • Convert meter readings to kWh before they reach the CDR, and run a plausibility check on kWh per hour.
  • Include the tariffs that applied in every CDR, and version your tariffs instead of editing them in place.
  • Correct mistakes only with a credit CDR followed by a new CDR. Never resend a changed CDR under the same ID.

For eMSP teams

  • Match Sessions to CDRs every day, and pull missing CDRs by date range instead of waiting for month end.
  • Price-check CDRs against the tariffs in the CDR, with an agreed tolerance for rounding.
  • Make sure each token carries the correct party_id, so CDRs reach the right account.

For both sides

  • Agree on the time zone and the timestamp (start or end) that assigns a session to a period.
  • Agree a dispute record format: CDR ID, disputed field, both values, evidence, deadline.
  • Reconcile daily on kWh and amount, and leave month end for invoicing only.

If you run a charging network, YoHub for CPOs explains how roamed sessions reach you and get paid. If you run an app or a fleet platform, YoHub for eMSPs covers the eMSP side of the same flow.

Frequently Asked Questions

What is EV roaming settlement?

EV roaming settlement turns a session where one company’s customer charges on another company’s charger into an agreed amount and a payment. It covers the charge detail record (CDR), reconciling energy and amount between CPO and eMSP, then invoicing and payment.

What is a CDR in OCPI?

A charge detail record (CDR) is the final billing record the CPO sends the eMSP. In OCPI 2.2.1 it carries energy in kWh, times in UTC, the tariffs applied, the total cost and the customer’s token. Once sent, it cannot be changed.

Who pays whom in EV roaming?

The eMSP pays the CPO for its customers’ sessions. When the hub settles, it invoices the eMSP, collects and pays the CPO. In the peer-to-peer model the CPO invoices the eMSP directly and the hub reconciles.

How do you correct a wrong CDR?

A sent CDR can’t be edited or deleted. The CPO sends a credit CDR (new ID, credit set to true, credit_reference_id pointing to the original, negative total cost), then a corrected CDR with another new ID.

Why do CPO and eMSP totals not match?

Usually: missing CDRs, energy in Wh instead of kWh, sessions crossing month end in UTC, mid-session tariff changes, different step-size rounding, or different rules for zero-energy sessions. Daily reconciliation catches most early.

Sources: OCPI 2.2.1 CDRs module | OCPI 2.2.1 Sessions module | OCPI 2.2.1 Tariffs module | EVRoaming Foundation, OCPI | Business Today, GST on public EV charging (Sept 2024)

Connect once. Reach every network.

Book a 45-minute call with the team that runs the platform. We'll map your integration and show you the network live.

Scroll to Top