Summary

OCPI 2.3.0 focuses on two primary goals:

  1. Regulatory Compliance
    OCPI 2.3.0 ensures compliance with new laws and regulatory requirements becoming effective in 2025. The changes in this release primarily address transparency obligations, taxation requirements (including North American tax support), accessibility considerations, and enhanced consumer information.

  2. Extensibility
    OCPI 2.3.0 introduces structural enhancements that enable extensibility of the protocol. It becomes possible to add new modules, fields, and enum values without breaking interoperability between implementations.

OCPI 2.3.0 builds on version 2.2.1 and introduces a limited set of changes. However, adding new modules, fields, and enum values may require implementation updates.

Protocol Changes

OCPI 2.3.0 changes the protocol from a strictly defined contract to an extensible and forward-compatible contract.

Architectural Changes

  1. Custom Modules
    Next to the modules defined in the OCPI specification, additional custom modules can be defined.

  2. Custom Properties
    A class datatype is defined as a set of key-value pairs, where the specification defines the required and optional properties and their value types. Additional properties may be included to allow custom extensions.

  3. Custom Enumeration Values
    An OpenEnum defines a property type with a set of known specified values while allowing additional, custom values. The known values ensure interoperability for common concepts (e.g. connector types), while additional values allow implementers to introduce custom or newly defined variants.

Module Changes

Bookings Module

The Bookings module is new in OCPI 2.3.0. As this module has no 2.2.1 counterpart, no migration diff is available.

Payments Module

The Payments module is new in OCPI 2.3.0. As this module has no 2.2.1 counterpart, no migration diff is available.

CDRs Module

Sender Interface

Endpoint Impact Changelog

GET /cdrs

HIGH

MEDIUM

LOW

  • Response Optional Property Added

  • Response Required Property Added

    • before_taxes (on data[CDR] > tariffs[Tariff] > max_price[PriceLimit])

    • before_taxes (on data[CDR] > tariffs[Tariff] > min_price[PriceLimit])

    • before_taxes (on data[CDR] > total_cost[Price])

    • before_taxes (on data[CDR] > total_energy_cost[Price])

    • before_taxes (on data[CDR] > total_fixed_cost[Price])

    • before_taxes (on data[CDR] > total_parking_cost[Price])

    • before_taxes (on data[CDR] > total_reservation_cost[Price])

    • before_taxes (on data[CDR] > total_time_cost[Price])

    • tax_included (on data[CDR] > tariffs[Tariff])

Receiver Interface

Endpoint Impact Changelog

POST /cdrs

HIGH

MEDIUM

  • Request Property Removed

    • excl_vat (on data[CDR] > tariffs[Tariff] > max_price[PriceLimit])

    • excl_vat (on data[CDR] > tariffs[Tariff] > min_price[PriceLimit])

    • excl_vat (on data[CDR] > total_cost[Price])

    • excl_vat (on data[CDR] > total_energy_cost[Price])

    • excl_vat (on data[CDR] > total_fixed_cost[Price])

    • excl_vat (on data[CDR] > total_parking_cost[Price])

    • excl_vat (on data[CDR] > total_reservation_cost[Price])

    • excl_vat (on data[CDR] > total_time_cost[Price])

    • incl_vat (on data[CDR] > tariffs[Tariff] > max_price[PriceLimit])

    • incl_vat (on data[CDR] > tariffs[Tariff] > min_price[PriceLimit])

    • incl_vat (on data[CDR] > total_cost[Price])

    • incl_vat (on data[CDR] > total_energy_cost[Price])

    • incl_vat (on data[CDR] > total_fixed_cost[Price])

    • incl_vat (on data[CDR] > total_parking_cost[Price])

    • incl_vat (on data[CDR] > total_reservation_cost[Price])

    • incl_vat (on data[CDR] > total_time_cost[Price])

LOW

GET /cdrs/{cdr_id}

HIGH

MEDIUM

