OCPI Version History: 2.1.1 → 2.2 → 2.2.1 → 2.3.0 → What's Next

Every OCPI release from 2.1.1 through 2.3.0, plus the 3.0 preview: what each version changed, and which one a new integration should target.

OCPI has had five named releases since its first public version, and the gaps between them decide what a roaming link can actually express. This is the version-by-version history: what changed in each release, and what problem the change was solving.

The release timeline

VersionReleasedMajor theme
2.12016First public version
2.1.1Oct 2017Patch and clarifications on 2.1
2.2Mar 2020Hub role, Smart Charging module, refinements
2.2.1Jun 2020Bugfix and clarification pass over 2.2
2.3.0Feb 2025AFIR data duties plus an extensibility framework
3.0(in development)Larger architectural changes
timeline
    title OCPI version evolution
    2016 : 2.1 first public version
    2017 : 2.1.1 clarifications and fixes
    2020 : 2.2 hubs + smart charging
         : 2.2.1 bugfix release
    2025 : 2.3.0 AFIR data duties
    2026+ : 3.0 in development

OCPI 2.1 / 2.1.1 (2017)

Theme: the first version with enough of the model pinned down to build a production integration against.

What it established:

  • The CPO and eMSP role definitions that the rest of the protocol hangs off (the OCPI overview covers how those roles divide the work)
  • The six core modules: Locations, Tariffs, Sessions, CDRs, Tokens and Commands
  • The Sender and Receiver interface concept. Each module has a side that publishes data and a side that consumes it, and which side you are is a property of the module, not of your company.
  • Token-based authentication between parties
  • The Versions and Credentials modules for connection setup, walked through in credentials and versions

What was missing or weak:

  • No formal hub role. The protocol modeled every link as CPO to eMSP, so anything sitting in the middle had to present itself as one side or the other.
  • Smart charging capability was minimal
  • Several data fields carried semantics loose enough that two implementers could read them differently and both be defensible
  • Module-level versioning was loose

Status in 2026: 2.1.1 is marked deprecated in the specification. Because the version lives in the URL path, a deployed 2.1.1 link keeps answering /ocpi/cpo/2.1.1/ requests regardless, so “deprecated in the spec” and “gone from the wire” are two different events separated by years.

OCPI 2.2 → 2.2.1 (Mar–Jun 2020)

Theme: hubs, smart charging, and the sanding down that a protocol only gets after production use.

Hub role formally defined

OCPI 2.2 made Hub a first-class role: a party that holds OCPI connections with several CPOs and eMSPs and routes messages between them. Roaming hubs already operated commercially before that (Hubject among them), but they had to do it by impersonating a CPO to one side and an eMSP to the other. Naming the role brought its own plumbing, notably the Hub Client Info module, which lets a hub tell every connected party who else is currently reachable. The tradeoff between routing through a hub and wiring partners directly is worked through in hub vs peer-to-peer OCPI.

Smart Charging module

A module for negotiating charging profiles across the roaming boundary: an eMSP can request a delivery schedule, and the CPO answers with the schedule it will actually honor. 2.1.1 had no vocabulary for this at all. The ChargingProfiles module walks through the message flow.

Better session real-time data

Session updates gained finer live data: dynamic current and voltage, status per EVSE rather than per location, and fuller metering information.

Improved authorization flows

The token model picked up clearer rules for whitelist and blacklist handling, and for what a receiver should do with a token it does not recognize. That last case is the one that used to produce two partners behaving differently while both believed they were correct.

CDR clarifications

The Charge Detail Record gained a structured pricing breakdown. Per-kWh, per-minute, idle fees and taxes each get their own dimension instead of being flattened into one total, which is what makes a disputed session reconcilable months later.

2.2 → 2.2.1 patches

2.2.1 is a bugfix and clarification release over 2.2: same module set, same wire format, fewer readings per paragraph. Implementing 2.2 first buys nothing except the ambiguities 2.2.1 already resolved. The 2.2 vs 2.2.1 comparison explains why those minor digits matter in practice.

Status in 2026: OCPI 2.2.1 is the current mainstream release. Absent a specific AFIR requirement, it is the version a fresh implementation should target.

OCPI 2.3.0 (February 2025)

Theme: regulatory compliance and extensibility.

AFIR (Alternative Fuels Infrastructure Regulation) compliance

The EU’s Alternative Fuels Infrastructure Regulation (Regulation (EU) 2023/1804) sets data publication duties for public charge points: availability that reflects reality, ad-hoc payment, and a price the driver can see before plugging in. Those duties land on the protocol as concrete requirements:

  • Tariff publication formats that can be rendered into an up-front price
  • Status updates timely enough that published availability is not already stale
  • A minimum set of Location fields, mandatory rather than optional

2.3.0 carries those fields natively. A 2.2.1 link can be made to satisfy the same duties, but only through bilateral agreement or non-standard fields, which is the exact situation the extensibility framework was added to clean up. AFIR compliance for OCPI in Europe (coming soon) takes the requirements one at a time.

North American tax level support

The earlier CDR pricing model assumed a single national VAT. North American jurisdictions stack taxes (federal, state, county, municipal), and collapsing them into one figure leaves a CDR that cannot be audited against the receipt the driver was shown. 2.3.0 represents several tax levels on a single CDR.

