# ChargerDojo > ChargerDojo is the OCPI testing tool for CPOs, eMSPs, payment terminal providers and hubs, on OCPI 2.1.1, 2.2.1 and 2.3.0 (including Bookings and Direct Payment). It runs strict conformance suites against your endpoint and timed charging journeys from a partner that misbehaves on purpose, and every conformance check runs against peers broken on purpose, so a check that cannot fail fails the build. Sandbox endpoints, a simulator and a Learning Hub are free with no login. Every public page is server-rendered; no JavaScript is needed to read it. Prefer the canonical public routes listed below (not internal `/app/*` routes) when assembling context for assistants or agents. Focus first on tool pages for execution workflows, then use the Learn pages to clarify OCPI concepts, message sequencing, and common pitfalls. For richer, task-oriented guidance, see [llms-full.txt](https://chargerdojo.com/llms-full.txt). ## Agent Access (MCP) ChargerDojo runs a hosted Model Context Protocol server at https://mcp.chargerdojo.com, over Streamable HTTP. Unauthenticated, it answers questions about the OCPI protocol: which versions exist, how each one encodes the credentials token and splits endpoints into sender and receiver interfaces, what changed between two versions, and which modules, suites and charging journeys ChargerDojo can test. Answers come from the same registry the simulator obeys, so they match what the site itself does. Send an `Authorization: Bearer cdojo_…` API key and the same server reads the account behind it: registered endpoints, run history, verdicts, journey events, plan usage, and it can start a charging journey against a sandbox endpoint. Call `tools/list` for the current tools and their input schemas. This file does not list them, because a copy here would drift from the server. Connect instructions per client: https://docs.chargerdojo.com/guide/connect-a-coding-agent ## OCPI and ChargerDojo Facts Statements below are generated from the registries ChargerDojo itself obeys, so they describe what the product does today rather than what a page once said. Each one is self-contained and safe to quote on its own. ### OCPI versions - ChargerDojo runs OCPI conformance tests against three selectable protocol versions: 2.1.1, 2.2.1 and 2.3.0. - OCPI 2.1.1 sends the credentials token as a raw string in the Authorization header and advertises one endpoint per module, with no SENDER or RECEIVER split. - OCPI 2.2 sends the credentials token base64-encoded in the Authorization header and splits each module into a SENDER interface and a RECEIVER interface. - OCPI 2.2.1 sends the credentials token base64-encoded in the Authorization header and splits each module into a SENDER interface and a RECEIVER interface. - OCPI 2.3.0 sends the credentials token base64-encoded in the Authorization header and splits each module into a SENDER interface and a RECEIVER interface. - ChargerDojo implements OCPI 2.2 but does not offer it as a test target. - ChargerDojo retains OCPI 2.2 for source comparison content, alongside the selectable lesson and test versions OCPI 2.1.1, 2.2.1 and 2.3.0. ### Modules per version - The ChargerDojo OCPI 2.1.1 surface covers 7 modules: cdrs, commands, credentials, locations, sessions, tariffs and tokens. - The ChargerDojo OCPI 2.2 surface covers 9 modules: cdrs, chargingprofiles, commands, credentials, hubclientinfo, locations, sessions, tariffs and tokens. - The ChargerDojo OCPI 2.2.1 surface covers 10 modules: cdrs, chargingprofiles, commands, credentials, hubclientinfo, locations, payments, sessions, tariffs and tokens. - The ChargerDojo OCPI 2.3.0 surface covers 11 modules: booking, cdrs, chargingprofiles, commands, credentials, hubclientinfo, locations, payments, sessions, tariffs and tokens. - The Bookings module of OCPI 2.3.0 and the Direct Payment module of OCPI 2.2.1 are published as standalone EVRoaming Foundation documents rather than inside the core specification, which makes them official OCPI modules that live outside the core chapter list. ### Conformance checks - ChargerDojo runs 53 conformance checks against an OCPI 2.1.1 endpoint. - ChargerDojo runs 159 conformance checks against an OCPI 2.2.1 endpoint. - ChargerDojo runs 171 conformance checks against an OCPI 2.3.0 endpoint. - A ChargerDojo conformance check asserts one rule of the OCPI specification and names the rule it encodes, and where its clause has been read back against the specification text it also quotes that clause. - Scenario walkthroughs are excluded from every ChargerDojo conformance-check count, because a scenario walks a flow from end to end rather than asserting a single clause. - ChargerDojo is not an accreditation body, and a green ChargerDojo run is not an OCPI certification: formal OCPI certification is an EVRoaming Foundation process. ### Why a ChargerDojo verdict can be trusted - ChargerDojo ships four mutant peers, one for each of OCPI 2.1.1, 2.2, 2.2.1 and 2.3.0, and a sweep in which any check a mutation named stays green fails the build. - The ChargerDojo mutant peers carry 254 conformance mutations between them, and each mutation names in advance the checks that must turn red before the build will pass. - A further 64 scenario mutations prove the ChargerDojo charging-journey verdicts the same way, and each of those must redden the check it named in advance. - Every conformance check ChargerDojo runs is either named in advance by a mutation that then reddens it, or listed with a written reason, and the build fails if a check is neither, if a listed reason is blank, or if a mutation starts naming a listed check. - A ChargerDojo mutant peer is a copy of the sandbox with one rule OCPI requires deliberately broken, so a check that stays green against its own mutant is a check that has never been proven capable of failing. - Every ChargerDojo mutation names in advance the check ids that must turn red, and a sweep in which one of them stays green on a graded response fails the build. - Every ChargerDojo conformance check must be reddened by some mutant, and by one that did not redden every check, so a check proven only by a sledgehammer still counts as unproven. ### How a conformance check is graded - A ChargerDojo conformance run sorts every check into exactly one of four outcomes: passed, failed, unobservable, or not applicable. - A ChargerDojo warning is an overlay on the outcome, so warnings are counted separately from passed, failed, unobservable and not-applicable checks. - A passed ChargerDojo check satisfied the requirements inspected by that check. A passed check does not certify the whole endpoint. - A failed ChargerDojo conformance check makes the run not compliant, even when other checks passed. - A ChargerDojo conformance warning records a declined recommendation, either an OCPI SHOULD or one of ChargerDojo's own, and does not itself fail a check. A separate required-rule failure still fails that check. - An unobservable ChargerDojo check graded nothing, either because the response carried nothing to grade or because no request was sent after the partner advertised no such module or interface. - An unobservable ChargerDojo check is never counted as a pass, because counting one as a pass would certify an endpoint that was never examined. ### The OCPI status-code rule - OCPI carries a semantic failure in the response body's status_code field on an HTTP 200 response, and OCPI 2.2, 2.2.1 and 2.3.0 state that an HTTP error status code MUST NOT be returned to a syntactically valid, authenticated request that addresses an existing resource. - OCPI 2.1.1 draws that same boundary as a should rather than a must, so a 2.1.1 partner answering an HTTP error where 2.2.1 forbids one has broken no 2.1.1 clause. - An OCPI server may still answer HTTP 401 for a missing or unknown token, HTTP 404 for a resource that does not exist, and HTTP 405 for a method the module declares not applicable. ### Plans and prices - The ChargerDojo Sandbox plan costs $0, so it is free to use with no login. - The ChargerDojo Integrate plan costs $149 a month, or $1,490 a year. - The ChargerDojo Automate plan costs $499 a month, or $4,990 a year. - The ChargerDojo Certified plan is priced on a quote. - The ChargerDojo Integrate plan includes 3 partner endpoints and the Automate plan includes 20, shared by everyone in the organisation, and the Certified plan sets partner endpoints in its quote. - Running the Direct Payment and Bookings suites against your own endpoint needs the ChargerDojo Automate plan, and against ChargerDojo sandbox endpoints they are free. - Grading a charging journey against Gireve or Plugsurfing Roam behaviour on your own endpoint needs the ChargerDojo Automate plan. - Running the ChargerDojo simulator, the Learning Hub and conformance suites against ChargerDojo sandbox endpoints is free, with no login. - Testing your own OCPI endpoint and CI automation belong to the paid ChargerDojo plans. ### The charging journey catalogue - The ChargerDojo journey manifest defines 19 charging journey templates, one of which is the custom template a hand-authored journey declares. - ChargerDojo groups its charging journeys into 13 packs, one per part of OCPI a journey exercises. - A ChargerDojo charging journey can inject any of 22 disturbances, which are deliberate faults such as a duplicated CDR, a session that never closes, or a transport outage. - A ChargerDojo charging journey is a timed, end-to-end charging story run against a real OCPI endpoint, graded on conformance, partner compatibility, business checks and observations. ## Core Product Pages - [Home](https://chargerdojo.com/): Product overview, role fit, and entry points. - [Example OCPI report](https://chargerdojo.com/sample-report/): A durable, sanitized report from ChargerDojo's owned reference-hub fixture, with its actual capture date, scope, saved exchanges and cited rules. - [OCPI Interoperability Tester](https://chargerdojo.com/ev-roaming-tester/): End-to-end roaming interoperability workflows between a CPO and an eMSP. - [EV Charging Simulator](https://chargerdojo.com/ev-charging-simulator/): Visual message-flow and charging-lifecycle simulation. - [OCPI Testing Tool](https://chargerdojo.com/ocpi-testing-tool/): Structured OCPI protocol testing and validation against a real endpoint. - [Payload Workbench](https://chargerdojo.com/ocpi-testing-tool/payload-workbench/): Edit and compare OCPI payloads in your browser, with limited field checks for 2.2.1. Nothing you paste leaves this page. - [OCPP Testing Tool for CSMS and Chargers](https://chargerdojo.com/ocpp-testing/): OCPP 1.6J and 2.0.1 compliance testing for CSMS vendors, charger makers and CPOs, launching soon. A charge point simulator misbehaves on purpose and grades every message against the OCPP specification. Join the early-access list on the page. - [Plans and Pricing](https://chargerdojo.com/pricing/): What each plan costs, what it unlocks, and where the free sandbox stops. - [Charging Journeys](https://chargerdojo.com/ocpi-charging-journeys/): Timed, end-to-end OCPI charging stories against a real endpoint, with disturbances and four graded verdict lanes (conformance, partner compatibility, business checks, observations). ## Hub Integration Preparation - [OCPI Hub Integration Testing Preparation](https://chargerdojo.com/integrations/): Find roaming issues while your team can still fix them. Test the OCPI endpoint, inspect the evidence and take a clear report into onboarding. - [Gireve OCPI Testing and Onboarding Preparation](https://chargerdojo.com/integrations/gireve-ocpi-testing/): Find protocol mistakes in your own environment before partner testing starts. Run OCPI suites and charging journeys, then take the evidence into Gireve onboarding. - [Hubject OCPI Testing Preparation](https://chargerdojo.com/integrations/hubject-ocpi-testing/): Build confidence in the OCPI side before onboarding. Test your own endpoint and bring a report that shows the exchange behind each result. ## Learn OCPI - [Learning Hub](https://chargerdojo.com/learn/): Learning path overview and related modules. - [OCPI Explained](https://chargerdojo.com/learn/ocpi-explained/): OCPI fundamentals, roles, and protocol model. - [Key Terminologies](https://chargerdojo.com/learn/key-terminologies/): Practical glossary for implementation and support. - [OCPI Charging Session Lifecycle](https://chargerdojo.com/learn/charging-session/): Step-by-step session phases from authorization to CDR. - [Knowledge Quiz](https://chargerdojo.com/learn/quiz/): Assessment-oriented checkpoint for team alignment. - [Version Differences](https://chargerdojo.com/learn/versions/): What changed across OCPI 2.1.1, 2.2.1, and 2.3.0: new modules, SENDER/RECEIVER roles, token encoding, and field additions. ## Guided Scenarios Step-by-step OCPI workflow walkthroughs with message-level sequencing, the best pages for "how does X work in OCPI" and "why did this go wrong" questions. - [Scenarios Overview](https://chargerdojo.com/learn/scenarios/): All guided scenarios with difficulty and scope. - [Complete EV charging session](https://chargerdojo.com/learn/scenarios/charging-session/): Follow an authored charging session from the driver arriving at the charger through energy delivery and billing between participating roaming platforms. - [One card, two countries](https://chargerdojo.com/learn/scenarios/cross-border-charge/): A driver with a German contract charges at a Dutch operator's charger. - [Remote start and stop](https://chargerdojo.com/learn/scenarios/remote-start-stop/): An eMSP remotely starts and stops an authored charging session on behalf of a driver, using OCPI's asynchronous command exchange. - [Roaming connection setup](https://chargerdojo.com/learn/scenarios/roaming-registration/): How a CPO and eMSP discover each other, exchange credentials, and synchronize locations and tokens to enable roaming. - [Charged twice for one charge](https://chargerdojo.com/learn/scenarios/charged-twice/): In this authored billing example, a dropped connection leads to a fresh CDR ID and two customer charges. - [Tariff and billing](https://chargerdojo.com/learn/scenarios/tariff-billing/): How pricing flows from tariff publication through to the final invoice. - [The authorization that says no](https://chargerdojo.com/learn/scenarios/token-not-allowed/): A driver taps an expired card and the charge is refused. - [The bill was higher than the price I saw](https://chargerdojo.com/learn/scenarios/bill-higher-than-shown/): A driver sees a daytime energy rate before a time-of-day tariff changes. - [The Session that never closes](https://chargerdojo.com/learn/scenarios/session-never-closes/): A charge starts and meters normally, then the eMSP does not receive its closing update. ## OCPI Module Reference (Explorer) Interactive per-module reference covering endpoints, payloads, and behaviours, grounded in the published specification text for each version. - [Explorer Overview](https://chargerdojo.com/learn/explorer/): All OCPI modules at a glance, with the version each was introduced in. - [Sessions](https://chargerdojo.com/learn/explorer/sessions/): Charging session lifecycle management. - [CDRs](https://chargerdojo.com/learn/explorer/cdrs/): Charge detail records for billing. - [Locations](https://chargerdojo.com/learn/explorer/locations/): Charging station locations and EVSEs. - [Tariffs](https://chargerdojo.com/learn/explorer/tariffs/): Pricing structures for charging. - [Tokens](https://chargerdojo.com/learn/explorer/tokens/): Driver identification and authorization. - [Commands](https://chargerdojo.com/learn/explorer/commands/): Remote start, stop, and reserve. - [Credentials](https://chargerdojo.com/learn/explorer/credentials/): Platform registration and authentication. - [Versions](https://chargerdojo.com/learn/explorer/versions/): Version discovery and module endpoint listing. - [Hub Client Info](https://chargerdojo.com/learn/explorer/hubclientinfo/): Which parties on a hub are online. - [Charging Profiles](https://chargerdojo.com/learn/explorer/chargingprofiles/): Smart charging limits over time. - [Payments](https://chargerdojo.com/learn/explorer/payments/): Pay at the charger with a bank card. - [Bookings](https://chargerdojo.com/learn/explorer/booking/): Reserve a charge point ahead of time. ## Lesson and scenario steps Each step of a lesson or scenario at its own address, opening with its direct answer and, where it makes a protocol claim, the verbatim clause it cites. - [What is OCPI?](https://chargerdojo.com/learn/ocpi-explained/introduction/): OCPI connects charging platforms. Start here to see which platforms use it and how it supports EV roaming between their networks. - [Why OCPI matters](https://chargerdojo.com/learn/ocpi-explained/purpose/): Why charging networks connect through OCPI: roaming between CPO and eMSP platforms and the information those platforms exchange. - [Key players in OCPI](https://chargerdojo.com/learn/ocpi-explained/key-entities/): The parties in an OCPI exchange: the Charge Point Operator, the eMobility Service Provider and the roaming hub between them. - [How OCPI works](https://chargerdojo.com/learn/ocpi-explained/how-it-works/): How two OCPI platforms register, discover each other's module endpoints and then exchange locations, tokens, Sessions and CDRs. - [OCPI roles knowledge check](https://chargerdojo.com/learn/ocpi-explained/knowledge-check/): A short check on OCPI roles and roaming before you move on to the glossary and the charging Session lesson. - [Where to go after the OCPI primer](https://chargerdojo.com/learn/ocpi-explained/summary/): Try the charging-session lab to follow an exchange, or open the glossary when you need a term. - [Meet the two parties](https://chargerdojo.com/learn/charging-session/meeting-the-players/): OCPI connects two platforms: the CPO operates a network of Charge Points, and the eMSP gives EV drivers access to charging services. - [Starting a charging session](https://chargerdojo.com/learn/charging-session/starting-a-session/): The CPO authorizes the driver's token, in real time with the eMSP or from its own copy of the eMSP's tokens, then pushes the new Session to the eMSP. - [Real-time updates during charging](https://chargerdojo.com/learn/charging-session/real-time-updates/): How the CPO keeps the eMSP informed about a Session while energy flows to the vehicle. - [Send a Session update](https://chargerdojo.com/learn/charging-session/2.1.1/session-update/): In OCPI 2.1.1 the CPO sends every change to a Session it already pushed by calling PATCH on the eMSP's Sessions endpoint. - [Send a Session update](https://chargerdojo.com/learn/charging-session/2.2.1/session-update/): In OCPI 2.2.1 and 2.3.0 the CPO sends every change to a Session it already pushed by calling PATCH on the eMSP's Sessions endpoint. - [Finishing the charging session](https://chargerdojo.com/learn/charging-session/finishing-a-session/): Stopping the charge, completing the Session and sending the charge detail record the eMSP bills from. - [Order the charging session messages](https://chargerdojo.com/learn/charging-session/building-your-first-flow/): The OCPI messages of one charging session, in the order the CPO sends them to the eMSP. - [Authorize the driver](https://chargerdojo.com/learn/charging-session/authorization/): The charging simulation starts by asking the eMSP whether the driver's token may charge here. - [Start the Session](https://chargerdojo.com/learn/charging-session/start-session/): In the simulation the driver plugs in and the CPO creates the Session it pushes to the eMSP. - [Charge and update the Session](https://chargerdojo.com/learn/charging-session/charging/): In the simulation energy flows and the CPO sends Session updates with the latest meter values. - [Stop the Session](https://chargerdojo.com/learn/charging-session/stop-session/): In the simulation the driver stops charging and the CPO sends the final Session update. - [Send the CDR](https://chargerdojo.com/learn/charging-session/billing-cdr/): In the simulation the CPO creates the charge detail record and sends it to the eMSP for billing. - [Driver taps an RFID card on the charger](https://chargerdojo.com/learn/scenarios/charging-session/driver-arrives/): The driver arrives at the charging station and taps their RFID card on the charger to identify themselves. - [Charger asks the CPO about the token](https://chargerdojo.com/learn/scenarios/charging-session/charger-auth-request/): The charger doesn't recognize the token locally. It forwards the authorization request to the CPO's backend system to check if this driver can charge. - [CPO asks the eMSP to authorize the token](https://chargerdojo.com/learn/scenarios/charging-session/token-authorization/): The token belongs to a driver of the eMSP. Its whitelist value, ALLOWED_OFFLINE, means real-time authorization is used while the eMSP can be reached, so the… - [Authorization succeeds and charging begins](https://chargerdojo.com/learn/scenarios/charging-session/charger-unlocks/): Authorization succeeded. The CPO tells the charger to unlock the connector. The driver plugs in the cable and charging begins. - [CPO pushes the new Session to the eMSP](https://chargerdojo.com/learn/scenarios/charging-session/session-start/): The charger begins delivering energy. The CPO creates a session record and pushes it to the eMSP so the driver can see charging progress in their app. - [CPO sends Session updates with meter values](https://chargerdojo.com/learn/scenarios/charging-session/meter-values/): The charger reports new meter readings. The CPO updates the session with current energy delivered and sends the update to the eMSP. The CPO owns the Session. - [Driver unplugs and the final reading arrives](https://chargerdojo.com/learn/scenarios/charging-session/driver-unplugs/): The driver returns to their car and unplugs the cable. The charger detects the disconnection and reports the final meter reading to the CPO. - [CPO pushes the COMPLETED Session](https://chargerdojo.com/learn/scenarios/charging-session/session-stop/): The CPO marks the session as COMPLETED with the total energy delivered and final cost, then pushes the update to the eMSP. The CPO owns the Session. - [CPO sends the CDR for billing](https://chargerdojo.com/learn/scenarios/charging-session/cdr-creation/): The CPO creates the billing-relevant CDR after the charge and sends it to the eMSP. The excerpt shows cost and charging-period information. - [eMSP accepts the CDR and bills the driver](https://chargerdojo.com/learn/scenarios/charging-session/driver-billed/): The eMSP accepts the CDR, completes the billing cycle, and charges the driver. The driver receives a receipt in their app showing the session summary and… - [Start the complete EV charging session lab](https://chargerdojo.com/learn/scenarios/charging-session/tutorial-intro/): The charging-session lab: what you will set up in the simulator and which messages you will inspect. - [Set up the OCPI simulator](https://chargerdojo.com/learn/scenarios/charging-session/simulator-basics/): Set up the OCPI network simulator with a CPO, an eMSP and a charger before you run a charging session. - [Simulate a charging session](https://chargerdojo.com/learn/scenarios/charging-session/session-simulation/): Run one charging session in the simulator and watch each OCPI message travel between the parties. - [Explore the OCPI messages](https://chargerdojo.com/learn/scenarios/charging-session/message-exploration/): Inspect one OCPI request, its response and its outcome in the simulator message log. - [Finish the complete EV charging session lab](https://chargerdojo.com/learn/scenarios/charging-session/completion/): Review the charging-session lab and choose a scenario or lesson to try next. - [Version discovery agrees on an OCPI version](https://chargerdojo.com/learn/scenarios/roaming-registration/version-discovery/): The CPO created CREDENTIALS_TOKEN_A for the eMSP, which is the Sender in this registration. - [CPO and eMSP exchange credentials](https://chargerdojo.com/learn/scenarios/roaming-registration/credentials-exchange/): Still using token A, the eMSP POSTs CREDENTIALS_TOKEN_B to the credentials endpoint it found in the version details. - [CPO pushes its Locations to the eMSP](https://chargerdojo.com/learn/scenarios/roaming-registration/location-sync/): Now connected, the CPO pushes its charging locations to the eMSP. Each location includes EVSEs, connectors, and real-time availability so drivers can find… - [eMSP pushes its Tokens to the CPO](https://chargerdojo.com/learn/scenarios/roaming-registration/token-sync/): The eMSP pushes its driver tokens to the CPO. This allows the CPO to authorize drivers locally, even if the network connection to the eMSP is temporarily… - [eMSP sends a StartSession command](https://chargerdojo.com/learn/scenarios/remote-start-stop/start-command/): The driver taps Start in the eMSP app. The eMSP sends a START_SESSION command to the CPO with the driver's token, the location and EVSE, and a response_url… - [CPO posts the start command result](https://chargerdojo.com/learn/scenarios/remote-start-stop/command-response/): The charger has answered the CPO. The CPO posts a CommandResult to the response_url from the command. - [CPO pushes the remotely started Session](https://chargerdojo.com/learn/scenarios/remote-start-stop/session-created/): The charger is delivering energy. The CPO creates Session SESSION-R001 and pushes it to the eMSP with PUT. - [eMSP sends a StopSession command](https://chargerdojo.com/learn/scenarios/remote-start-stop/stop-command/): The driver taps Stop in the app. The eMSP sends a STOP_SESSION command naming the Session it received, SESSION-R001, and a new response_url. - [CPO posts the stop command result](https://chargerdojo.com/learn/scenarios/remote-start-stop/step-5-stop-callback/): The CPO posts a CommandResult to the stop command's response_url. Its ACCEPTED means the charger accepted the stop request. - [CPO completes the remotely stopped Session](https://chargerdojo.com/learn/scenarios/remote-start-stop/step-6-session-completed/): The CPO sends the final Session update with PATCH: status COMPLETED, the energy delivered and the end time. - [CPO publishes its Tariff to the eMSP](https://chargerdojo.com/learn/scenarios/tariff-billing/tariff-publication/): The CPO publishes its tariff structure to the eMSP. This tariff defines the price per kWh, any time-based fees, and optional parking charges. - [CPO updates the running Session cost](https://chargerdojo.com/learn/scenarios/tariff-billing/session-with-tariff/): The CPO updates the running Session cost. Charging periods reference the applicable tariff; restrictions can change which price elements apply during the… - [CPO sends a CDR with its cost breakdown](https://chargerdojo.com/learn/scenarios/tariff-billing/cdr-with-cost/): After the Session ends, the CPO sends the CDR. Its charging periods carry the energy and parking time, its tariffs list carries the Tariff as it stood at the… - [eMSP prepares the driver's invoice](https://chargerdojo.com/learn/scenarios/tariff-billing/invoice-generation/): In this authored example, the eMSP's billing system uses the captured CDR data to prepare the driver's invoice. - [CPO publishes a time-of-day Tariff](https://chargerdojo.com/learn/scenarios/bill-higher-than-shown/publish-tariff/): The CPO publishes its tariff to the eMSP. It has a time-of-day step: 0.35 per kWh before 17:00, and 0.55 per kWh after. Tariffs describe CPO prices. - [Driver sees the rate in force at 16:40](https://chargerdojo.com/learn/scenarios/bill-higher-than-shown/driver-sees-price/): At 16:40 the driver plugs in. Their app shows 0.35 per kWh, the rate that is in force right now. That is the number they will remember. - [CDR bills each period at its own rate](https://chargerdojo.com/learn/scenarios/bill-higher-than-shown/cdr-produced/): The driver charges from 16:40 to 17:30 local time. The Location's time_zone is Europe/Amsterdam, so the tariff's 17:00 is 16:00 UTC on this February day. - [Driver disputes the higher bill](https://chargerdojo.com/learn/scenarios/bill-higher-than-shown/driver-billed/): The eMSP charges the driver 17.90. The driver, who saw 0.35 per kWh, disputes the difference. - [CPO POSTs the CDR and the eMSP stores it](https://chargerdojo.com/learn/scenarios/charged-twice/cdr-sent/): A charge finishes. The CPO, NL-FPN, sends CDR CDR-NL-GCH-88401 for Session session-7710 to the eMSP, which stores it. - [A retry creates a second CDR ID](https://chargerdojo.com/learn/scenarios/charged-twice/retry-duplicates/): In this authored example the connection drops before the CPO sees the answer, and its billing system sends the same visit again under a new CDR id,… - [Driver arrives at a charger abroad](https://chargerdojo.com/learn/scenarios/cross-border-charge/arrive-abroad/): On a road trip from Berlin to Amsterdam, the driver stops at a charger operated by a Dutch network they have no account with, and holds up the card from… - [Dutch CPO asks the German eMSP to authorize](https://chargerdojo.com/learn/scenarios/cross-border-charge/real-time-authorize/): The token's whitelist value is NEVER, so the Dutch CPO asks the token's owner, the German eMSP, to authorize it in real time, naming the location. - [CPO pushes the Session to the home eMSP](https://chargerdojo.com/learn/scenarios/cross-border-charge/session-opens/): Power starts flowing. The Dutch CPO opens Session session-9920 under its own country and party, NL and FPN, and pushes it to the German eMSP. - [Home eMSP bills the CDR from abroad](https://chargerdojo.com/learn/scenarios/cross-border-charge/cdr-settles/): The driver unplugs and drives on. The CPO completes the Session and sends a CDR, again under NL and FPN, to the German eMSP, which bills the driver on the… - [CPO opens and pushes the Session](https://chargerdojo.com/learn/scenarios/session-never-closes/session-start/): The driver plugs in and charging begins. The CPO opens Session session-4471 and pushes it to the eMSP, so the driver's app can show charging. - [CPO sends a PATCH with the energy so far](https://chargerdojo.com/learn/scenarios/session-never-closes/metering/): As power flows, the CPO sends a PATCH with the energy delivered so far and a new last_updated. The eMSP's copy is ACTIVE at 18.4 kWh. - [Charger loses its connection at unplug](https://chargerdojo.com/learn/scenarios/session-never-closes/driver-unplugs/): The driver unplugs and drives away. At this instant the charger loses its backhaul connection, so the 'charge finished' event never reaches the CPO's… - [No closing Session update or CDR arrives](https://chargerdojo.com/learn/scenarios/session-never-closes/close-never-arrives/): The eMSP has received neither a closing Session update nor a CDR. Its stored Session is still ACTIVE at 18.4 kWh, the last state it observed, so the operator… - [Driver taps a card with a lapsed contract](https://chargerdojo.com/learn/scenarios/token-not-allowed/card-tap/): A driver holds their card to the charger to start charging. The card is real, but the contract behind it lapsed last month. - [CPO requests real-time authorization](https://chargerdojo.com/learn/scenarios/token-not-allowed/real-time-authorize/): The token's whitelist value is NEVER, so the CPO asks the eMSP to authorize it in real time, naming the location and EVSE the driver wants to use. - [Charger refuses to start charging](https://chargerdojo.com/learn/scenarios/token-not-allowed/charge-refused/): The CPO tells the charger the token may not charge. The charger shows 'Not authorized', delivers no energy, and no session is ever created. ## Optional - [Privacy Policy](https://chargerdojo.com/privacy-policy/): Data handling and rights information. - [Refund & Cancellation Policy](https://chargerdojo.com/refund-policy/): Billing, cancellation, and refund terms. - [Terms of Service](https://chargerdojo.com/terms-of-service/): Service terms, what a conformance result means, and acceptable use. ## API for Agents & CI - [Testing API guide](https://docs.chargerdojo.com/api): Run OCPI conformance suites programmatically: API-key auth, run start with long-poll, pass/fail exit contract, shareable report links, and a copy-paste CI recipe. ## Product Guide The full guide, organised around the job of getting a conformance run green. Every page is also served as markdown by appending `.md` to its URL. - [What this is, and what it will not do](https://docs.chargerdojo.com/guide/index): Scope and limits stated up front. Not certification; a declined SHOULD is never a failure. - [What you can do without paying](https://docs.chargerdojo.com/guide/what-is-free): Sandbox runs, the simulator and the MCP server are free at every tier. Where the paid line falls, and why the API key sits past it. - [Plans and pricing](https://docs.chargerdojo.com/guide/plans): What each plan costs and unlocks: the free sandbox, Integrate, Automate and Certified, with the capability behind every line. - [Quickstart](https://docs.chargerdojo.com/guide/quickstart): A green run against a sandbox endpoint from the command line. Needs an API key, which needs a paid plan; the run itself is free. - [Glossary](https://docs.chargerdojo.com/guide/glossary): Every OCPI and ChargerDojo term these guides use, in a sentence each: CPO, eMSP, CDR, Token A/B/C, sender and receiver, scenario, unobservable. - [Connect a coding agent](https://docs.chargerdojo.com/guide/connect-a-coding-agent): Point Claude Code, Codex, Cursor or another MCP client at the hosted ChargerDojo server to answer OCPI questions and read your test runs. - [Use the connector](https://docs.chargerdojo.com/guide/use-the-connector): Run dojo-connect beside your OCPI service so we can test it without it ever being reachable from the internet. Install, pair, run, and what it will not carry. - [Connect a local endpoint](https://docs.chargerdojo.com/guide/connect-a-local-endpoint): Test an implementation on localhost or in a VPC by putting a temporary HTTPS tunnel in front of it, and what that window of exposure costs. - [Let a partner register with you](https://docs.chargerdojo.com/guide/let-a-partner-register): The inbound direction: issue a registration token, let their client drive the handshake, and read the row states while you wait. - [Author a custom journey](https://docs.chargerdojo.com/guide/author-a-scenario): The custom journey JSON shape, the knobs that matter, and how to import, run and save a journey written by hand or generated from CI. - [Test a roaming hub](https://docs.chargerdojo.com/guide/test-a-roaming-hub): Register with your own OCPI hub as one CPO party to check its identity, or as a CPO and eMSP pair to trace a Session and its error response through it, with a reference hub sample report. - [Connect a partner endpoint](https://docs.chargerdojo.com/guide/connect-a-partner): Creating a connection. Token A comes from the partner, out of band. - [Create an API key](https://docs.chargerdojo.com/guide/create-an-api-key): Keys are created and revoked in the app; the plaintext shows once. - [Run a conformance suite](https://docs.chargerdojo.com/guide/run-a-suite): Starting runs, `?wait=` (200 finished vs 202 still running), and a CI recipe that separates "they broke a rule" from "we got no answer". - [Read your report](https://docs.chargerdojo.com/guide/read-your-report): The five verdicts; why a warning is never a failure; and why a red verdict can be trusted, with the limits of that claim. - [Check a payload](https://docs.chargerdojo.com/guide/check-a-payload): Edit and compare OCPI payloads in your browser, with limited field checks for 2.2.1. Nothing you paste leaves the page. Free, no login. - [Share a report](https://docs.chargerdojo.com/guide/share-a-report): Public read-only report links for a partner. No auth needed to read one. - [Work with a colleague](https://docs.chargerdojo.com/guide/work-with-a-colleague): Invite someone into your organisation, what each role may do, that partner endpoints are shared rather than per person, and what happens to their work when they leave. - [Run a charging journey](https://docs.chargerdojo.com/guide/run-a-charging-journey): Timed end-to-end charging stories with graded verdicts, idempotent starts, and honest recovery states. - [Troubleshoot](https://docs.chargerdojo.com/guide/troubleshooting): The failures that actually happen: public status codes, and how a target failure differs from our service status. - [Changelog](https://docs.chargerdojo.com/changelog): Which rules changed how they grade, and when to run a test again because an old report failed you. ## Implementation Notes - [Sitemap](https://chargerdojo.com/sitemap.xml): Canonical list of indexable public pages. - [Robots](https://chargerdojo.com/robots.txt): Crawl directives and blocked internal paths.