LOW

  • Response Optional Property Added

  • Response Required Property Added

    • before_taxes (on data[CDR] > tariffs[Tariff] > max_price[PriceLimit])

    • before_taxes (on data[CDR] > tariffs[Tariff] > min_price[PriceLimit])

    • before_taxes (on data[CDR] > total_cost[Price])

    • before_taxes (on data[CDR] > total_energy_cost[Price])

    • before_taxes (on data[CDR] > total_fixed_cost[Price])

    • before_taxes (on data[CDR] > total_parking_cost[Price])

    • before_taxes (on data[CDR] > total_reservation_cost[Price])

    • before_taxes (on data[CDR] > total_time_cost[Price])

    • tax_included (on data[CDR] > tariffs[Tariff])

Object Types

Modified Object Types
CDR
Property Changelog

booking_id

  • Property added

cdr_location

cdr_token

charging_periods

tariffs

total_cost

total_energy_cost

total_fixed_cost

total_parking_cost

total_reservation_cost

total_time_cost

CdrDimension
Property Changelog

type

CdrDimensionType
Value Changelog

RESERVATION_EXPIRES

  • Enum value added

RESERVATION_OVERTIME

  • Enum value added

CdrLocation
Property Changelog

connector_standard

CdrToken
Property Changelog

type

ChargingPeriod
Property Changelog

dimensions

Commands Module

Receiver Interface

Endpoint Impact Changelog

POST /commands/RESERVE_NOW

HIGH

LOW

  • Request Property Enum Value Added

POST /commands/START_SESSION

HIGH

LOW

Object Types

Modified Object Types
CommandType
  • format changed from enum to open-enum

ReserveNow
Property Changelog

token

StartSession
Property Changelog

token

Credentials Module

Interface

Endpoint Impact Changelog

GET /credentials

HIGH

LOW

POST /credentials

HIGH

LOW

PUT /credentials

HIGH

LOW

Object Types

Modified Object Types
Credentials
Property Changelog

hub_party_id

  • Property added

roles

CredentialsRole
Property Changelog

business_details

role

  • Role type modified

HubClientInfo Module

Sender Interface

Endpoint Impact Changelog

GET /hubclientinfo

LOW

  • Response Property Enum Value Removed

Receiver Interface

Endpoint Impact Changelog

GET /hubclientinfo/{country_code}/{party_id}

LOW

  • Response Property Enum Value Removed

PUT /hubclientinfo/{country_code}/{party_id}

HIGH

  • Request Property Enum Value Removed

Object Types

Modified Object Types
ClientInfo
Property Changelog

role

  • Role type modified

Role
Value Changelog

HUB

  • Enum value deleted

Locations Module

Sender Interface

Endpoint Impact Changelog

GET /locations

HIGH

MEDIUM

LOW

GET /locations/{location_id}

HIGH

MEDIUM

LOW

GET /locations/{location_id}/{evse_uid}

HIGH

  • Response Property Type Changed

    • capabilities (on data[EVSE])

    • category (on data[EVSE] > images[Image])

    • parking_restrictions (on data[EVSE])

    • standard (on data[EVSE] > connectors[Connector])

MEDIUM

  • Response Property Enum Value Added

    • parking_restrictions (on data[EVSE])

    • standard (on data[EVSE] > connectors[Connector])

LOW

  • Response Optional Property Added

    • accepted_service_providers (on data[EVSE])

    • capabilities (on data[EVSE] > connectors[Connector])

    • parking (on data[EVSE])

GET /locations/{location_id}/{evse_uid}/{connector_id}

HIGH

  • Response Property Type Changed

MEDIUM

  • Response Property Enum Value Added

LOW

  • Response Optional Property Added

Receiver Interface

Endpoint Impact Changelog

GET /locations/{country_code}/{party_id}/{location_id}

HIGH

MEDIUM

LOW

PATCH /locations/{country_code}/{party_id}/{location_id}

HIGH

LOW

PUT /locations/{country_code}/{party_id}/{location_id}

HIGH

LOW

GET /locations/{country_code}/{party_id}/{location_id}/{evse_uid}

