OCPI 2.1.1 and OCPI 2.2.1 are the two versions most EV charging teams evaluate when they build roaming integrations. OCPI 2.1.1 remains a common baseline for partner interoperability, while OCPI 2.2.1 expands the protocol for hubs, smarter tariff handling, and charging-profile workflows.
If you need version-specific validation, start with OCPI 2.1.1 testing and OCPI 2.2.1 testing.
If you are preparing for roaming rollout or partner onboarding, continue with OCPI roaming testing or book an OCPI demo.
Quick Comparison: OCPI 2.1.1 vs 2.2.1
| Feature | OCPI 2.1.1 | OCPI 2.2.1 |
|---|---|---|
| Core roaming modules | Yes | Yes |
| Credentials + version discovery | Yes | Yes |
| Locations, Sessions, CDRs, Tariffs, Tokens, Commands | Yes | Yes |
| Hub support | Limited practical coverage | Stronger hub-oriented workflows |
| HubClientInfo | No | Yes |
| ChargingProfiles | No | Yes |
| Tariff model | Core pricing model | Richer tariff metadata and structure |
| Migration difficulty | Lower implementation surface | Larger implementation surface |
| Best fit | Direct roaming partners and baseline interoperability | Hubs, smart charging, and broader future-ready roaming |
The Short Answer
Choose OCPI 2.1.1 when you need the fastest path to stable roaming interoperability with the core modules: credentials, locations, sessions, CDRs, tariffs, tokens, and commands.
Choose OCPI 2.2.1 when you need hub-oriented behavior, smarter charging workflows, or a broader protocol surface for future roaming requirements.
In practice, many teams still need to support both: 2.1.1 for existing partner compatibility and 2.2.1 for newer integrations.
What Stays the Same
The good news is that the two versions share the same core model:
- REST APIs over HTTPS
- credentials handshake and token exchange
- version discovery through
/versions - core roaming entities such as locations, EVSEs, sessions, CDRs, tariffs, and tokens
- CPO and eMSP role separation
That means an upgrade from 2.1.1 to 2.2.1 is usually not a full rewrite. It is more often an expansion of your existing roaming implementation.
Where OCPI 2.2.1 Adds Real Value
1. Hub-Centric Integrations
OCPI 2.2.1 is a better fit for hub-connected ecosystems because it adds structures that are more practical for multi-party roaming environments. The most visible example is HubClientInfo, which helps systems exchange participant information in hub-based topologies.
If your roadmap includes hub onboarding, version 2.2.1 is usually the safer long-term choice.
2. ChargingProfiles
OCPI 2.2.1 introduces ChargingProfiles, which matters when smart charging needs to pass through the roaming chain instead of staying entirely inside the local CPO backend.
This becomes relevant when:
- an eMSP wants to influence charging behavior
- a roaming workflow needs schedule-aware energy management
- the backend stack must coordinate with OCPP 2.0.1 smart charging flows
3. Richer Tariff and Field Coverage
OCPI 2.2.1 gives teams more expressive tariff and metadata structures. That matters when pricing presentation, settlement clarity, or country-specific compliance expectations become stricter.
Module-by-Module Comparison
Credentials and Version Discovery
No major conceptual change here. Both versions rely on the same practical sequence:
GET /versionsGET /versions/{version}POST /credentials- token exchange and endpoint discovery
This is why many teams can run both versions side by side without changing the whole architecture.
Locations, Sessions, and CDRs
Both versions support the core data flows roaming teams need every day:
- publish charger locations and EVSE data
- exchange live or near-real-time session updates
- submit CDRs for settlement and invoicing
For many operators, this is enough to ship a production roaming connection on 2.1.1.
Tokens and Commands
Again, both versions cover the main operational paths:
- driver token synchronization
- remote start and stop behavior
- reservation and unlock style command flows
If your product only needs baseline roaming enablement, 2.1.1 can remain perfectly serviceable.
ChargingProfiles
This is one of the clearest reasons to move to 2.2.1. When your roaming program needs charging control beyond static authorization and billing, 2.2.1 gives you the protocol surface to model it.
HubClientInfo
This is the other major differentiator. Hub-oriented roaming is easier to reason about in 2.2.1 because the protocol acknowledges those integration patterns more explicitly.
When to Choose OCPI 2.1.1
Choose OCPI 2.1.1 if:
- you need fast partner onboarding with the core roaming modules
- your partners already standardize on 2.1.1
- you do not need ChargingProfiles right now
- your current architecture is direct CPO-to-eMSP interoperability rather than hub-heavy orchestration
- you want a narrower implementation scope for the first production release
For many teams, 2.1.1 is the right operational baseline and remains worth supporting for years.
When to Choose OCPI 2.2.1
Choose OCPI 2.2.1 if:
- you need hub integration workflows
- you need
HubClientInfo - you need
ChargingProfiles - your tariff and metadata requirements are growing
- you want to reduce the risk of building against an older functional baseline while your product roadmap expands
If you are building a newer roaming platform from scratch, 2.2.1 is often the better strategic default.
Best Practice: Support Both Versions
The safest commercial approach is often:
- support OCPI 2.1.1 for baseline compatibility
- support OCPI 2.2.1 for advanced and future-facing integrations
This mirrors what many backend teams already do on the charger side with OCPP 1.6 testing and OCPP 2.0.1 testing.
Migration Guide: OCPI 2.1.1 to 2.2.1
Step 1: Keep Your Core Modules Stable
Before adding 2.2.1-only features, make sure your 2.1.1 baseline is fully reliable:
- credentials lifecycle
- locations synchronization
- sessions and CDR exchange
- token authorization
- command callbacks and error handling
Step 2: Add Version-Aware Routing
Make sure your implementation can distinguish version-specific endpoints and payload handling cleanly. This reduces regression risk and lets you run 2.1.1 and 2.2.1 side by side.
Step 3: Add 2.2.1-Only Modules Deliberately
Treat ChargingProfiles and HubClientInfo as explicit additions, not incidental changes. They usually need:
- new payload validation
- new persistence models
- new async workflow handling
- new interoperability tests
Step 4: Test with Simulated Counterparties
Do not wait for a live roaming partner or hub to discover payload mismatches. Simulate the opposite party and test the full flow before launch with OCPI roaming testing.
Step 5: Validate Mixed-Version Behavior
If your platform will support both versions, test:
- 2.1.1-only partner flows
- 2.2.1-only partner flows
- shared core modules across both versions
- error handling when payload expectations diverge
Example Decision Framework
| Situation | Recommended Version |
|---|---|
| Launching a simple direct roaming integration | OCPI 2.1.1 |
| Connecting to hub-oriented ecosystems | OCPI 2.2.1 |
| Need smart charging over roaming | OCPI 2.2.1 |
| Need maximum compatibility with existing partners | OCPI 2.1.1 plus 2.2.1 roadmap |
| Building a future-facing roaming platform | Support both, prioritize 2.2.1 depth |
Frequently Asked Questions
Is OCPI 2.2.1 backward compatible with 2.1.1?
Not automatically in the sense of using identical endpoints and payload expectations everywhere. The versions are closely related, but your implementation still needs explicit version-aware handling.
Should I skip OCPI 2.1.1 and only implement 2.2.1?
Only if you are certain your target partners and hubs do not require 2.1.1. Many teams still need 2.1.1 for practical interoperability.
Is ChargingProfiles the main reason to adopt 2.2.1?
It is one of the strongest reasons, especially for smart charging and advanced roaming workflows. Hub support is the other big reason.
What is the safest production strategy?
Support the 2.1.1 baseline cleanly, then expand to 2.2.1 where partner demand or product scope requires it.


