{"id":30755101,"url":"https://github.com/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server","last_synced_at":"2025-09-04T10:04:12.679Z","repository":{"id":180536916,"uuid":"663033992","full_name":"extrawest/Extrawest-OCPI-2.2.1-EMSP-Server","owner":"extrawest","description":"Library allows to implement eMSP's application following OCPI-2.2.1 Specification by reusing pre-created models, controllers etc.","archived":false,"fork":false,"pushed_at":"2024-02-29T21:54:51.000Z","size":233,"stargazers_count":6,"open_issues_count":0,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T04:41:33.629Z","etag":null,"topics":["emsp","ocpi"],"latest_commit_sha":null,"homepage":"https://www.extrawest.com/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/extrawest.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-07-06T12:11:58.000Z","updated_at":"2025-03-21T11:41:30.000Z","dependencies_parsed_at":"2023-11-22T14:27:59.406Z","dependency_job_id":"7e0c96f6-a8d2-47cc-a535-0a8f169471ac","html_url":"https://github.com/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server","commit_stats":null,"previous_names":["extrawest/extrawest-ocpi-2.2.1-emsp-server"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/extrawest","download_url":"https://codeload.github.com/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273588913,"owners_count":25132857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emsp","ocpi"],"created_at":"2025-09-04T10:01:28.714Z","updated_at":"2025-09-04T10:04:12.670Z","avatar_url":"https://github.com/extrawest.png","language":"Java","funding_links":[],"categories":["Tools and Resources"],"sub_categories":["OCPI"],"readme":"\u003ca href=\"https://www.extrawest.com/\"\u003e\u003cimg src=\"https://drive.google.com/uc?export=view\u0026id=1kXfNj5WfW2oSMzQR82xYBI6Bw_W8-LpK\" width=\"20%\"\u003e\u003c/a\u003e\n# Extrawest-OCPI-2.2.1-EMSP-Server\n\n## Badges\n\n![build](https://img.shields.io/github/actions/workflow/status/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server/docker-image.yml?style=for-the-badge)\n![release](https://img.shields.io/github/v/release/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server?style=for-the-badge)\n[![Java CI with Maven](https://github.com/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server/actions/workflows/release-publish.yml/badge.svg)](https://github.com/extrawest/Extrawest-OCPI-2.2.1/actions/workflows/snapshot-publish.yml)\n![contr](https://img.shields.io/github/contributors/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server?style=for-the-badge)\n![commits](https://img.shields.io/github/commit-activity/m/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server?style=for-the-badge)\n![lastcommit](https://img.shields.io/github/last-commit/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server?style=for-the-badge)\n![OCPI](https://img.shields.io/badge/OCPI-2.2.1-yellowgreen?style=for-the-badge)\n![JDK](https://img.shields.io/badge/JDK-17-yellow?style=for-the-badge)\n![social](https://img.shields.io/github/forks/extrawest/Extrawest-OCPI-2.2.1-EMSP-Server?style=for-the-badge)\n\n## Table of Contents\n\n- [Field of use](#field-of-use)\n- [How is OCPI being used?](#how-is-ocpi-being-used)\n- [Description](#description)\n- [Maven](#maven)\n- [Dependencies](#dependencies)\n- [Requirements](#requirements)\n- [Changelog](#changelog)\n- [Getting Started](#getting-started)\n\n## Field of use\nOpen Charge Point Interface (OCPI) is an open protocol used for connections between charging station operators and service providers. Simply put, this protocol facilitates automated roaming for EV drivers between different EV charging networks. This interface supports the affordability and accessibility of charging infrastructure for EV owners, allowing drivers to charge across different networks. The protocol provides accurate data on charging stations, such as location, accessibility and pricing, and takes into account real-time billing and mobile access to charging stations.\nThe OCPI protocol is managed and maintained by the EVRoaming Foundation, making it freely available to software vendors.\n\n## How is OCPI being used?\nOCPI consists of several modules. The role of a company in the EV landscape determines which modules of OCPI you need and how you use it.\n\n\nDescription\n=============\n\nA CPO library of Open Charge-Point Interface. This library is designed to make life easier for those who want to\nimplement a CPO application.\n\nWith this library, you can easily get started with the Open Charge-Point Interface.\n\nPlease note, this is a library and not an application, so there is no main method.\n\nCurrently we support 2.2.1 OCPI version.\n\nAt 2.2.1 you can choose what kind of events will be supported by CPO or EMSP.\n\n#### Related projects:\n\n1. [BDD tests for eMSP](https://github.com/extrawest/bdd_ocpi_2.2.1_emsp)\n2. [OCPI 2.2.1 CPO Library](https://github.com/extrawest/Extrawest-OCPI-2.2.1-CPO-Server)\n3. [eMSP Client](https://github.com/extrawest/Extrawest-OCPI-2.2.1-EMSP-Client)\n4. [CPO Client](https://github.com/extrawest/Extrawest-OCPI-2.2.1-CPO-Client)\n\nMaven\n=====\n\nFind the maven repo here: https://mvnrepository.com/artifact/com.extrawest/Extrawest-OCPI-2.2.1-EMSP-Server)\n\nDependencies\n============\n\nJava-OCA-OCPP uses the following libraries:\n\n* [springdoc](https://springdoc.org)\n* [mapstruct](https://mapstruct.org)\n* [lombok](https://projectlombok.org)\n* [spock-core-0.7-groovy-2.0](http://spockframework.org)\n* [javax.validation](https://mvnrepository.com/artifact/javax)\n* [javax.servlet-api](https://mvnrepository.com/artifact/javax)\n* [javax.annotation-api](https://mvnrepository.com/artifact/javax)\n* [springdoc-openapi-starter-webmvc-ui](https://springdoc.org/)\n* [springdoc-openapi-ui](https://springdoc.org/)\n* [swagger-annotations](https://swagger.io/)\n* [jackson-databind-nullable](https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind)\n\n## Requirements\n- Java 17 or higher\n- Maven 3.6 or higher\n\n## Installation\n\nTo install the API client library to your local Maven repository, simply execute:\n\n```shell\nmvn clean install\n```\n\n### Maven users\n\nAdd this dependency to your project's POM:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.extrawest\u003c/groupId\u003e\n    \u003cartifactId\u003eExtrawest-OCPI-2.2.1-EMSP-Server\u003c/artifactId\u003e\n\u003c/dependency\u003e\n```\n\n## Getting Started\nExtrawest-OCPI-2.2.1-CPO-Server contains CPO Models, Validations, Controllers, Interfaces. To implement CPO Server developers need to write own implementations for CPO Services, e.g. :\n\n```java\n\n@Service\npublic interface EMSPTariffServiceImpl implements EMSPTariffService {\n    TariffDto getTariff(String countryCode, String partyId, String tariffId) {\n        //custom implementation here\n    }\n\n    TariffDto saveTariff(TariffDto tariffDTO, String countryCode, String partyId, String tariffId) {\n        //custom implementation here\n    }\n\n    void deleteTariff(String countryCode, String partyId, String tariffId) {\n        //custom implementation here\n    }\n}\n```\n\n## Changelog\n\nCurrent library provides APIs for OCPI 2.2.1. To see changes between OCPI 2.2.1 and previous versions please\ncheck [OCPI changelog](https://github.com/ocpi/ocpi/blob/2.2.1/changelog.asciidoc#changelog_changelog)\nfor OCPI 2.1.1 to OCPI 2.2 -\u003e OCPI 2.2.1\n\n### Changes between v2023.11.21 and v2023.7.12\n\nLots of typos fixed and textual improvements. The following changes to messages/objects etc.\n\n| Context (Module / Object) | Description                                                                                                                                                                                                                                               |\n|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Status Codes              | Added [OCPI Status Codes](https://github.com/ocpi/ocpi/blob/master/status_codes.asciidoc). Added exceptions handlers and exceptions to handle common errors (see [Errors](https://github.com/ocpi/ocpi/blob/master/transport_and_format.asciidoc#errors)) |\n| All modules               | Added parameter's validation. Wrapped response into [Response format](https://github.com/ocpi/ocpi/blob/master/transport_and_format.asciidoc#117-response-format)|\n| Locations                 | Blocking client access to objects that do not belong to them ( see [Errors](https://github.com/ocpi/ocpi/blob/master/transport_and_format.asciidoc#errors)).|\n| Locations                 | Added Location's endpoints permissions per roles: CPO as Sender, eMSP - Receiver, HUB - Sender \u0026 Receiver, NSP - Receiver, NAP -  Sender \u0026 Receiver                                                                                                       |\n| Locations                 | Added ability to add/modify Evse and Connector                                                                                                                                                                                                            |                                                                                                                                                                                                                                                       |\n| Sessions                  | Blocking client access to objects that do not belong to them ( see [Errors](https://github.com/ocpi/ocpi/blob/master/transport_and_format.asciidoc#errors))                                                                                               |\n| Sessions                  | Added Sessions permissions per roles: CPO as Sender, eMSP - Receiver, HUB - Sender \u0026 Receiver, SCSP - Receiver                                                                                                                                            |                                                                                                                                                                                      |                                                                                                                                                                                                                                                  |\n| CDRs                      | Added CDR's permissions per roles: CPO as Sender, eMSP - Receiver, HUB - Sender \u0026 Receiver                                                                                                                                                                |\n| Tariffs                   | Blocking client access to objects that do not belong to them ( see [Errors](https://github.com/ocpi/ocpi/blob/master/transport_and_format.asciidoc#errors))                                                                                               |\n| Tariffs                   | Added Tariffs permissions per roles: CPO - Sender, eMSP - Receiver, Hub - Sender and Receiver, NSP - Receiver, SCSP - Sender and Receiver|                            \n| Tokens                    | Added [Paginated](https://github.com/ocpi/ocpi/blob/480973547169dee2fe6d12b1a0fe604623efcbb5/transport_and_format.asciidoc#paginated-response) response to getting the list of known Tokens  |\n| Tokens                    | Added Tokens module's permissions per roles: CPO as Receiver, eMSP - Sender, HUB - Sender \u0026 Receiver                                                                                                                                                      |                                                                                                                                                                                      |                                                                                                                                                                                                                                                  |\n| Commands                  | Added Commands module's permissions per roles: CPO as Receiver, eMSP - Sender, HUB - Sender \u0026 Receiver                                                                                                                                                    |\n| Charging Profiles         | Added Charging Profiles module's permissions per roles: CPO as Receiver, HUB - Sender \u0026 Receiver, SCSP - Sender                                                                                                                                           |\n| Credentials               | Added permissions for main [OCPI roles](https://github.com/ocpi/ocpi/blob/master/terminology.asciidoc#typical-ocpi-implementations-per-role)                                                                                                              |\n|  Versions                 | Changed URLs according [Version information endpoint](https://github.com/ocpi/ocpi/blob/480973547169dee2fe6d12b1a0fe604623efcbb5/version_information_endpoint.asciidoc#11-version-information-endpoint)              |\n\n### Changes in v2023.7.12\n\nExtrawest-OCPI-2.2.1-EMSP-Server library (v2023.7.12) covers next modules.\n\nFunctional Modules:\n\n| Module                                                                                     | v2023.7.12 | Description                                                                                                                                                                                                                                                                                                                               |\n|--------------------------------------------------------------------------------------------|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [Locations](https://github.com/ocpi/ocpi/blob/2.2.1/mod_locations.asciidoc)                | +          | The Location objects live in the CPO back-end system. They describe the charging locations of an operator                                                                                                                                                                                                                                 |\n| [Sessions](https://github.com/ocpi/ocpi/blob/2.2.1/mod_sessions.asciidoc)                  | +          | The Session object describes one charging session. The Session object is owned by the CPO back-end system, and can be GET from the CPO system, or pushed by the CPO to another system                                                                                                                                                     |\n| [CDRs](https://github.com/ocpi/ocpi/blob/2.2.1/mod_cdrs.asciidoc)                          | +          | A Charge Detail Record is the description of a concluded charging session. The CDR is the only billing-relevant object. CDRs are sent from the CPO to the eMSP after the charging session has ended                                                                                                                                       |\n| [Tariffs](https://github.com/ocpi/ocpi/blob/2.2.1/mod_tariffs.asciidoc)                    | +          | The Tariffs module gives eMSPs information about the tariffs used by the CPO                                                                                                                                                                                                                                                              |\n| [Tokens](https://github.com/ocpi/ocpi/blob/2.2.1/mod_tokens.asciidoc)                      | +          | The tokens module gives CPOs knowledge of the token information of an eMSP. eMSPs can push Token information to CPOs, CPOs can build a cache of known Tokens. When a request to authorize comes from a Charge Point, the CPO can check against this cache. With this cached information they know to which eMSP they can later send a CDR |\n| [Commands](https://github.com/ocpi/ocpi/blob/2.2.1/mod_commands.asciidoc)                  | +          | The Commands module enables remote commands to be sent to a Location/EVSE. The following commands are supported: CANCEL_RESERVATION, RESERVE_NOW, START_SESSION , STOP_SESSION, UNLOCK_CONNECTOR                                                                                                                                          |\n| [Charging Profiles](https://github.com/ocpi/ocpi/blob/2.2.1/mod_charging_profiles.asciidoc) | +          | With the ChargingProfiles module, parties (SCSP but also MSPs) can send (Smart) Charging Profiles to a Location/EVSE. It is also possible to request the 'ActiveChargingProfile' from a Location/EVSE                                                                                                                                     |\n| [Hub Client Info](https://github.com/ocpi/ocpi/blob/2.2.1/mod_hub_client_info.asciidoc)    | +          | Provides parties connected to a hub with the connection status of other parties that are connected to a hub that they can communicate with. So, CPOs know which eMSP and other parties are online and vice versa                                                                                                                          |\n\nConfiguration Modules:\n\n| Module                                                                                     | v2023.7.12 | Description                                                                                                                          |\n|--------------------------------------------------------------------------------------------|-----------|--------------------------------------------------------------------------------------------------------------------------------------|\n| [Credentials](https://github.com/ocpi/ocpi/blob/2.2.1/credentials.asciidoc)                | +         | The credentials module is used to exchange the credentials token that has to be used by parties for authorization of requests        |\n|  [Versions](https://github.com/ocpi/ocpi/blob/2.2.1/version_information_endpoint.asciidoc) | +         |  Via this module, clients can learn which versions of OCPI a server supports, and which modules it supports for each of the versions  |\n\nRoadmap:\n\nFunctionality | 2023                      |                                                                                                                     \n------------ |------------------------------|\n[Authentification](https://github.com/ocpi/ocpi/blob/2.2.1/credentials.asciidoc)|\n[Authorization](https://github.com/ocpi/ocpi/blob/master/transport_and_format.asciidoc#transport_and_format_authorization_header) |\n\nLicense\n=======\n\n[MIT License](LICENSE)\n\nAbout Extrawest.com\n=======\n\nWe are devoted to push the marked for vehicles charging forward.\nThere are many standards out there, we intend to implement and share them. Any help is much appreciated!\n\nThe market is in its defining state, the practices and standards we come up with now, may very well stick around for decades to come.\n\nSee our vision at https://www.extrawest.com/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fextrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextrawest%2FExtrawest-OCPI-2.2.1-EMSP-Server/lists"}