HIGH

  • Response Property Type Changed

    • capabilities (on data[EVSE])

    • category (on data[EVSE] > images[Image])

    • parking_restrictions (on data[EVSE])

    • standard (on data[EVSE] > connectors[Connector])

MEDIUM

  • Response Property Enum Value Added

    • parking_restrictions (on data[EVSE])

    • standard (on data[EVSE] > connectors[Connector])

LOW

  • Response Optional Property Added

    • accepted_service_providers (on data[EVSE])

    • capabilities (on data[EVSE] > connectors[Connector])

    • parking (on data[EVSE])

PATCH /locations/{country_code}/{party_id}/{location_id}/{evse_uid}

HIGH

LOW

PUT /locations/{country_code}/{party_id}/{location_id}/{evse_uid}

HIGH

  • Request Property Type Changed

    • capabilities (on data[EVSE])

    • category (on data[EVSE] > images[Image])

    • parking_restrictions (on data[EVSE])

    • standard (on data[EVSE] > connectors[Connector])

LOW

  • New Optional Request Property

    • accepted_service_providers (on data[EVSE])

    • capabilities (on data[EVSE] > connectors[Connector])

    • parking (on data[EVSE])

  • Request Property Enum Value Added

    • parking_restrictions (on data[EVSE])

    • standard (on data[EVSE] > connectors[Connector])

GET /locations/{country_code}/{party_id}/{location_id}/{evse_uid}/{connector_id}

HIGH

  • Response Property Type Changed

MEDIUM

  • Response Property Enum Value Added

LOW

  • Response Optional Property Added

PATCH /locations/{country_code}/{party_id}/{location_id}/{evse_uid}/{connector_id}

HIGH

LOW

PUT /locations/{country_code}/{party_id}/{location_id}/{evse_uid}/{connector_id}

HIGH

  • Request Property Type Changed

LOW

  • New Optional Request Property

  • Request Property Enum Value Added

Object Types

Added Object Types
  • ConnectorCapability

  • EVSEParking

  • EVSEPosition

  • Parking

  • ParkingDirection

  • VehicleType

Modified Object Types
Capability
  • format changed from enum to open-enum

Connector
Property Changelog

capabilities

  • Property added

standard

ConnectorPatch
Property Changelog

capabilities

  • Property added

standard

ConnectorType
  • format changed from enum to open-enum

Value Changelog

MCS

  • Enum value added

SAE_J3400

  • Enum value added

EnergyMix
Property Changelog

environ_impact

EnvironmentalImpact
Property Changelog

category

EnvironmentalImpactCategory
  • format changed from enum to open-enum

EVSE
Property Changelog

accepted_service_providers

  • Property added

capabilities

connectors

images

parking

  • Property added

parking_restrictions

EVSEPatch
Property Changelog

accepted_service_providers

  • Property added

capabilities

connectors

images

parking

  • Property added

parking_restrictions

Facility
  • format changed from enum to open-enum

Location
Property Changelog

energy_mix

evses

  • EVSE type modified

facilities

help_phone

  • Property added

images

operator

owner

parking_places

  • Property added

parking_type

publish_allowed_to

suboperator

LocationPatch
Property Changelog

energy_mix

evses

  • EVSE type modified

facilities

help_phone

  • Property added

images

operator

owner

parking_places

  • Property added

parking_type

publish_allowed_to

suboperator

ParkingRestriction
  • format changed from enum to open-enum

Value Changelog

EMPLOYEES

  • Enum value added

TAXIS

  • Enum value added

TENANTS

  • Enum value added

ParkingType
  • format changed from enum to open-enum

PublishTokenType
Property Changelog

type

Sessions Module

Sender Interface

Endpoint Impact Changelog

GET /sessions

HIGH

  • Response Property Type Changed

  • Response Required Property Removed

MEDIUM

LOW

  • Response Optional Property Added

  • Response Required Property Added

Receiver Interface

Endpoint Impact Changelog

