How many requests you can make, how to build an integration that holds up over time, what the errors mean and whom to contact.
Limits
2 000 requests per day and 60 per minute per client; higher limits under a dedicated agreement.
A bulk call counts as one request, whatever the number of plants in the page. A bulk page holds at most 100 plants.
Best practice
- Cache the token for its full hour; do not request one per call.
- Use bulk endpoints for periodic reads of more than one plant.
- Paginate with the cursor: pass
pagination.next_cursorback ascursoruntilhas_moreisfalse. Treat the cursor as opaque. - Back off on
429and503: wait and retry with exponential backoff (for example 1 s, 2 s, 4 s, up to a minute), adding a random jitter. 404means not visible: the plant does not exist or is not linked to your organization. The API does not distinguish the two.- Tolerate new fields: ignore fields you do not know; they may be added within
/v1. nullis a value: handle null power, state of charge and energy fields.
Errors
Every API error returns the same JSON envelope:
{
"error": {
"code": "PLANT_NOT_FOUND",
"message": "Plant 7b0728a9-853c-4b31-8446-a4eb00607566 not found",
"request_id": "req_21ee1d5946a8",
"details": {}
}
}
Errors of the token endpoint follow the OAuth 2.0 format instead ({"error": "invalid_client"}).
| Code | HTTP | Meaning | Action |
|---|---|---|---|
INVALID_TOKEN |
401 | missing, malformed or invalid token | obtain a new token |
TOKEN_EXPIRED |
401 | token expired | obtain a new token |
INVALID_AUDIENCE |
401 | token not issued for this API | use your API client's credentials |
AUTHENTICATION_FAILED |
401 | authentication failed | obtain a new token |
SCOPE_REQUIRED |
403 | your client lacks the required scope | contact zeroCO2 |
PLANT_NOT_FOUND |
404 | plant unknown or not visible to your client | check the id against GET /v1/plants |
INVALID_QUERY_PARAM |
400 | missing or invalid parameter | fix the request; details names the parameter |
RATE_LIMIT_EXCEEDED |
429 | request limit reached | back off and retry |
SERVICE_UNAVAILABLE |
503 | temporary unavailability | back off and retry |
JWKS_UNAVAILABLE |
503 | token could not be verified | back off and retry |
INTERNAL_ERROR |
500 | unexpected error | retry once, then contact support |
A 429 or 5xx may occasionally arrive without the envelope: always rely on the HTTP status code.
Versions
The API version is part of the path (/v1). Within a version, changes are backward compatible: new endpoints, new optional parameters and new response fields may be added. Incompatible changes are published under a new version (/v2), and the previous version remains available for a transition period announced in advance.
Support
Email: info@energysynt.com · Phone: +39 049 5017583
Please include the request_id of the failing call, the endpoint and the time of the request (UTC).