Für einen API-Aufruf brauchen Sie einen Access Token, den Sie mit Ihrer client_id und Ihrem client_secret anfordern. Der Token ist eine Stunde gültig: Fordern Sie ihn einmal an und verwenden Sie ihn für alle Aufrufe wieder.
Token anfordern
curl -X POST https://k8s.prod.cloud.energyincloud.com/webapp/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=$CLIENT_ID" \
-d "client_secret=$CLIENT_SECRET"
Die Response:
{
"access_token": "eyJhbGciOi...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "read:plants read:telemetry read:energy read:alarms read:controls"
}
- Alternativ zu den Formularfeldern wird HTTP Basic Authentication (
-u "$CLIENT_ID:$CLIENT_SECRET") akzeptiert. - Mit dem optionalen Parameter
scopefordern Sie eine Teilmenge Ihrer Scopes an. - Fehler dieses Endpoints folgen dem OAuth-2.0-Format, zum Beispiel
{"error": "invalid_client"}.
Gültigkeit des Tokens
Der Access Token ist 1 Stunde gültig (expires_in, in Sekunden). Es gibt keinen Refresh Token: Fordern Sie kurz vor Ablauf mit denselben Zugangsdaten einen neuen Token an und verwenden Sie den Token bis dahin für alle Aufrufe wieder. Fordern Sie nicht für jeden Aufruf einen neuen an.
Der erste Aufruf
Übergeben Sie den Token im Header Authorization und listen Sie die Anlagen auf, die Ihr Client sieht:
curl "https://api.cloud.energyincloud.com/v1/plants?limit=2" \
-H "Authorization: Bearer $ACCESS_TOKEN"
{
"data": [
{ "plant_id": "7b0728a9-853c-4b31-8446-a4eb00607566", "name": "Plant A",
"country": "Italy", "timezone": "Europe/Rome", "created_at": "2025-07-03T09:12:44Z" },
{ "plant_id": "f15d7665-49c5-416b-828d-e4244d222b6f", "name": "Plant B",
"country": "Italy", "timezone": "Europe/Rome", "created_at": "2025-09-18T14:05:10Z" }
],
"pagination": { "next_cursor": "eyJpZCI6ImYxNWQ3NjY1In0=", "has_more": true }
}
Was die Response enthält:
| Feld | Bedeutung |
|---|---|
plant_id |
stabile Kennung (UUID) der Anlage, für alle weiteren Aufrufe |
country |
registrierter Ländername, auf Englisch; leer, wenn nicht gesetzt |
timezone |
IANA-Zeitzone der Anlage: Die Energiefenster werden in dieser Zeitzone berechnet |
pagination |
ist has_more gleich true, wiederholen Sie den Aufruf mit next_cursor als Parameter cursor |
limit reicht von 1 bis 200, Standard 50. Die Anlagendetails, GET /v1/plants/{plant_id}, enthalten zusätzlich location, eine Adresse als Freitext: Zeigen Sie sie an, werten Sie sie nicht aus.
Wenn der Aufruf fehlschlägt
401: Der Token fehlt, ist abgelaufen oder ungültig. Fordern Sie einen neuen Token an.403: Dem Client fehlt der erforderliche Scope. Kontaktieren Sie zeroCO2.- Alle weiteren Codes finden Sie in der Tabelle unter „Limits, Fehler und Support“.