> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ocpplab.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ocpplab.io/_mcp/server.

# Concepts

## Organizations

Your organization is the tenant. Every token belongs to one organization, and every call only reads and writes that organization's data. An id from another organization returns `404`.

## Domains

The API is split into eight domains. Each one is a namespace in the SDKs, a command group in the CLI and its own MCP server.

| Domain           | SDK namespace      | REST prefix          | Use it to                                                                               |
| ---------------- | ------------------ | -------------------- | --------------------------------------------------------------------------------------- |
| Virtual chargers | `client.evcharger` | `/evcharger`         | Deploy simulated chargers against any CSMS and drive them with OCPP commands            |
| CPO              | `client.cpo`       | `/cpo`               | Run your own charging infrastructure: charge points, locations, tariffs, sessions, CDRs |
| eMSP             | `client.emsp`      | `/emsp`              | Issue driver tokens and choose which partner locations your drivers see                 |
| OCPI             | `client.ocpi`      | `/ocpi`              | Connect to roaming partners and hubs, and push or pull CPO and eMSP data                |
| Proxy            | `client.proxy`     | `/proxy`             | Put OCPPLab between chargers and a backend, and send commands through it                |
| Booking          | `client.booking`   | `/booking`           | Let drivers reserve a charger ahead of time                                             |
| Energy           | `client.energy`    | `/energy-management` | Cap the power of chargers and read what they draw                                       |
| Webhooks         | `client.webhooks`  | `/webhook-gateway`   | Get events on your HTTPS endpoint instead of polling                                    |

## Virtual chargers

A **location** groups virtual chargers. A **deployment** is one running charger: it has an OCPP `identity`, a charger `model` from the catalog, and the `ws_url` of the CSMS it connects to. Once online, a virtual charger also appears as a CPO charge point, so the same charger can be driven as a simulator (`evcharger`) and managed as infrastructure (`cpo`).

## Asynchronous operations

Deploying chargers and sending them commands takes seconds, so those calls return **202 Accepted** at once and finish in the background. The response tells you what to poll. See [Long-running operations](/get-started/guides/long-running-operations).

## Roaming

As a **CPO** you publish locations, tariffs, sessions and CDRs to partners. As an **eMSP** you publish driver tokens and receive partner locations. OCPI connects the two: register a partner, run the credentials handshake, then push or pull data. Your organization's OCPI party id (for example `NL*X0I`) is set in Studio under **Settings → Business details**.

## Environments

The SDKs and CLI call `https://api.ocpplab.io` by default. Pass `baseUrl` (TypeScript), `base_url` (Python) or `--base-url` (CLI) to use another host.