Welcome to Solidstudio CPMS Public API
Discover robust API guides and resources built to help you maximize the potential of Solidstudio's REST API
The Public API exposes the CPO backbone's back-office functionality to external integrators: charging infrastructure management, remote commands, sessions, CDRs, tariffs, tokens, roaming partners, and IAM. It is designed for host-to-host integration (your backend ↔ CPMS).
Base URL and versioning
All Public API routes live under:
https://<your-environment-host>/api/v1/<resource>
The version is part of the path. Currently everything is v1, except commands, which also has a v2 (/api/v2/commands) that returns an ocppMessageId in every response for end-to-end OCPP request correlation. New integrations should prefer commands v2.
Interactive API reference
A live OpenAPI (Swagger) UI describing every endpoint, schema, and error response is served by the application itself:
https://<your-environment-host>/api-docs
Use it as the authoritative field-level reference; these guides cover the conceptual layer only.
Quick start
curl -s \
-H "x-api-key: $API_KEY" \
"https://<host>/api/v1/sessions?page=1&limit=10"See Authentication for how to obtain a key and what the headers mean.
Conventions
Content type
Requests and responses are JSON (Content-Type: application/json). Request bodies are limited to 5 MB.
Pagination
List endpoints accept query parameters:
| Parameter | Default | Constraints |
|---|---|---|
page | 1 | positive integer |
limit | 10 | positive integer, max 1000 |
offset | — | optional; overrides page-based skipping |
Responses use a common envelope:
{
"pagination": {
"page": 1,
"limit": 10,
"totalPages": 12,
"totalCount": 116,
"previous": null,
"next": "https://<host>/api/v1/sessions?page=2&limit=10"
},
"data": [ ... ]
}previous/next are ready-to-follow URLs (or null at the edges).
Filtering with RSQL
Most list resources have a companion POST <resource>/rsql-list endpoint accepting a single expressive filter instead of dozens of query parameters:
curl -s -X POST \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "filter": "status == '\''COMPLETED'\'' and startDate =gte= '\''2026-01-01T00:00:00Z'\''", "sort": "-startDate" }' \
"https://<host>/api/v1/sessions/rsql-list?page=1&limit=50"- Body:
{ "filter": "<rsql>", "sort": "<field>|-<field>" }— both optional. - Pagination stays in the query string; the response uses the same pagination envelope.
- Each
rsql-listendpoint documents its filterable fields in the Swagger UI. - Syntax reference: RSQL
Several rsql-list endpoints (connectors, charging pools/stations/points) also support asynchronous CSV export; poll export status via GET /api/v1/rsql-csv-exports/:id.
Errors
| Status | Meaning |
|---|---|
400 | Validation failed (unknown fields are stripped; invalid values rejected) |
401 | Missing, invalid, or expired API key |
403 | API key lacks the required permission |
404 | Resource not found |
422 | Request understood but not processable in current state |
500 | Unexpected server error |
Standard errors follow the NestJS shape:
{ "statusCode": 400, "message": ["limit must not be greater than 1000"], "error": "Bad Request" }Domain errors (business-rule violations) use:
{ "reason": "<machine-readable-reason>", "issues": [ ... ] }Request correlation
Every response carries an X-Correlation-Id header. Send your own x-correlation-id request header to propagate an existing trace ID; otherwise one is generated. Quote it when reporting issues. For commands, prefer the v2 endpoints and store the returned ocppMessageId — it traces the request through CPMS → OCPP adapter → charging station logs.
Resource catalog
All paths are relative to /api/v1 unless noted. The permission column is what your API key's role must grant (see Authentication).
Charging infrastructure
| Resource | Path | Read permission |
|---|---|---|
| Charging pools | /charging-pools, /charging-pools/rsql-list | charging-pool:read |
| Charging pool groups | /charging-pool-groups | charging-pool:read |
| Charging stations | /charging-stations, /charging-stations/rsql-list | charging-station:read |
| Charging station groups | /charging-station-groups | charging-station:read |
| Station OCPP logs | /charging-stations/:id/ocpp-logs/rsql-list | charging-station:read-logs |
| Charging points | /charging-points, /charging-points/rsql-list | charging-point:read |
| Charging point groups | /charging-point-groups | charging-point:read |
| Connectors | /connectors, /connectors/rsql-list | connector:read |
| Connector groups | /connector-groups | connector:read |
| Business status | /business-status | charging-station:read |
| Payter terminals | /payter-terminals | payter:read |
Hierarchy: charging pool (location) → charging station (physical OCPP device) → charging point (EVSE) → connector (plug).
Charging operations
| Resource | Path | Permission |
|---|---|---|
| Commands (v1) | /commands/* | charging-station:remote-control |
Commands (v2, with ocppMessageId) | /api/v2/commands/* | charging-station:remote-control |
| Sessions | /sessions, /sessions/rsql-list | session:read |
| CDRs (charge detail records) | /cdrs, /cdrs/rsql-list | cdr:read |
| Charging profiles | /charging-profiles | smart-charging:* |
| OCPP configuration | /ocpp-configuration | charging-station:read-config / update-config |
| OCPP configuration logs | /ocpp-config-logs | charging-station:read-config |
| Firmware | /firmware | firmware:* |
| Exports | /exports | cdr:read |
Pricing and roaming
| Resource | Path | Permission |
|---|---|---|
| Tariffs | /tariffs | tariff:* |
| Tariff rules | /tariffs-rules, /tariffs-rules-dictionaries | tariff-rule:* |
| Tokens (RFID/eMSP) | /tokens | token:* |
| Roaming partners | /partner | roaming-partner:* |
| OCPI partners | /ocpi-partners, /ocpi-partners/connections | ocpi-partner:* |
| Operators | /operators | operator:* |
Platform
| Resource | Path | Permission |
|---|---|---|
| Webhooks | /webhooks | webhook:read / webhook:manage |
| IAM (roles & permissions) | /iam | system:manage-iam |
| API key role assignment | /api-keys | system:manage-iam |
| User role assignment | /users | system:manage-iam |
| Bulk operations | /bulk-operations | bulk-operation:* |
| CSV export status | /rsql-csv-exports | key that started the export |
Updated 1 day ago