GET /sessions/{country_code}/{party_id}/{session_id}

HIGH

  • Response Property Type Changed

  • Response Required Property Removed

MEDIUM

LOW

  • Response Optional Property Added

  • Response Required Property Added

PATCH /sessions/{country_code}/{party_id}/{session_id}

HIGH

MEDIUM

LOW

PUT /sessions/{country_code}/{party_id}/{session_id}

HIGH

  • New Required Request Property

  • Request Property Type Changed

MEDIUM

  • Request Property Removed

LOW

Object Types

Modified Object Types
Session
Property Changelog

cdr_token

charging_periods

total_cost

SessionPatch
Property Changelog

cdr_token

charging_periods

total_cost

Tariffs Module

Sender Interface

Endpoint Impact Changelog

GET /tariffs

HIGH

MEDIUM

LOW

Receiver Interface

Endpoint Impact Changelog

GET /tariffs/{country_code}/{party_id}/{tariff_id}

HIGH

MEDIUM

LOW

PUT /tariffs/{country_code}/{party_id}/{tariff_id}

HIGH

MEDIUM

LOW

Object Types

Added Object Types
  • BookingRestrictionType

  • PriceLimit

  • TaxIncluded

Modified Object Types
Tariff
Property Changelog

elements

energy_mix

max_price

min_price

preauthorize_amount

  • Property added

tax_included

  • Property added

  • Property became required

TariffElement
Property Changelog

restrictions

TariffRestrictions
Property Changelog

booking

  • Property added

Tokens Module

Sender Interface

Endpoint Impact Changelog

GET /tokens

HIGH

  • Response Property Type Changed

MEDIUM

  • Response Property Enum Value Added

POST /tokens/{token_uid}/authorize

HIGH

  • Request Parameter Type Changed

    • query: type

  • Response Property Type Changed

MEDIUM

LOW

  • Request Parameter Enum Value Added

    • query: type

Receiver Interface

Endpoint Impact Changelog

GET /tokens/{country_code}/{party_id}/{token_uid}

HIGH

  • Request Parameter Type Changed

    • query: type

  • Response Property Type Changed

MEDIUM

  • Response Property Enum Value Added

LOW

  • Request Parameter Enum Value Added

    • query: type

PATCH /tokens/{country_code}/{party_id}/{token_uid}

HIGH

  • Request Parameter Type Changed

    • query: type

  • Request Property Type Changed

LOW

  • Request Parameter Enum Value Added

    • query: type

  • Request Property Enum Value Added

PUT /tokens/{country_code}/{party_id}/{token_uid}

HIGH

  • Request Parameter Type Changed

    • query: type

  • Request Property Type Changed

LOW

  • Request Parameter Enum Value Added

    • query: type

  • Request Property Enum Value Added

Object Types

Modified Object Types
AuthorizationInfo
Property Changelog

token

Token
Property Changelog

type

TokenPatch
Property Changelog

type

TokenType
  • format changed from enum to open-enum

Value Changelog

EMAID

  • Enum value added

Versions Module

Interface

Endpoint Impact Changelog

GET /version

HIGH

MEDIUM

GET /versions

HIGH

  • Response Property Type Changed

MEDIUM

  • Response Property Enum Value Added

Object Types

Modified Object Types
Endpoint
Property Changelog

identifier

ModuleID
  • format changed from enum to open-enum

Value Changelog

bookings

  • Enum value added

payments

  • Enum value added

Version
Property Changelog

version

VersionDetails
Property Changelog

endpoints

version

VersionNumber
  • format changed from enum to open-enum

Value Changelog

2.3.0

  • Enum value added

Types

Object Types

Added Object Types
  • TaxAmount

Modified Object Types
BusinessDetails
Property Changelog

logo

Image
Property Changelog

category

ImageCategory
  • format changed from enum to open-enum

Price
Property Changelog

before_taxes

  • Property added

  • Property became required

excl_vat

  • Property became optional

  • Property deleted

incl_vat

  • Property deleted

taxes

  • Property added