Modelle, Pässe, Lebenszyklus-Ereignisse, Telemetrie und Nachweise maschinell pflegen. JSON über HTTPS, Schlüssel mit Berechtigungen, Test-Modus ohne Speichern.
Es gibt derzeit nur Version 1. Ältere Versionen werden hier auswählbar, sobald es sie gibt.
Überblick
Die API bildet dieselben Objekte ab wie das Dashboard: ein Modell ist die Stammdaten-Ebene eines Produkts, ein Pass gehört zu genau einer physischen Batterie. Ereignisse und Messwerte hängen am Pass. Alles läuft über eine Basis-URL, alle Antworten sind JSON, auch Fehler.
Ein Schlüssel, eine Firma
Der Schlüssel bestimmt die Firma. Fremde Kennungen antworten 404, nicht 403 - es gibt keinen Weg, aus einem Schlüssel auf fremde Daten zu schließen.
Kein DELETE
Batteriepässe sind aufbewahrungspflichtig. Version 1 kennt GET, POST und PATCH. Das Lebensende wird als Ereignis gemeldet.
Server-Hoheit
Pflichtfeldquote, Batteriestatus, Kurzcode und Registerzustand berechnet der Server. Diese Felder sind lesbar, aber nicht schreibbar.
Gleiche Regeln wie im Dashboard
Kontingente, Pflichtfelder und Rollen gelten identisch. Es gibt keinen Weg, über die API etwas anzulegen, das im Dashboard verboten wäre.
Schritt 1: Schlüssel anlegen
API-Schlüssel entstehen ausschließlich im Dashboard und ausschließlich durch ein Konto mit der Rolle Admin. Der Inhaber hat immer Admin.
Integrationen öffnen
Im Dashboard links in der Navigation unter Verwaltung auf Integrationen. Nur Admins sehen diesen Punkt.
API-Schlüssel erstellen
Im Bereich API-Zugang auf die Schaltfläche API-Schlüssel erstellen. Bezeichnung vergeben, die das System benennt, etwa SAP-Nord-Prod.
Modus und Berechtigungen wählen
Test für die Entwicklung, Live für den Produktivbetrieb. Dazu eine Vorlage oder einzelne Berechtigungen, und optional ein Ablaufdatum von 30, 90 oder 365 Tagen.
Klartext einmal sichern
Der Schlüssel wird genau einmal angezeigt. Gespeichert wird nur ein SHA-256-Hash, deshalb kann ihn niemand nachträglich auslesen, auch wir nicht.
VerwaltungIntegrationen
API-ZugangREST-API v1 für ERP, MES, PLM und BMS-TelemetrieTest-ModusAPI-KonsoleOpenAPI
3 · Klartext einmal kopieren - danach zeigt ihn niemand mehr an
Anmelden und Schlüssel anlegen Öffnet das Dashboard direkt im Bereich Integrationen. Ohne Anmeldung landen Sie erst auf der Login-Seite und danach automatisch dort.
Den Schlüssel wie ein Passwort behandeln: nicht in Repositories, nicht im Frontend, nicht in Logs. Geht er verloren, im Dashboard rotieren - der alte wird sofort ungültig, der neue erscheint einmalig.
Schritt 2: Erster Aufruf
GET /me ist der Verbindungstest. Die Antwort nennt Firma, Tarif, Modus, die wirksamen Berechtigungen, das Rate-Limit und das freie Kontingent im laufenden Vertragsjahr. Wenn dieser Aufruf funktioniert, stimmen Schlüssel, Header und Netzwerkweg.
Im Dashboard unter Integrationen führt ein Link zur API-Konsole. Dort wählen Sie einen Endpunkt aus der OpenAPI-Beschreibung, füllen Parameter aus, senden mit Ihrer Anmeldung statt mit einem Schlüssel und lesen die Antwort als klappbaren JSON-Baum. Jeder Aufruf lässt sich als cURL kopieren und direkt ins Terminal übernehmen. Schreibende Aufrufe laufen dort standardmäßig als Dry-Run.
Authentifizierung
Jede Anfrage trägt den Header Authorization mit dem Schema Bearer. Es gibt zwei Schlüsselarten, erkennbar am Präfix.
Schlüssel
Form
Zweck
Live
bpw_live_ + 48 Hex-Zeichen
Produktivbetrieb, schreibt wirklich
Test
bpw_test_ + 48 Hex-Zeichen
Entwicklung und Abnahme, speichert nie
Zusätzlich akzeptiert die API das Sitzungs-Token eines angemeldeten Dashboard-Nutzers. Die Berechtigungen ergeben sich dann aus der Rolle. Das ist der Weg der API-Konsole und nicht für Integrationen gedacht. Fehlt der Header oder ist der Schlüssel ungültig, antwortet die API 401 mit WWW-Authenticate. Nach 30 Fehlversuchen je IP und Minute folgt 429.
Live, Test und Dry-Run
Es gibt bewusst keine getrennte Sandbox-Datenbank. Ein Test-Schlüssel arbeitet auf Ihren echten Stammdaten und prüft Berechtigungen, Pflichtfelder, Seriennummern und Kontingente wie im Ernstfall, speichert aber nichts.
Live-Schlüssel
Test-Schlüssel
Lesen
echte Daten
echte Daten
Schreiben
gespeichert, 201
vollständig geprüft, 200 mit dry_run: true
Kontingent
wird verbraucht
wird nur geprüft
Protokoll
ja
ja, als Dry-Run markiert
Rate-Limit
600 / Minute
60 / Minute
Auch ein Live-Schlüssel kann eine einzelne Anfrage als Probe senden: Header X-BPW-Dry-Run: true. Die Antwort-Header X-BPW-Mode und X-BPW-Dry-Run nennen immer den tatsächlich gültigen Zustand.
Berechtigungen
Jeder Schlüssel trägt genau die Berechtigungen, die das anfragende System braucht. Fehlt eine, antwortet die Route 403 mit dem Code insufficient_scope.
Berechtigung
Erlaubt
models:read
Modelle lesen, Entwurf prüfen
models:write
Modelle anlegen und ändern
passes:read
Pässe und Ereignisse lesen, inklusive public_url, gs1_link und short_url für eigene QR-Codes
passes:write
Pässe anlegen und ändern, Ereignisse melden
telemetry:read
Telemetrie-Zeitreihe je Pass lesen (seit 1.1.0)
telemetry:write
Messwerte melden
certificates:read
Nachweise lesen und herunterladen
suppliers:read
Lieferanten, Datenanfragen und gelieferte Werte lesen (seit 1.1.0)
suppliers:write
Lieferanten einladen (seit 1.1.0)
audit:read
Audit-Trail lesen (seit 1.1.0)
GET /me, GET /field-catalog und GET /openapi.json brauchen keine Berechtigung. Vorlagen im Dashboard: Nur lesen (alle read-Berechtigungen), ERP-Synchronisation, BMS-Telemetrie (lesen und melden), Alle, Eigene; das Dashboard erklärt zu jeder Berechtigung die freigeschalteten Endpunkte. Höchstens zehn aktive Schlüssel je Firma; jede Aktion an einem Schlüssel steht mit Person und Zeitpunkt im Audit-Trail.
Tarife
Die Prüfung läuft bei jedem einzelnen Aufruf, nicht nur beim Anlegen des Schlüssels. Ein Tarifwechsel wirkt sofort: Nach einem Wechsel von Enterprise auf Pro behält ein Live-Schlüssel nur noch telemetry:read und telemetry:write.
Tarif
Test-Schlüssel
Live-Schlüssel
Pilot, Starter
ja, voller Funktionsumfang
nein
Pro
ja
nur telemetry:read und telemetry:write
Enterprise
ja
alle Berechtigungen
Archiv, Lifetime
ja, nur lesend
nein
In Aufbewahrungs-Tarifen antworten alle schreibenden Routen 403 mit tenant_read_only. Telemetrie setzt zusätzlich den Tarif Pro oder höher voraus, unabhängig vom Schlüsselmodus.
Anfragen und Antworten
Einzelobjekte kommen direkt als JSON-Objekt, Listen im Envelope mit data, has_more und next_cursor.
Zeit
Zeitstempel sind ISO 8601 in UTC mit Millisekunden, Kalenderdaten YYYY-MM-DD. Eingaben werden normalisiert; ein Datum wie 2026-02-30 wird abgelehnt.
null gegen fehlend
Bei POST und PATCH bleibt ein nicht geliefertes Feld unverändert, null leert das Feld. Leere Zeichenketten werden zu null.
Unbekannte Felder
Werden abgelehnt, nicht ignoriert. Ein Tippfehler im ERP fällt sofort auf, statt still Daten zu verlieren.
Kennungen
UUID in Kleinschreibung. Der übliche Weg vom ERP-Datensatz zum Objekt führt über GET /passes?serial=… oder GET /models?code=…
Zeichensatz und Caching
UTF-8, Content-Type application/json. Alle Antworten tragen Cache-Control: no-store.
Antwort-Header
Header
Bedeutung
X-Request-Id
Kennung des Aufrufs, steht auch in jeder Fehlerantwort und im API-Protokoll des Dashboards.
X-RateLimit-Limit / -Remaining / -Reset
Kontingent des laufenden Fensters, Reset als Unix-Sekunden.
X-BPW-Mode
live oder test, je nach verwendetem Schlüssel.
X-BPW-Dry-Run
true, wenn dieser Aufruf nichts gespeichert hat.
Idempotent-Replayed
true, wenn eine gespeicherte Antwort wiederholt wurde.
Retry-After
Nur bei 429: Wartezeit in Sekunden.
Fehler
Jeder Fehler nutzt denselben Envelope. type gruppiert grob nach HTTP-Status, code ist stabil und für Programmlogik gedacht, message ist englisch und kann sich ändern. param nennt das erste betroffene Feld, im Stapel etwa items[3].serial, details listet alle. Wiederholen Sie 429 und 5xx mit Backoff, 4xx nie automatisch.
400 Bad Request
HTTP/1.1400 Bad Request
X-Request-Id: req_7f3c9a21e4b84c60
{
"error": {
"type": "invalid_request",
"code": "validation_failed",
"message": "One or more fields are invalid.",
"param": "energy_kwh",
"details": [
{ "param": "energy_kwh", "code": "invalid_type", "message": "energy_kwh must be a number." },
{ "param": "gtin", "code": "invalid_gtin", "message": "gtin must be a valid GS1 GTIN." }
],
"request_id": "req_7f3c9a21e4b84c60"
}
}
HTTP
code
Wann
400
unknown_field
Feld steht nicht im Schema. details nennt jedes unbekannte Feld.
400
validation_failed
Typfehler in Modell-Feldern, details listet alle betroffenen Felder.
400
missing_field
Pflichtfeld fehlt, etwa code, model_id oder serial.
400
invalid_enum
Wert steht nicht in der erlaubten Liste.
400
invalid_serial
Seriennummer verletzt den GS1-AI-21-Zeichensatz oder ist zu lang.
400
invalid_gtin
GTIN hat keine gültige Prüfziffer.
400
invalid_date / invalid_timestamp
Kein gültiges Kalenderdatum bzw. kein ISO-8601-Zeitstempel.
400
duplicate_serial_in_batch
Zwei Einträge im selben Stapel tragen dieselbe Seriennummer.
400
out_of_range / no_measurement
Telemetriewert ausserhalb des Bereichs oder gar kein Messwert geliefert.
400
empty_patch
PATCH ohne ein einziges änderbares Feld.
401
missing_authorization
Kein Authorization-Header gesendet.
401
invalid_api_key
Schlüssel unbekannt oder falsch formatiert.
401
api_key_revoked / api_key_expired
Schlüssel wurde widerrufen oder ist abgelaufen.
403
plan_required
Der Tarif erlaubt diesen Modus oder diese Berechtigung nicht.
403
insufficient_scope
Dem Schlüssel fehlt die für die Route nötige Berechtigung.
403
tenant_read_only
Aufbewahrungs-Tarif, schreibende Aufrufe sind gesperrt.
Objekt existiert nicht in Ihrer Firma. Fremde Kennungen antworten ebenfalls 404.
404
route_not_found
Pfad gibt es nicht. Tippfehler oder fehlendes /v1.
405
method_not_allowed
Methode für diesen Pfad nicht erlaubt, Allow-Header nennt die erlaubten.
409
duplicate_code / duplicate_serial
Modell-Code oder Seriennummer existiert bereits in Ihrer Firma.
409
limit_reached
Kontingent des Tarifs erreicht. GET /me zeigt den Stand.
422
idempotency_key_reused
Gleicher Idempotency-Key, aber anderer Inhalt.
429
rate_limit_exceeded
Fenster erschöpft. Retry-After nennt die Wartezeit in Sekunden.
500
internal_error
Unerwarteter Fehler. Bitte die request_id melden.
Pagination
Listen liefern höchstens 200 Einträge je Seite, Standard 50. Sortiert wird nach Erstellzeitpunkt absteigend, bei Telemetrie nach Messzeitpunkt. Der Cursor ist opak und arbeitet auf Zeitstempel und Kennung, nicht auf Offsets: Datensätze, die während des Durchlaufs entstehen, verschieben nichts und werden nicht übersprungen. Für den inkrementellen Abgleich merken Sie sich den größten updated_at der letzten Seite und senden ihn beim nächsten Lauf als updated_since.
pagination.py
import requests
BASE = "https://app.batteriepasswerk.com/api/v1"
H = {"Authorization": f"Bearer {KEY}"}
def iterate(path, **params):
cursor = NonewhileTrue:
r = requests.get(f"{BASE}{path}", headers=H,
params={**params, "limit": 200, "cursor": cursor})
r.raise_for_status()
page = r.json()
yieldfrom page["data"]
ifnot page["has_more"]:
return
cursor = page["next_cursor"]
# Inkrementell: nur was sich seit dem letzten Lauf geändert hatfor p in iterate("/passes", updated_since="2026-09-01T00:00:00Z"):
print(p["serial"], p["lifecycle_status"])
Rate-Limits
Feste Fenster von 60 Sekunden. Jede Antwort nennt das verbleibende Kontingent, bei Überschreitung folgt 429 mit Retry-After. Ein Stapel mit 500 Pässen zählt als eine Anfrage, deshalb ist Massen-Serialisierung selten das Limit.
Aufrufer
Limit
Live-Schlüssel
600 Anfragen je Minute
Test-Schlüssel
60 je Minute
Sitzung in der Konsole
120 je Minute
Fehlgeschlagene Anmeldungen
30 je Minute und IP
GET /openapi.json
60 je Minute und IP
Idempotenz
Jeder POST nimmt den Header Idempotency-Key mit bis zu 255 Zeichen, etwa die Belegnummer aus dem ERP.
Erste Ausführung: normale Verarbeitung, die Antwort wird 24 Stunden unter Firma, Schlüssel und Key gespeichert.
Wiederholung mit identischer Anfrage: die gespeicherte Antwort, zusätzlich der Header Idempotent-Replayed: true, ohne erneute Ausführung.
Wiederholung mit anderem Inhalt: 422 mit dem Code idempotency_key_reused.
Gespeichert werden nur 2xx und 4xx. Nach 429 oder 5xx darf mit demselben Key erneut versucht werden.
# Erster Versuch läuft in einen Timeout - Ergebnis unbekanntcurl-X POST https://app.batteriepasswerk.com/api/v1/passes \
-H"Authorization: Bearer $BPW_API_KEY" \
-H"Idempotency-Key: los-2026-09-0042" \
-H"Content-Type: application/json" \
-d'{ "items": [ … ] }'# Gefahrlose Wiederholung mit demselben Schlüssel# → 201 mit derselben Antwort, zusätzlich: Idempotent-Replayed: true
Konto und Katalog
Achtzehn Endpunkte. Jeder nennt die nötige Berechtigung, die Parameter und ein vollständiges Beispiel. Alle Pfade sind relativ zur Basis-URL.
GET/meBerechtigung: keine
Verbindungstest und Selbstauskunft
Nennt Firma, Tarif, Modus, wirksame Berechtigungen, Rate-Limit und das Kontingent im laufenden Vertragsjahr. Erster Aufruf jeder Integration.
Jede Pflichtfeld-Regel mit den Nummern der 71 offiziellen EU-Datenpunkte, der Rechtsgrundlage, der Anwendbarkeit und den API-Feldern, die sie erfüllen. Damit bildet ein ERP die Datenpunkte auf eigene Felder ab.
Body enthält die schreibbaren Modell-Felder (siehe Feldreferenz). Unbekannte Felder werden abgelehnt. Antwort 201 mit dem Datensatz und dem aktuellen Kontingent; mit Test-Schlüssel 200 mit dry_run und id: null.
Parameter
Name
Ort
Typ
Beschreibung
code *
body
string
Modellbezeichnung, eindeutig je Firma.
category
body
lmt | bess | ind | ev | device | sli
Bestimmt, welche Pflichtfelder anwendbar sind.
gtin
body
string
GS1-GTIN mit gültiger Prüfziffer, steuert die öffentliche Adresse.
second_life
body
boolean
Second-Life-Ausnahme nach Art. 7(5) und 8(4).
applicability_flags
body
object of boolean
Erklärte Nicht-Anwendbarkeit je Regel des Feldkatalogs.
Zustandslos: liefert die Pflichtfeldquote, die ein Modell mit diesen Werten hätte, und listet jedes fehlende Feld. Ideal als Vorprüfung im ERP, bevor überhaupt geschrieben wird.
Ein Objekt legt einen Pass an, items mit bis zu 500 Einträgen einen Stapel. Ein Stapel zählt als eine Anfrage gegen das Rate-Limit. Doppelte Seriennummern innerhalb eines Stapels sind immer ein Fehler.
Parameter
Name
Ort
Typ
Beschreibung
model_id *
body
uuid
Muss ein Modell Ihrer Firma sein.
serial *
body
string, max. 20
GS1-AI-21-Zeichensatz, eindeutig je Firma.
status
body
ready | review | pending | crit
Standard pending.
batch
body
string, max. 100
Charge oder Los.
production_date
body
YYYY-MM-DD
Produktionsdatum, EU-Datenpunkt 9.
on_conflict
body
error | skip
Nur im Stapel: skip überspringt vorhandene Seriennummern statt abzubrechen.
Meldet ein Lebenszyklus-Ereignis. Der gesetzliche Batteriestatus wird daraus abgeleitet und in der Antwort zurückgegeben. recycled und eol beenden den Pass.
Mindestens ein Messwert oder negative_event je Aufruf. Setzt den Tarif Pro oder höher voraus, unabhängig vom Schlüsselmodus. Werte ausserhalb des Bereichs antworten 400.
Parameter
Name
Ort
Typ
Beschreibung
id *
path
uuid
Kennung des Objekts in Ihrer Firma.
recorded_at
body
ISO 8601
Messzeitpunkt aus dem Gerät, Standard Empfangszeit.
Jede Datenanfrage an einen Lieferanten mit Status (invited, progress, delivered, expired), den angefragten Feldern, Frist und Erinnerungen. Neueste zuerst.
Legt den Lieferanten (per E-Mail eindeutig) und eine Datenanfrage zu einem Ihrer Modelle an und verschickt den passwortlosen Self-Service-Link (60 Tage gültig). Der Link steht nur in dieser Antwort. Tarif Starter oder höher, höchstens 60 Einladungen je Stunde und Firma. Dry-Run prüft alles, legt nichts an und verschickt nichts.
Parameter
Name
Ort
Typ
Beschreibung
supplier_name *
body
string
Firmenname des Lieferanten, bis 200 Zeichen.
email *
body
e-mail
Empfänger der Einladung, identifiziert den Lieferanten in Ihrer Firma.
Jede Schreibaktion Ihrer Firma, wie sie die Datenbank festhält: wer (Nutzer, API-Schlüssel oder System), was (action wie pass.create, Objekt, Referenz) und wann. seq und row_hash gehören zur Hash-Kette je Firma und machen Manipulationen nachweisbar. Neueste zuerst.
Parameter
Name
Ort
Typ
Beschreibung
limit
query
integer 1-200
Seitengröße, Standard 50.
cursor
query
string
Opaker Cursor aus next_cursor der vorigen Seite.
entity_type
query
model | pass | cert | supplier | member | api_key
Objektart.
action
query
string
Genaue Aktion, z. B. pass.create, model.update, supplier.invite.
Alle schreibbaren Felder eines Modells in snake_case, identisch mit der Benennung im Dashboard. Die Spalte EU nennt die Nummer des offiziellen EU-Datenpunkts, soweit das Feld einem zugeordnet ist. Zeichenketten sind auf 4000 Zeichen begrenzt. Nur lesbar sind id, readiness, readiness_detail, created_at, updated_at und public_url.
Schreibbar beim Anlegen sind model_id, serial, status, batch und production_date; danach per PATCH noch status, batch und production_date. Alles Übrige gehört dem Server.
Feld
Bedeutung
lifecycle_status
Gesetzlicher Batteriestatus, aus der Ereigniskette abgeleitet (EU 67).
retired_at
Gesetzt, sobald recycled oder eol gemeldet wurde.
state_of_health_pct
Letzter gemeldeter Telemetrie-Wert.
short_code, short_url
Kurzlink der öffentlichen Pass-Seite.
public_url, gs1_link
GS1 Digital Link, sobald das Modell eine GTIN hat, sonst die Kennungs-Adresse.
Die API ist Pull, Webhooks sind Push. Signierte Ereignisse erreichen Ihr System, sobald sie eintreten: pass.created, model.updated, supplier.delivered und cert.expiring. Signatur per HMAC-SHA256, Wiederholung bei Fehlern. Bewährtes Muster: den Webhook als Anstoß nehmen und die betroffene Ressource anschließend über die API laden, damit die Wahrheit immer aus der API kommt. Aufrufe über die API lösen dieselben Webhooks aus wie Eingaben im Dashboard.
Versionierung und Changelog
Die Version steht im Pfad. Innerhalb von v1 kommen nur Felder und Endpunkte hinzu; bestehende Felder, Fehlercodes und Bedeutungen bleiben. Entfällt etwas, kündigen wir es mindestens zwölf Monate vorher hier, im OpenAPI-Dokument und per E-Mail an die Admins an und betreiben die Nachfolgeversion parallel unter /v2.
Version
Datum
Änderung
1.1.0
2026-09-09
Neue Berechtigungen telemetry:read, suppliers:read, suppliers:write und audit:read. Neue Endpunkte GET /suppliers, GET und POST /supplier-requests, GET /supplier-requests/{id}, GET /audit. Bestehende Schlüssel mit passes:read wurden automatisch um telemetry:read ergänzt.
Ja. Version 1.1.0 ist in Betrieb: Modelle, Pässe, Lebenszyklus-Ereignisse, Telemetrie, Nachweise, Lieferanten-Anfragen, Audit-Trail und der Feldkatalog. Die vollständige Schnittstelle für ERP und MES gehört zum Enterprise-Paket, die BMS-Telemetrie-Schnittstelle ist ab Pro enthalten, und einen Test-Schlüssel mit vollem Funktionsumfang gibt es in jedem Paket, auch im kostenlosen Pilot.
Wie teste ich, ohne echte Pässe zu erzeugen?
Mit einem Test-Schlüssel. Er prüft jede Anfrage vollständig gegen Ihre echten Stammdaten, Berechtigungen, Pflichtfelder und Kontingente und antwortet mit dem Ergebnis, das ein Live-Aufruf hätte, ohne etwas zu speichern. Es gibt bewusst keine getrennte Sandbox-Datenbank mit ausgedachten Daten, die mit der Zeit von der Wirklichkeit abweicht.
Wer darf einen API-Schlüssel anlegen?
Ausschließlich Konten mit der Rolle Admin, wozu der Inhaber immer gehört. Die Regel wird auf drei Ebenen durchgesetzt: in der Datenbank, im Endpunkt und in der Oberfläche. Jede Aktion an einem Schlüssel steht mit Person und Zeitpunkt im Audit-Trail.
Welche Programmiersprache brauche ich?
Jede, die HTTPS und JSON kann. Es gibt kein SDK, das Sie einbinden müssen. Aus dem OpenAPI-3.1-Dokument erzeugen gängige Generatoren bei Bedarf einen typisierten Client für Java, C#, Python, TypeScript oder Go.
Wie finde ich die Pass-Kennung zu einer Seriennummer?
Über GET /passes mit dem Parameter serial. Die Seriennummer ist je Firma eindeutig, es gibt also höchstens einen Treffer. Viele Integrationen lösen die Kennung einmal auf und speichern sie neben der Seriennummer im eigenen System.
Was passiert, wenn eine Anfrage in einen Timeout läuft?
Wiederholen Sie sie mit demselben Idempotency-Key. Wurde die erste Anfrage verarbeitet, bekommen Sie die gespeicherte Antwort zurück statt eines Duplikats. Weicht der Inhalt bei gleichem Schlüssel ab, lehnt die API die Anfrage ab, statt still etwas anderes zu tun.
Kann ich einen Pass über die API löschen?
Nein, und das ist Absicht. Batteriepässe unterliegen der Aufbewahrung, deshalb gibt es in Version 1 keine Lösch-Operation. Das Ende des Lebenszyklus wird als Ereignis gemeldet, etwa Recycling, und der Pass zeigt danach den Endzustand.
Wie viele Pässe kann ich anlegen?
Das Kontingent hängt am Tarif und steht in jeder Antwort von GET /me unter usage. Das Feld enforcement sagt, was beim Überschreiten passiert: hard bedeutet Ablehnung, overage bedeutet Abrechnung je zusätzlichem Pass, contract bedeutet vereinbartes Volumen ohne Sperre.
Fragen zur Anbindung?
Im Erstgespräch klären wir, welche Daten aus welchem System kommen, welche Berechtigungen Ihre Schlüssel brauchen und wie die Serialisierung in Ihre Fertigung passt.