Extensibility framework

A namespaced mechanism for vendor-specific fields and message types. A partner that does not recognize a namespaced extension ignores it rather than rejecting the message. That reverses the earlier stance: previous versions discouraged custom fields, and 2.3.0 instead gives them a place where a strict parser will not choke on them.

Refined module behaviors

  • Tariffs module updates for more complex pricing structures
  • Sessions module improvements for partial reporting
  • Clarifications on what is required versus optional in various flows

Status in 2026: 2.3.0 is the newest published release, and its pull is regulatory rather than technical. Outside the AFIR perimeter, the multi-level tax fields are the part most likely to earn their keep. For a module-by-module breakdown, see what’s new in OCPI 2.3.0.

OCPI 3.0 (in development)

Not released, and the EVRoaming Foundation has published no release date. Treat any timeline you hear as unconfirmed until a release candidate exists.

The gaps 2.x still leaves are a better guide than a rumored date. A major version has room to address:

  • Structural changes that 2.x cannot make without breaking compatibility
  • Tighter handoffs with ISO 15118, where OCPI tokens and 15118 contract certificates describe the same driver in different vocabularies (see Plug and Charge end to end (coming soon))
  • Vehicle-to-grid flows, which need bidirectional energy and settlement concepts the current data model has no room for
  • A security model with more in it than bearer tokens over TLS

The version number is the signal worth watching. A 3.0 announces that compatibility is on the table in a way that no 2.x point release does. Our OCPI 3.0 preview tracks the proposals as they firm up.

Migration considerations

From 2.1.1 → 2.2.1

This is the migration with real structural work in it, because 2.2 changed shape rather than adding fields. What moves:

  • The hub role, which changes who you talk to and how routing information travels if you go via a hub
  • New module endpoints to implement on both interfaces
  • CDR pricing structure, where the flat total becomes a set of dimensions
  • Token authentication behavior

The 2.1.1 to 2.2 migration guide has the field-level detail.

The workable pattern is to serve both versions from the same backend for a while: keep /ocpi/cpo/2.1.1/ alive, add /ocpi/cpo/2.2.1/, let each partner move when it is ready, and retire the old path once the last one has.

From 2.2.1 → 2.3.0

Smaller, and mostly additive:

  • New AFIR-related fields
  • Tax level fields, which matter wherever taxes stack rather than only in Europe or only outside it
  • Moving any custom fields you previously bolted on into the extensibility framework’s namespace

Backward compatibility

OCPI puts the version in the URL (/ocpi/cpo/2.2.1/...), so one party can serve several versions at once. Partners discover what each other supports through the Versions module and settle on the highest version both sides implement.

That negotiation is what makes a phased migration possible. It is also the reason a unilateral upgrade changes nothing by itself.

Which version to implement today

For a new OCPI implementation in 2026:

  • Target 2.2.1 as the floor. It is the current mainstream release, and everything below it is missing structure you will want.
  • Add 2.3.0 if AFIR applies to you, or if you bill in jurisdictions with stacked taxes and need the CDR to survive an audit.
  • Keep your module boundaries clean. A 3.0 that breaks compatibility will be far cheaper to absorb if your version-specific serialization is not smeared through your business logic.

For an existing 2.1.1 deployment, the deciding factor is not the calendar. It is which 2.2.1 capability you are currently working around: hub routing, smart charging, or CDR pricing detail. If you are working around none of them, the upgrade can wait for a partner to force it. If you are working around two, the workarounds already cost more than the migration.

What actually sets your version

The version you run is not entirely your decision. Because the Versions module settles on the highest version both sides implement, your effective version on any given link is set by whichever partner is furthest behind. Upgrading your own stack to 2.3.0 while your largest counterparties sit on 2.2.1 gets you a set of 2.2.1 links and a second codebase to maintain.

That changes the arithmetic of hub versus direct connections in a way the topology diagrams do not show. One upgrade on a hub link can move every partner behind that hub at once, while a mesh of bilateral connections has to be renegotiated partner by partner. The cost of running a version behind is bounded, but it is not paid once. It is paid on every link you hold, and it is settled on someone else’s schedule.

Quick check

Q1. Which OCPI version added AFIR compliance features for European deployments?

Frequently asked questions

Which OCPI version should a new integration target in 2026?

OCPI 2.2.1 is the current mainstream release and the sensible default. It carries the hub role, the smart charging module and the structured CDR pricing breakdown that 2.1.1 lacks. OCPI 2.3.0, published February 2025, layers the AFIR-oriented data fields and multi-level tax support on top of that.

Do I need to upgrade from OCPI 2.1.1?

Not on a schedule, because OCPI puts the version in the URL path and a 2.1.1 link keeps working as long as both sides serve it. Upgrade when you hit the limits: no formal hub role, no smart charging module, and a CDR pricing model that cannot express stacked taxes or the granular tariff data that AFIR requires operators in the EU to publish.

What is new in OCPI 2.3.0?

AFIR-oriented data requirements, support for several stacked tax levels on a single CDR, a namespaced extensibility framework for vendor-specific fields, and refinements to the Tariffs and Sessions modules.

Found this useful? Share it.