Workspace-Admin-API
Die Workspace-Admin-API ermöglicht Server-zu-Server-Integrationen zur Verwaltung eines EVCharge-Workspaces. Diese Dokumentation richtet sich an Workspace-Administratoren und externe Integratoren. Sie verwendet widerrufbare workspacegebundene Tokens und feingranulare Scopes; Kunden-Anmeldetokens und Browsersitzungen werden nicht akzeptiert.
Dieses Verzeichnis ist die maßgebliche Entwicklerreferenz für die von app-api implementierte /v2/admin-API. Es dokumentiert weder Kunden-/Mobilrouten noch die eigenen HTTP-Routen des Admin-Portals.
- Endpunktanfragen und -antworten führt alle 87 registrierten Endpunkte, Scopes, Parameter, Anfrage-Bodys und Erfolgs-Bodys auf.
- Schemas und Beispiele definiert wiederverwendbare Anfrage-/Antworttypen und repräsentative JSON-Bodys.
- Antwort- und Fehlervertrag definiert jeden gemeinsamen und endpunktspezifischen Fehler-Body.
Basis-URL und Ressourcengrenze
Alle Routen sind relativ zum bereitgestellten Origin app-api:
https://api.evcharge.mobi/v2/admin/...
Workspace-IDs werden weder in URL, Query noch Body akzeptiert. Jedes Token gehört genau einem Workspace; die API leitet cpoId aus dem authentifizierten Token-Prinzipal ab. Gehört ein verschachtelter Standort, Ladegerät, Benutzer, Tarif, Profil, Zuweisung oder Transaktion nicht dazu, liefert sie dieselbe nicht auskunftgebende 404 RESOURCE_NOT_FOUND-Antwort.
Zugriffstoken erhalten
Ein menschlicher Workspace-Administrator erstellt Tokens in den Workspace-Einstellungen unter API-Zugriff. Die Tokenverwaltung steht Workspace-Tokens bewusst nicht zur Verfügung.
- API-Zugriff ist in jedem Paket enthalten, auch in Free. Der Administrator benötigt Bearbeitungsrechte für den Workspace.
- Der Workspace-Host muss die Admin-API über
adminApiEnabledaktivieren; andernfalls erhält ein gültiges Token ein nicht auskunftgebendes404vonapp-api. - Der Administrator darf nur Scopes vergeben, die seine aktuellen Rechte und die Workspace-Funktionsberechtigungen erlauben.
- Neue Tokens können unbefristet sein (Standard in den Workspace-Einstellungen) oder eine vom Administrator gewählte Lebensdauer von 1–365 ganzen Tagen haben; der Server berechnet das absolute Ablaufdatum. Unbefristete Tokens bleiben bis zum Widerruf gültig.
- Ein Workspace kann höchstens 50 aktive Tokens haben.
- Die Zugangsinformation wird einmal im Klartext angezeigt. Speichern Sie sie sofort in einem Secret-Manager.
- Name, Scopes und Ablaufzeit sind unveränderlich. Zur Rotation erstellen, verteilen und prüfen Sie einen Ersatz und widerrufen das alte Token.
- Ein Widerruf wirkt sofort. Widerrufene Zeilen bleiben als unveränderlicher, geschwärzter Workspace-Verlauf sichtbar. Es gibt weder Bearer-Token-Introspektion noch einen Endpunkt zum endgültigen Löschen.
app-api bietet keinen Endpunkt zum Ausstellen, Aktualisieren, Auflisten oder Widerrufen dieser Zugangsdaten. Der Tokenbezug erfolgt daher vorab über das menschlich bediente Admin-Portal, nicht über einen weiteren hier beschriebenen Endpunkt.
Speichern Sie das Token niemals in der Versionsverwaltung, in URLs, Abfrageparametern, Cookies, Logs, Analysedaten oder Fehlerberichten.
Authentifizierung
Senden Sie bei jeder Anfrage genau einen Header gemäß RFC 6750:
Authorization: Bearer evc_ws_<selector>.<secret>
Die exakte opake Zugangsinformation besteht aus evc_ws_, einem 16-stelligen kanonischen Base64url-Selektor, . und einem 43-stelligen kanonischen Base64url-Geheimnis. Senden Sie sie vollständig und unverändert; kodieren Sie sie nicht erneut als Base64.
Die API weist doppelte Autorisierungsheader, kommaverknüpfte Werte, andere Schemata, leere Bearer-Werte, Kunden-JWTs und außerhalb dieses Headers übergebene Zugangsdaten zurück.
Fehlerhafte, unbekannte, abgelaufene, widerrufene oder anderweitig ungültige Tokens erhalten dieselbe Antwort:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer
Cache-Control: no-store
Content-Type: application/json
{
"error": "Unauthorized",
"code": "INVALID_WORKSPACE_TOKEN"
}
Der Dienst prüft bei jeder Anfrage Tokenstatus und aktuelle Workspace-Berechtigungen. Das Entfernen einer Berechtigung kann betroffene Scopes daher vor Tokenablauf deaktivieren.
Workspace-Tokens sind opake Zugangsdaten, keine JWTs. Sie haben kein Refresh-Token und keinen Refresh-Endpunkt. Befristete Tokens verlieren bei ihrem absoluten expiresAt die Gültigkeit; unbefristete gelten bis zum Widerruf. Rotation bedeutet, im Portal Ersatzdaten zu erstellen, im Client einzusetzen und die alten zu widerrufen.
Anfragekonventionen
- Verwenden Sie
Content-Type: application/jsonfür Anfragen mit JSON-Body. - Optionale Anfragewerte
X-Request-Idwerden getrimmt und nur mit 1–128 Zeichen ausA-Z,a-z,0-9,.,_,:oder-akzeptiert; sonst erzeugt der Server eine UUID. Jede Antwort gibt den gewählten Wert alsX-Request-Idzurück. - Optionales
X-Error-Format: envelopewandelt jede JSON-Fehlerantwort in den unter Antwort- und Fehlervertrag dokumentierten strukturierten Umschlag um. Jeder andere Wert behält den Standard-Kompatibilitäts-Body bei. - IDs in Pfadparametern sind positive Ganzzahlen. Vom Portal gelieferte Zugriffstoken-IDs sind Dezimalzeichenfolgen, da sie vorzeichenlose 64-Bit-Datenbankwerte darstellen.
- Datums- und Zeitwerte sind RFC-3339-Zeichenfolgen mit ausdrücklichem Offset, zum Beispiel
2026-08-13T12:30:00Z. - Erfolgreiche Löschvorgänge liefern normalerweise
204 No Content. - Erstellungsvorgänge liefern normalerweise
201 Created. - OCPP-Arbeit, die lediglich eingereiht wurde, kann
202 Acceptedliefern. Dies ist keine Bestätigung des Geräts, sofern die Antwort das nicht ausdrücklich sagt. - Authentifizierte Antworten verwenden
Cache-Control: no-store. QR- und Berichtsexport-Endpunkte liefern Binärdaten mit ausdrücklichen Inhaltsheadern. - Zugelassene Browser-Origins können
X-Request-Id,Idempotency-Replayed,Retry-AfterundContent-Dispositionüber CORS lesen. So können Browserclients Anfragen zuordnen, idempotente Wiederholungen erkennen, Wartezeiten einhalten und serverseitig gewählte Downloadnamen übernehmen.
Idempotenz
Alle Admin-Anfragen mit POST, PUT, PATCH und DELETE müssen einen Idempotency-Key-Header enthalten. Schlüssel bestehen aus 1–255 sichtbaren Zeichen und gelten für Token, Methode und Pfad.
Idempotency-Key: provisioning-2026-08-13-site-42
Ein abgeschlossener Schlüssel mit identischer URL und identischem Body spielt die gespeicherte Antwort erneut ab und ergänzt:
Idempotency-Replayed: true
Derselbe Schlüssel mit anderer Anfrage liefert 409 IDEMPOTENCY_CONFLICT. Eine noch verarbeitete Anfrage liefert 409 IDEMPOTENT_REQUEST_PROCESSING mit Retry-After: 5.
Abgeschlossene Antworten und endgültige Ergebnisse werden ab ihrer letzten Aktualisierung sieben Tage für Wiederholung oder Abgleich aufbewahrt. Danach kann derselbe Schlüssel als neuer Befehl gelten. Clients müssen daher global eindeutige Schlüssel verwenden und dürfen sie nicht absichtlich wiederverwenden.
Läuft eine Verarbeitungssperre ab, endet die Verbindung nach Ausführungsbeginn oder liefert der Vorgang einen Serverfehler, kann die API eine externe Wirkung nicht sicher feststellen. Während der siebentägigen Aufbewahrung bleibt der Schlüssel endgültig unbestimmt und liefert 409 IDEMPOTENCY_OUTCOME_UNKNOWN; er wird weder erneut übernommen noch automatisch ausgeführt. Prüfen Sie vor manueller Wiederherstellung die Wirkungen und senden Sie denselben Vorgang bis zum abgeschlossenen Abgleich nicht mit einem neuen Schlüssel.
Alle schreibenden Admin-Endpunkte, einschließlich POST /reports/send, benötigen Idempotency-Key.
Anfragelimits
Grenzen gelten sowohl für das einzelne Token als auch für dessen Workspace. Die im Repository festgelegten Standardwerte sind:
| Grenze | Standard |
|---|---|
| Zeitfenster | 60 Sekunden |
| Pro Token | 300 Anfragen |
| Pro Workspace | 1.000 Anfragen |
Eine gedrosselte Anfrage liefert 429 Too Many Requests und einen Retry-After-Header. Bereitstellungen können diese Werte überschreiben.
Fehler
JSON-Fehler verwenden ein stabiles code, wenn der Aufrufer danach verzweigen muss:
{
"error": "Insufficient workspace-token scope",
"code": "INSUFFICIENT_SCOPE"
}
Validierungsfehler verwenden Feld-Arrays:
{
"validationErrors": {
"name": ["String must contain at least 1 character(s)"]
}
}
Häufige Statuswerte sind:
| Status | Bedeutung |
|---|---|
400 | Ungültiger Idempotenz-/Benutzercursor-/Geocoder-Vertrag; Pfad-/Body-/Query-Schemafehler sind normalerweise 422 |
401 | Ungültiges Workspace-Token |
403 | Gültiges Token ohne erforderlichen wirksamen Scope oder Berechtigung |
404 | Workspace oder verschachtelte Ressource ist für dieses Token nicht sichtbar |
409 | Konflikt bei Ressourcenstatus, Abhängigkeit, Gleichzeitigkeit oder Idempotenz |
422 | Feldvalidierungsfehler, Bereichsüberschreitung oder Überschreitung der Exportgrenze |
429 | Token- oder Workspace-Anfragelimit überschritten |
502 | Ein nachgelagerter Vorgang wie die Berichtszustellung ist fehlgeschlagen |
503 | Berechtigungs- oder Idempotenzspeicher ist vorübergehend nicht verfügbar |
Scope-Katalog
Der folgende Scope-Katalog wird bei der Token-Erstellung verwendet. Schreibende oder besonders wirksame Scopes können den entsprechenden Lese-Scope einschließen, Lese-Scopes gewähren jedoch niemals Schreibrechte. Verfügbare Scopes hängen von Administratorrechten und aktivierten Workspace-Funktionen ab.
| Domäne | Lese-Scopes | Schreibende und besonders wirksame Scopes | Zusätzliche Berechtigung, falls erforderlich |
|---|---|---|---|
| Workspace | workspaces:read | workspaces:update | — |
| Standorte | sites:read | sites:create, sites:update, sites:delete, sites:power-management | dlmPowerManagement für Leistungsmanagement |
| Ladegeräte | chargers:read | chargers:create, chargers:update, chargers:delete, chargers:credentials, chargers:configuration, chargers:firmware, chargers:commands, chargers:public, chargers:connector-settings, chargers:local-users, chargers:tariff-assignments, chargers:profile-assignments | firmwareOperations, publicCharging, tariffs oder smartCharging für die passende Fähigkeit |
| Benutzer | users:read | users:create, users:update, users:delete, users:invitations, users:rfid, users:access, users:limits | — |
| Ladeprofile | chargingProfiles:read | chargingProfiles:create, chargingProfiles:update, chargingProfiles:delete, chargingProfiles:assign | smartCharging |
| Tarife | tariffs:read | tariffs:create, tariffs:update, tariffs:delete, tariffs:components, tariffs:assign | tariffs |
| Berichte | reports:read | reports:export, reports:schedules, reports:send | scheduledReports für Zeitpläne und Sofortversand |
Der API-Zugriff selbst ist in jedem Paket enthalten und wird über die Host-Einstellung adminApiEnabled gesteuert. Die oben genannten zusätzlichen Funktionsberechtigungen gelten weiterhin; API-Zugriff gewährt keine Funktionen außerhalb des Workspace-Pakets.
Endpunktreferenz
Die folgenden Tabellen enthalten alle 87 Workspace-Admin-Routen. Mehrere Scopes in einer Zelle sind sämtlich erforderlich.
Workspace
| Methode | Pfad | Erforderlicher Scope | Zweck |
|---|---|---|---|
GET | /v2/admin | workspaces:read | Unbedenkliche Workspace-Metadaten und Referenzen lesen. |
PATCH | /v2/admin | workspaces:update | Ein oder mehrere Workspace-Metadatenfelder aktualisieren. |
GET | /v2/admin/dashboard | workspaces:read + reports:read | Begrenzte Workspace-Zähler und operative 90-Tage-Aggregate lesen. |
Workspace-Patch-Felder: name, email, website, addressLine1, addressLine2, postalCode, city, state und countryId. Mindestens ein Feld ist erforderlich. Leere nullfähige Zeichenfolgen werden zu null normalisiert.
Standorte und Leistungsmanagement
| Methode | Pfad | Erforderlicher Scope | Zweck |
|---|---|---|---|
GET | /v2/admin/sites | sites:read | Standorte mit begrenzten 90-Tage-Summen und Standortreferenzdaten auflisten. |
GET | /v2/admin/sites/geocode | sites:read | Normalisierte Standortadressen über den gemeinsamen gedrosselten Geocoder mit Cache suchen. |
POST | /v2/admin/sites | sites:create | Erstellen Sie einen Standort. |
GET | /v2/admin/sites/:siteId | sites:read + reports:read | Standortdetails, letzte Ladevorgänge, Summen und operative Aggregate lesen. |
PATCH | /v2/admin/sites/:siteId | sites:update | Bearbeitbares Standortdokument ersetzen. |
DELETE | /v2/admin/sites/:siteId | sites:delete | Löschen Sie einen leeren Standort; Abhängigkeiten führen zu einem Konflikt. |
GET | /v2/admin/sites/:siteId/power-management | sites:power-management | Dynamischen Lastmanagement-Baum des Standorts lesen. |
PUT | /v2/admin/sites/:siteId/power-management | sites:power-management | Ersetzen Sie die Leistungsmanagement-Konfiguration des Standorts atomar. |
Bodys zum Erstellen und Ändern eines Standorts verwenden:
{
"name": "Main depot",
"description": null,
"addressLine1": "1 Example Street",
"addressLine2": null,
"postalCode": "LV-1001",
"city": "Riga",
"state": null,
"countryId": 1,
"timezoneId": 1,
"latitude": 56.9496,
"longitude": 24.1052
}
Standort-Geocoding akzeptiert optionale Query-Felder street, city, state, country und zweistelliges countryCode sowie Anfrageheader Accept-Language. Straße/Ort/Region müssen zusammen mindestens zwei Zeichen umfassen. Antworten enthalten nur placeId, displayName, latitude und longitude; Anbieterzugangsdaten und spezifische Metadaten werden nicht ausgegeben. Der Server nutzt die gemeinsame Warteschlange mit einer Anfrage pro Sekunde, acht Sekunden Timeout, begrenzten 24-Stunden-Cache und globale Workspace-Token-Limits.
Leistungsmanagement akzeptiert { "pools": [...] }. Ein Pool hat id, name, limit, optional meterSources und rekursives children. Ein untergeordnetes Ladegerät hat chargepointId und priority. Die API begrenzt Baum- und Zähleranzahl und führt beim Ersetzen installierten Zustands zweiphasiges OCPP-Löschen mit erneuter Prüfung durch. Abgelehnte, abgelaufene oder konkurrierende Änderungen liefern 409 POWER_MANAGEMENT_CONFLICT und erhalten die vorige Konfiguration.
Ladegeräte
| Methode | Pfad | Erforderlicher Scope | Zweck oder Eingabe |
|---|---|---|---|
GET | /v2/admin/chargers | chargers:read | Ladegeräte mit Status und zeitlich begrenzten Energie-/Kostensummen auflisten. |
POST | /v2/admin/chargers | chargers:create | Erstellen Sie aus name, identifier und siteId; password ist optional. |
GET | /v2/admin/chargers/:chargerId | chargers:read | Daten zu Ladegerät, EVSE, Anschluss, Referenzen und Status lesen. |
PATCH | /v2/admin/chargers/:chargerId | chargers:update | name, siteId, invertedRfid, smartMode oder automationDisabled aktualisieren. |
DELETE | /v2/admin/chargers/:chargerId | chargers:delete | Löschen Sie ein Ladegerät unter Beachtung der Abhängigkeiten und Abrechnungsregeln. |
PATCH | /v2/admin/chargers/:chargerId/credentials | chargers:credentials | Ladegerätepasswort durch { "password": "..." } ersetzen. |
PATCH | /v2/admin/chargers/:chargerId/connectors/:portId | chargers:connector-settings | Anschlussformat/-typ, Stromart, Spannung, Stromstärke und Leistungsgrenzen aktualisieren. |
PATCH | /v2/admin/chargers/:chargerId/public-listing | chargers:public | Setzen Sie `{ "isPublic": true |
GET | /v2/admin/chargers/:chargerId/public-readiness | chargers:read | Bereitschaft zum öffentlichen Laden und fehlende Voraussetzungen lesen. |
GET | /v2/admin/chargers/:chargerId/logs | chargers:read | Geschwärzte OCPP-Logs mit Cursorpaginierung lesen. |
GET | /v2/admin/chargers/:chargerId/sessions | chargers:read + reports:read | Paginierte Ladevorgänge und Summen lesen. |
GET | /v2/admin/chargers/:chargerId/qr | chargers:read | 300 Pixel großen PNG-QR erzeugen; optional connector=0..255. |
GET | /v2/admin/chargers/:chargerId/composite-schedules | chargers:read | Gespeicherten Verlauf kombinierter Zeitpläne lesen. |
GET | /v2/admin/chargers/:chargerId/configuration | chargers:read | OCPP-Konfiguration mit geschwärzten sensiblen Werten lesen. |
PATCH | /v2/admin/chargers/:chargerId/configuration | chargers:configuration | Konfigurationsänderung mit key und value senden. |
POST | /v2/admin/chargers/:chargerId/configuration/reload | chargers:configuration | Aktuelle Gerätekonfiguration anfordern. |
GET | /v2/admin/chargers/:chargerId/firmware | chargers:read | Aktuelle Firmware und Updatestatus lesen. |
POST | /v2/admin/chargers/:chargerId/firmware | chargers:firmware | Update von einer HTTP(S)-{ "url": "..." } einreihen. |
POST | /v2/admin/chargers/:chargerId/commands/reset | chargers:commands | Senden Sie `{ "resetType": "Soft" |
POST | /v2/admin/chargers/:chargerId/commands/availability | chargers:commands | Senden Sie `{ "availabilityType": "Operative" |
POST | /v2/admin/chargers/:chargerId/commands/trigger | chargers:commands | BootNotification, Heartbeat, StatusNotification oder MeterValues auslösen. |
POST | /v2/admin/chargers/:chargerId/commands/unlock | chargers:commands | Positives connectorId entriegeln. |
POST | /v2/admin/chargers/:chargerId/commands/composite-schedule | chargers:commands | Kombinierten Zeitplan für connectorId, durationSeconds und chargingRateUnit anfordern. |
Abfrageparameter für Ladegerätelogs sind cursor, limit (Standard 50, höchstens 200), from, to, action, direction und levelId. Für Ladevorgänge gelten page, limit (Standard 25, höchstens 100), from, to und customerId (positive ID oder unknown). Der Verlauf kombinierter Zeitpläne nutzt cursor, limit (Standard 20, höchstens 50) und optional connectorId.
Berichte
| Methode | Pfad | Erforderlicher Scope | Zweck |
|---|---|---|---|
GET | /v2/admin/reports/data | reports:read | Gefilterte Ladeberichte mit Cursorpaginierung lesen. |
GET | /v2/admin/reports/measurements | reports:read | Begrenzte Messwerte einer eigenen Transaktion lesen. |
GET | /v2/admin/reports/export | reports:export | Laden Sie einen CSV- oder PDF-Export herunter. |
GET | /v2/admin/reports/schedule | reports:read | Zum Workspace gehörenden Exportzeitplan oder null lesen. |
PUT | /v2/admin/reports/schedule | reports:schedules | Erstellen oder ersetzen Sie den zum Workspace gehörenden Exportzeitplan. |
POST | /v2/admin/reports/send | reports:send | Gespeicherten Export des vorherigen UTC-Kalendermonats per E-Mail versenden; Idempotenzschlüssel erforderlich. |
Berichts- und Exportfilter sind from, to, siteId, chargerId, userId, anonymous und active. from/to verwenden standardmäßig die letzten 90 Tage und dürfen höchstens 90 Tage umfassen. userId lässt sich nicht mit anonymous=true kombinieren.
- Datenpaginierung: opakes
cursor, Standardlimit=50, höchstens 100. - Messungen: erforderliches
transactionLogId, opakescursor, Standardlimit=500, höchstens 1.000. - Export:
format=csv|pdf, Standardcsv, feste Obergrenze 2.000 Zeilen. - Exportantworten verwenden
Content-Disposition: attachment,Cache-Control: private, no-storeundX-Content-Type-Options: nosniff.
Zeitplan-Body:
{
"enabled": true,
"recipientEmail": "reports@example.com",
"format": "csv",
"sendDay": 5,
"sendTime": "08:30"
}
sendDay liegt zwischen 1 und 28, sendTime wird in UTC interpretiert. Der Scheduler holt eine verpasste Minute im aktuellen Zustellmonat nach. Fehlgeschlagene Erstellung vor Übergabe wird nach 5 und 10 Minuten wiederholt; eine unterbrochene building-Reservierung ist nach 30 Minuten übernehmbar. Nach drei Versuchen endet die Automatik. Unmittelbar vor SMTP-Übergabe speichert er indeterminate; indeterminate und der alte Status sending sind endgültig, da erneuter Versand doppelte Anhänge erzeugen könnte. Betreiber müssen diese Ergebnisse vor Änderung des Zeitplanstatus manuell abgleichen. Jeder Takt wählt höchstens zehn Zeitpläne, startet nach 45 Sekunden keine weitere Arbeit und verwendet begrenzte SMTP-Timeouts. Der Job ist standardmäßig deaktiviert und muss nach SMTP- und Kapazitätsprüfung ausdrücklich aktiviert werden. Der API-Zeitplan gehört dem Workspace, nicht der Identität des Token-Erstellers.
Tarife
| Methode | Pfad | Erforderlicher Scope | Zweck |
|---|---|---|---|
GET | /v2/admin/tariffs | tariffs:read | Tarife und Referenzdaten auflisten. |
POST | /v2/admin/tariffs | tariffs:create | Erstellen Sie einen Tarif. |
GET | /v2/admin/tariffs/:tariffId | tariffs:read | Einen eigenen Tarif mit Komponenten lesen. |
PATCH | /v2/admin/tariffs/:tariffId | tariffs:update | Tarifdefinition aktualisieren. |
PUT | /v2/admin/tariffs/:tariffId/components | tariffs:components | Ersetzen Sie bis zu 256 Komponenten atomar. |
DELETE | /v2/admin/tariffs/:tariffId | tariffs:delete | Löschen Sie einen ungenutzten Tarif. |
GET | /v2/admin/tariffs/:tariffId/market-prices | tariffs:read | Preise der zum Tarif gehörenden Gebotszone ab numerischem startsAt lesen. |
GET | /v2/admin/chargers/:chargerId/tariff-assignments | chargers:tariff-assignments + tariffs:read | Tarifzuweisungen eines Ladegeräts auflisten. |
POST | /v2/admin/chargers/:chargerId/tariff-assignments | chargers:tariff-assignments + tariffs:assign | Weisen Sie einen Tarif zu. |
PATCH | /v2/admin/chargers/:chargerId/tariff-assignments/:assignmentId | chargers:tariff-assignments + tariffs:assign | Zuweisungsziel ersetzen. |
DELETE | /v2/admin/chargers/:chargerId/tariff-assignments/:assignmentId | chargers:tariff-assignments + tariffs:assign | Entfernen Sie eine Zuweisung. |
Ein Tarif-Body enthält name, genau eines von currencyId, currencyCode oder currency, optional biddingZoneId und tax. Ein Zuweisungs-Body lautet:
{ "tariffId": 17, "connectorId": 0 }
Beim Anlegen einer Zuweisung gilt der Tarif für alle physischen Anschlüsse, wenn connectorId weggelassen oder ausdrücklich auf 0 gesetzt wird. Aktualisierungen betreffen eine gespeicherte Zuweisung und erfordern daher eine ausdrücklich positive physische connectorId; 0 wird abgelehnt.
Eine Komponente enthält typeId, seasonId, price, optional priority sowie optionale Gültigkeitsgrenzen für Monat, Wochentag und Stunde.
Ladeprofile
| Methode | Pfad | Erforderlicher Scope | Zweck |
|---|---|---|---|
GET | /v2/admin/charging-profiles | chargingProfiles:read | Profile und eigene Referenzdaten auflisten. |
POST | /v2/admin/charging-profiles | chargingProfiles:create | Erstellen Sie ein Profil mit optionalem Zeitplan. |
GET | /v2/admin/charging-profiles/:profileId | chargingProfiles:read | Ein eigenes Profil lesen. |
PATCH | /v2/admin/charging-profiles/:profileId | chargingProfiles:update | Profilmetadaten ersetzen. |
PUT | /v2/admin/charging-profiles/:profileId/schedule | chargingProfiles:update | Zeitplan durch 1–256 Abschnitte ersetzen. |
DELETE | /v2/admin/charging-profiles/:profileId | chargingProfiles:delete | Löschen Sie installierte Zuweisungen und entfernen Sie sie erst nach akzeptierten OCPP-Ergebnissen und erneuter Prüfung. |
GET | /v2/admin/chargers/:chargerId/profile-assignments | chargers:profile-assignments + chargingProfiles:read | Ladeprofilzuweisungen auflisten. |
POST | /v2/admin/chargers/:chargerId/profile-assignments | chargers:profile-assignments + chargingProfiles:assign | Weisen Sie ein Profil zu und synchronisieren Sie es. |
PATCH | /v2/admin/chargers/:chargerId/profile-assignments/:assignmentId | chargers:profile-assignments + chargingProfiles:assign | Zuweisung ersetzen und synchronisieren. |
DELETE | /v2/admin/chargers/:chargerId/profile-assignments/:assignmentId | chargers:profile-assignments + chargingProfiles:assign | Löschen Sie das installierte Profil und entfernen Sie die Zuweisung. |
Profilmetadaten sind label, locationId, stackLevel, purposeId, kindId, optional recurrencyKindId, validFrom, validTo, startSchedule, rateUnitId und optional minChargingRate. Ein Zeitplanabschnitt enthält startPeriod, limit und optional numberOfPhases. Ein Zuweisungs-Body enthält profileId und connectorId (Standard 0).
Profillöschungen und das Ersetzen des Leistungsmanagements können auf Gerätebestätigung warten. Ablehnung, Zeitüberschreitung oder konkurrierende Änderung erzeugen einen Konflikt und erhalten die Datenbankkonfiguration, statt eine erfolgreiche Gerätelöschung vorzutäuschen.
Benutzer, Einladungen, RFID, Zugriff und Grenzen
| Methode | Pfad | Erforderlicher Scope | Zweck |
|---|---|---|---|
GET | /v2/admin/users | users:read | Mitglieder und Einladungen auflisten. |
POST | /v2/admin/users | users:create | Ordnen Sie einen bereits registrierten Kunden anhand von email und Workspace name zu. |
POST | /v2/admin/users/invitations | users:invitations + users:access; bei übergebenem RFID zusätzlich users:rfid | Unbekannte E-Mail-Adresse einladen oder bestehenden Kunden zuordnen. |
POST | /v2/admin/users/invitations/resend | users:invitations | Mit { "email": "..." } erneut senden, unter Beachtung der Empfänger-Wartezeit. |
DELETE | /v2/admin/users/invitations | users:invitations | Widerrufen Sie eine Einladung; die E-Mail-Adresse bleibt im JSON-Body. |
GET | /v2/admin/users/:userId | users:read + reports:read | Benutzerdetails und begrenzte Ladesummen lesen. |
PATCH | /v2/admin/users/:userId | users:update | Workspace-spezifische Anzeige name festlegen. |
DELETE | /v2/admin/users/:userId | users:delete | Mitglied und zugehörigen Workspace-Zugriff unter Beachtung möglicher Konflikte entfernen. |
GET | /v2/admin/users/:userId/vehicles | users:read | Eigene Fahrzeuge auflisten. |
GET | /v2/admin/users/:userId/rfids | users:read | RFID-Metadaten mit maskierten UIDs auflisten. |
POST | /v2/admin/users/:userId/rfids | users:rfid | Fügen Sie uid und optional name hinzu; Antworten zeigen nur die maskierte UID. |
PATCH | /v2/admin/users/:userId/rfids/:rfidId | users:rfid | RFID-Bezeichnung aktualisieren. |
DELETE | /v2/admin/users/:userId/rfids/:rfidId | users:rfid | Löschen Sie ein RFID und synchronisieren Sie betroffene Ladegeräte. |
GET | /v2/admin/users/:userId/access | users:read | Ladegeräteberechtigungen lesen. |
PUT | /v2/admin/users/:userId/access | users:access | Zugriff mit allChargers und eindeutigen chargerIds ersetzen. |
DELETE | /v2/admin/users/:userId/access/:accessId | users:access | Eine Zugriffszeile widerrufen. |
GET | /v2/admin/users/:userId/limits | users:read | Ladegrenzen auflisten. |
POST | /v2/admin/users/:userId/limits | users:limits | Erstellen Sie limitTypeId, energyValue und/oder timeValue. |
PATCH | /v2/admin/users/:userId/limits/:limitId | users:limits | Ein oder mehrere Grenzfelder aktualisieren. |
DELETE | /v2/admin/users/:userId/limits/:limitId | users:limits | Löschen Sie eine Grenze. |
GET | /v2/admin/chargers/:chargerId/local-users | chargers:read + users:read | Lokale Ladegerätebenutzer und ausstehende Einladungen auflisten. |
POST | /v2/admin/chargers/:chargerId/local-users | chargers:local-users + users:access | Fügen Sie ein vorhandenes customerId mit optionalem expiresAt hinzu. |
POST | /v2/admin/chargers/:chargerId/local-users/invitations | chargers:local-users + users:invitations + users:access | Per E-Mail hinzufügen oder einladen. |
DELETE | /v2/admin/chargers/:chargerId/local-users/invitations | chargers:local-users + users:invitations | Widerrufen Sie eine lokale Benutzereinladung per E-Mail-Adresse. |
PATCH | /v2/admin/chargers/:chargerId/local-users/:localUserId | chargers:local-users + users:access | Nullfähiges expiresAt setzen. |
DELETE | /v2/admin/chargers/:chargerId/local-users/:localUserId | chargers:local-users + users:access | Lokalen Zugriff entfernen und OCPP-Zustand synchronisieren. |
Fahrzeugpaginierung und status=members-Benutzerpaginierung verwenden positives numerisches cursor. Einladungen nutzen opaken Cursor i2.*, während status=all nach der ersten Seite einen opaken zusammengesetzten a2.*-Cursor verwendet; numerische Cursor bleiben nur für alte Mitgliederfortsetzungen gültig. Benutzersuche erfolgt im Anfrageheader X-Admin-User-Search, damit E-Mails nicht in URLs oder Zugriffslogs erscheinen. limit ist standardmäßig 50, höchstens 100; die Benutzerliste unterstützt status=all|members|invitations. Behandeln Sie alle zurückgegebenen Cursor als opak und senden Sie sie unverändert zurück.
Die direkte Benutzererstellung erzeugt kein Passwort, keine Anmeldeidentität und keine Sitzung. Sie ordnet nur einen bereits registrierten Kunden zu. Für unbekannte E-Mail-Adressen verwenden Sie den Einladungsendpunkt. Der geschützte Tagless-Systembenutzer kann über diese Routen nicht geändert werden.
Beispiele
Setzen Sie Werte in Ihrer Shell, ohne das Token auszugeben:
export ADMIN_API_BASE_URL="https://api.example.com"
export WORKSPACE_TOKEN="<read from secret manager>"
Standorte auflisten:
curl --fail-with-body \
-H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
"${ADMIN_API_BASE_URL}/v2/admin/sites"
Standort sicher erstellen:
curl --fail-with-body \
-X POST \
-H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: site-main-depot-v1" \
--data '{
"name":"Main depot",
"description":null,
"addressLine1":"1 Example Street",
"addressLine2":null,
"postalCode":"LV-1001",
"city":"Riga",
"state":null,
"countryId":1,
"timezoneId":1,
"latitude":56.9496,
"longitude":24.1052
}' \
"${ADMIN_API_BASE_URL}/v2/admin/sites"
Laden Sie einen CSV-Bericht für einen ausdrücklich angegebenen UTC-Zeitraum herunter:
curl --fail-with-body \
-H "Authorization: Bearer ${WORKSPACE_TOKEN}" \
-o report.csv \
"${ADMIN_API_BASE_URL}/v2/admin/reports/export?format=csv&from=2026-07-01T00%3A00%3A00Z&to=2026-08-01T00%3A00%3A00Z"
Bewusste Ausschlüsse
Die Workspace-Token-API bietet keine Vorgänge, die einen menschlichen Prinzipal oder weitergehende Befugnisse erfordern. Dazu gehören:
- Tokens mit einem anderen Token erstellen, offenlegen, rotieren oder widerrufen;
- Anmeldung, Passwortzurücksetzung, Sitzungen, menschliche Rollen-/Rechtedelegation und Workspace-Besitzänderungen;
- Workspace-Erstellung/-löschung und Mitgliedschaft im Abrechnungskonto;
- Zahlungseinstellungen, Stripe-Onboarding, Pakete, Rechnungen und Host-Abrechnung;
- hostweite Supportvorgänge und Anbieter-Webhooks;
- menschliche Benachrichtigungen, Navigationsumleitungen, Markenmaterial sowie Entwicklungs-/Testrouten.