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

# API reference

This reference documents every endpoint on the OCPPLAB Gateway API: request/response schemas, shared errors, and per-endpoint code samples in shell, Python, and Node.js.

## Domains

| Section           | Purpose                                                          |
| ----------------- | ---------------------------------------------------------------- |
| Catalog           | Read-only discovery of supported charger brands and models       |
| Locations         | Tenant-scoped CRUD for charging hubs, depots, and sites          |
| Chargers          | Register chargers and control deployment lifecycle               |
| Commands          | Drive simulator behavior on a single charger                     |
| Location chargers | Bulk provisioning and commands across all chargers in a location |
| OCPI              | CPOs, locations, and templates for roaming test beds             |
| Health            | Service liveness and readiness checks                            |

## Authentication

`Authorization: Bearer <jwt>` is the only header most requests need. User tokens are pre-scoped to a single tenant. Internal admin integrators have a separate flow — see [Authentication](/authentication).

If a request fails with `403`, check the token role before assuming the endpoint or payload is wrong.

## First endpoints to try

In order, these are the useful routes to smoke-test a new integration:

1. `GET /catalog/brands`
2. `GET /catalog/brands/{brand_slug}/models`
3. `POST /locations`
4. `POST /chargers`
5. `POST /chargers/{charger_id}/start-transaction`
6. `GET /chargers/{charger_id}/logs`

This matches the real-world flow: discover a charger, create a site, provision it, send a command, inspect logs.

## Tips

* Start with `GET` routes to validate access before moving to create or command routes
* For location-scoped command routes, omit `charger_ids` to target the full location
* Treat ids returned by list and create responses as the source of truth for follow-up requests
* Use `GET /chargers/{charger_id}/logs` after command execution to verify emitted OCPP actions

## Next step

Hands-on path: [Quickstart](/quickstart). End-to-end flows: [Common workflows](/common-workflows).