batterypass
Plattform
So funktioniert es Funktionen Vergleich
Branchen
Speicher (BESS) Leichte Verkehrsmittel Industriebatterien Elektrofahrzeuge Zulieferer
Ressourcen
Compliance-Überblick EU-Batterieverordnung Sicherheit und Datenschutz Alle Beiträge Woher die Daten kommen Welche Daten der Pass braucht QR-Code auf der Batterie Wer ist verantwortlich? Glossar Entwickler und API Betriebszustand Änderungen am Produkt
Batterypass
Pflicht-Check Preise Demo: Beispiel-Pass ansehen Blog Über uns Kontakt
Anmelden Kostenlos starten
Entwickler

Batteriepass-Daten an Ihre Systeme anbinden.

REST-API, CSV-Import und -Export, feste Pass-Adressen und alle Datenfelder. Mit einem Testschlüssel probieren Sie alles aus, ohne Daten zu ändern.

100MB je Datei
67Datenfelder in der App
3Formate: CSV, SVG, PNG

Überblick

Vier Objekte und vier Wege für den Datenaustausch. Für den Einstieg reicht eine CSV-Datei, für den Dauerbetrieb gibt es die REST-API.

  1. FirmaIhr Konto mit Nutzern und Paket
  2. ModellStammdaten, einmal je Batteriemodell
  3. PassEine Batterie mit Seriennummer und eigener Adresse
  4. EreignisReparatur, Umnutzung oder Abfall
WegWofürStand
CSV-ImportSeriennummern aus ERP, MES oder Excel übernehmenVerfügbar
CSV-ExportPass-IDs und Adressen zurück in Ihre Systeme holenVerfügbar
Pass-Adresse und QR-CodeEigene Etiketten erzeugen oder Pässe verlinkenVerfügbar
REST-APIModelle und Pässe automatisch anlegen, ohne Upload von HandVerfügbar

CSV-Import

Verfügbar

Der übliche Weg aus dem ERP: Liste exportieren und bei einem Modell hochladen. Für jede neue Seriennummer entsteht ein Pass.

export.csv
Material;Serialnummer;Fertigungsdatum;Charge;Werk;Status
BX-48V;SN-0001;01.03.2027;L2027-03;Essen;frei
BX-48V;SN-0002;01.03.2027;L2027-03;Essen;frei
BX-48V;SN-0003;02.03.2027;L2027-03;Essen;frei
RegelVorgabe
ZeichensatzUTF-8 mit oder ohne BOM. Windows-1252 wird erkannt und umgewandelt.
TrennzeichenSemikolon, Komma oder Tabulator. Maßgeblich ist die erste Zeile.
GrößeHöchstens 100 MB je Datei, auch als Excel-Datei (.xlsx). Dateien ab 1 MB laufen automatisch in Abschnitten.
AufbauEine Batterie je Zeile, keine Zeilenumbrüche innerhalb eines Feldes.
KopfzeileFreiwillig. Mit Kopfzeile dürfen die Spalten beliebig stehen, weitere Spalten werden ignoriert. Ohne Kopfzeile gilt die Reihenfolge der Tabelle unten.
SpalteFeldErkannte SpaltennamenPflichtRegel
1Seriennummerseriennummer, serialnummer, serial, serial number, serialnumber, serial no, sn, serien-nr, seriennr, sernrJaHöchstens 120 Zeichen: Buchstaben, Ziffern, Leerzeichen und - _ . / :
2Herstelldatumherstelldatum, produktionsdatum, fertigungsdatum, manufacturing date, production date, date, datumFreiwillig2027-03-01, 01.03.2027, 1.3.2027, 01/03/2027, 1/3/2027 oder 2027/03/01
3Chargecharge, chargennummer, batch, lot, losFreiwilligHöchstens 120 Zeichen
4Herstellortherstellort, produktionsort, werk, place, plant, manufacturing placeFreiwilligHöchstens 190 Zeichen

Was beim Hochladen passiert

  • Zuerst erscheint eine Vorschau, gespeichert wird noch nichts.
  • Fehlerhafte Zeilen werden mit Zeilennummer gemeldet und übersprungen.
  • Doppelte Seriennummern in der Datei und bereits vorhandene Nummern dieses Modells werden übersprungen.
  • Erst nach Ihrer Bestätigung entstehen die Pässe, in einem einzigen Vorgang. Der Import steht im Audit-Trail.

Datei prüfen

Verfügbar

Prüfen Sie einen Export, bevor Sie sich anmelden. Es gelten dieselben Regeln wie beim Import in der App.

Die Prüfung läuft nur in Ihrem Browser, die Datei wird nicht hochgeladen. Ob eine Nummer im Modell schon existiert, sieht erst die Vorschau in der App.

CSV-Export

Verfügbar

Bei jedem Modell lässt sich die Liste aller Pässe herunterladen, im Format UTF-8 mit BOM und mit Semikolon getrennt. So kommen Pass-IDs und Adressen zurück in ERP, MES oder Etikettendruck. Der Download setzt eine Anmeldung voraus.

paesse_BX-48V.csv
Seriennummer;Pass-ID;Pass-URL;Herstelldatum;Charge;Herstellort;Status
SN-0001;7KM2XQ9RTA;https://app.digitalbatterypass.eu/p/7KM2XQ9RTA;2027-03-01;L2027-03;Essen;Original

Pass-Adresse und QR-Code

Verfügbar

Jeder Pass hat eine feste Adresse. Mehr braucht ein QR-Code, ein Link aus dem Handbuch oder ein Eintrag im ERP nicht.

URL
https://app.digitalbatterypass.eu/p/{PASS-ID}
https://app.digitalbatterypass.eu/p/{PASS-ID}?lang=en
  • Die Pass-ID hat 10 Zeichen und meidet verwechselbare Zeichen wie 0, O, 1, I und L.
  • Der QR-Code enthält nur diese Adresse. Ändern sich die Daten, bleibt er gültig.
  • In der App gibt es den Code je Pass als SVG und PNG sowie Etikettenbögen zum Drucken.
  • Die Pass-Seite zeigt ohne Anmeldung nur die öffentlichen Angaben. Suchmaschinen sollen sie nicht aufnehmen.
  • Mit hinterlegter GTIN gibt es zusätzlich einen GS1 Digital Link.

Eigene Etiketten aus dem Export erzeugen

etiketten.py
# pip install "qrcode[pil]"
import csv
import qrcode

with open("paesse_BX-48V.csv", encoding="utf-8-sig", newline="") as f:
    for row in csv.DictReader(f, delimiter=";"):
        qrcode.make(row["Pass-URL"]).save(f'{row["Pass-ID"]}.png')

Pass als JSON im EU-Format

Dieselbe Adresse liefert Menschen die Seite und Programmen JSON nach dem EU-Schema 1.0.0, ohne Anmeldung und nur mit den öffentlichen Angaben. Fehlen Pflichtangaben, fehlen sie auch im JSON und das Register würde den Pass ablehnen.

cURL
curl -H "Accept: application/json" https://app.digitalbatterypass.eu/p/{PASS-ID}
curl https://app.digitalbatterypass.eu/p/{PASS-ID}?format=json

Datenfelder

Verfügbar

Die App nutzt 67 Felder nach dem offiziellen EU-Datenschema für Batterien, Fassung 1.0.0. Mehrfachfelder senden Sie als Liste, die erlaubten Werte liefert GET /fields. Die Kategorien sind lmt, industrie, ev, sli und geraet.

Allgemeine Angaben13
FeldTechnischer NameTypSichtbar fürPflicht
Sprache der Textecontent_languagevocabÖffentlichFreiwillig
Hersteller (Name)manufacturer_nametextÖffentlichAlle Pass-Kategorien
Handelsnamemanufacturer_trade_nametextÖffentlichFreiwillig
Markemanufacturer_trademarktextÖffentlichFreiwillig
Hersteller (Anschrift)manufacturer_addresstextÖffentlichAlle Pass-Kategorien
Website des Herstellersmanufacturer_websiteurlÖffentlichFreiwillig
E-Mail des Herstellersmanufacturer_emailemailÖffentlichFreiwillig
Produktnummerproduct_numbertextÖffentlichFreiwillig
Herstellungsort (Stadt)manufacturing_placetextÖffentlichFreiwillig
Regionmanufacturing_regiontextÖffentlichFreiwillig
Herstellungslandmanufacturing_countryvocabÖffentlichAlle Pass-Kategorien
Gewichtweight_kgnumber · kgÖffentlichAlle Pass-Kategorien
Kommerzielle Garantiewarranty_monthsinteger · MonateÖffentlichFreiwillig
Materialien & Stoffe8
FeldTechnischer NameTypSichtbar fürPflicht
Batteriechemiechemistrylist · vocabÖffentlichAlle Pass-Kategorien
Gefährliche Stoffehazardous_substanceslistÖffentlichAlle Pass-Kategorien
Kritische Rohstoffecritical_raw_materialslist · vocabÖffentlichAlle Pass-Kategorien
Chemisches Symbol auf dem Etikettchemical_symbollist · vocabÖffentlichFreiwillig
Löschmittelextinguishing_agenttext · langÖffentlichAlle Pass-Kategorien
Zusammensetzung Kathodecomposition_cathodetextBerechtigtes InteresseAlle Pass-Kategorien
Zusammensetzung Anodecomposition_anodetextBerechtigtes InteresseAlle Pass-Kategorien
Zusammensetzung Elektrolytcomposition_electrolytetextBerechtigtes InteresseAlle Pass-Kategorien
Leistung & Haltbarkeit23
FeldTechnischer NameTypSichtbar fürPflicht
Nennkapazitätrated_capacity_ahnumber · AhÖffentlichAlle Pass-Kategorien
Nennspannungnominal_voltage_vnumber · VÖffentlichAlle Pass-Kategorien
Minimale Spannungmin_voltage_vnumber · VÖffentlichAlle Pass-Kategorien
Maximale Spannungmax_voltage_vnumber · VÖffentlichAlle Pass-Kategorien
Spannungsangaben gelten abvoltage_temp_min_cnumber · °CÖffentlichAlle Pass-Kategorien
Spannungsangaben gelten bisvoltage_temp_max_cnumber · °CÖffentlichAlle Pass-Kategorien
Leistung (ursprünglich)rated_power_wnumber · WÖffentlichAlle Pass-Kategorien
Leistungsgrenzepower_limit_wnumber · WÖffentlichAlle Pass-Kategorien
Leistungsgrenze gilt abpower_temp_min_cnumber · °CÖffentlichFreiwillig
Leistungsgrenze gilt bispower_temp_max_cnumber · °CÖffentlichFreiwillig
Prüfung des Temperaturbereichs bei Nichtgebrauchtemp_testtext · langÖffentlichAlle Pass-Kategorien
Temperaturbereich vontemp_min_cnumber · °CÖffentlichAlle Pass-Kategorien
Temperaturbereich bistemp_max_cnumber · °CÖffentlichAlle Pass-Kategorien
Innenwiderstand Zelleinternal_cell_resistance_mohmnumber · mΩÖffentlichAlle Pass-Kategorien
Innenwiderstand Packinternal_pack_resistance_mohmnumber · mΩÖffentlichAlle Pass-Kategorien
Erwartete Lebensdauerexpected_lifetime_cyclesinteger · ZyklenÖffentlichlmt, ev
Referenzprüfung Zyklenlebensdauercycle_life_testtext · langÖffentlichlmt, ev
Schwelle Kapazitätserschöpfungcapacity_threshold_pctnumber · %Öffentlichev
Energieeffizienz zu Beginninitial_rte_pctnumber · %Öffentlichlmt, ev
Energieeffizienz bei halber Zyklenlebensdauerrte_half_life_pctnumber · %Öffentlichlmt, ev
C-Rate beim Laden im Zyklustestcycle_charge_cratenumber · 1/hÖffentlichlmt, ev
C-Rate beim Entladen im Zyklustestcycle_discharge_cratenumber · 1/hÖffentlichFreiwillig
Nennenergierated_energy_kwhnumber · kWhÖffentlichFreiwillig
CO₂ & Rezyklat6
FeldTechnischer NameTypSichtbar fürPflicht
Anteil erneuerbarer Inhalterenewable_content_pctnumber · %ÖffentlichAlle Pass-Kategorien
CO₂-Fußabdruckcarbon_footprintnumber · kg CO₂e/kWhÖffentlichPflicht greift später
Rezyklatanteil Kobaltrecycled_cobalt_pctnumber · %ÖffentlichPflicht greift später
Rezyklatanteil Lithiumrecycled_lithium_pctnumber · %ÖffentlichPflicht greift später
Rezyklatanteil Nickelrecycled_nickel_pctnumber · %ÖffentlichPflicht greift später
Rezyklatanteil Bleirecycled_lead_pctnumber · %ÖffentlichPflicht greift später
Konformität & Kennzeichnung3
FeldTechnischer NameTypSichtbar fürPflicht
Symbol für getrennte Sammlung vorhandenseparate_collection_symbolbooleanÖffentlichAlle Pass-Kategorien
EU-Konformitätserklärung (Link)doc_urlurlÖffentlichAlle Pass-Kategorien
Bericht Sorgfaltspflichten (Link)due_diligence_urlurlÖffentlichPflicht greift später
Abfallvermeidung und Rücknahme10
FeldTechnischer NameTypSichtbar fürPflicht
Rolle der Nutzer bei der Abfallvermeidungend_user_preventiontext · langÖffentlichAlle Pass-Kategorien
Rolle der Nutzer bei der getrennten Sammlungend_user_collectiontext · langÖffentlichAlle Pass-Kategorien
Stellen für die getrennte Sammlungcollection_pointstext · langÖffentlichAlle Pass-Kategorien
Rücknahmestellentake_back_pointstext · langÖffentlichAlle Pass-Kategorien
Betriebe für die Vorbereitung zur Wiederverwendungreuse_facilitiestext · langÖffentlichAlle Pass-Kategorien
Betriebe für die Vorbereitung zur Umnutzungrepurposing_facilitiestext · langÖffentlichAlle Pass-Kategorien
Betriebe für die Behandlung von Altbatterientreatment_facilitiestext · langÖffentlichAlle Pass-Kategorien
Sicherheitshinweise für Altbatterienwaste_safetytext · langÖffentlichAlle Pass-Kategorien
Bedeutung der Symbole auf dem Etikettlabel_symbols_meaningtext · langÖffentlichAlle Pass-Kategorien
Auswirkungen der Stoffe auf Umwelt und Gesundheitsubstances_impacttext · langÖffentlichAlle Pass-Kategorien
Demontage, Reparatur & Ersatzteile3
FeldTechnischer NameTypSichtbar fürPflicht
Ersatzteile und Austausch (Link)spare_parts_urlurlBerechtigtes InteresseAlle Pass-Kategorien
Demontage-Anleitung (Link)dismantling_urlurlBerechtigtes InteresseAlle Pass-Kategorien
Sicherheitsmaßnahmen (Link)safety_urlurlBerechtigtes InteresseAlle Pass-Kategorien
Prüfberichte1
FeldTechnischer NameTypSichtbar fürPflicht
Prüfberichte zur Konformität (Link)compliance_report_urlurlBehörden und PrüfstellenAlle Pass-Kategorien

REST-API

Verfügbar

Legen Sie Modelle und Pässe direkt aus ERP, MES oder BMS an und melden Sie Ereignisse. JSON über HTTPS, Anmeldung per Schlüssel. Basisadresse: https://app.digitalbatterypass.eu/api/v1

Im Echtbetrieb gehört die REST-API zum Paket Enterprise. Mit Pro senden Sie nur Messwerte aus dem BMS. Testschlüssel gibt es in jedem Paket.

In drei Schritten starten

  1. Melden Sie sich als Administrator an und öffnen Sie Einstellungen, dann API-Schlüssel.
  2. Erstellen Sie einen Testschlüssel. Er wird nur einmal angezeigt, bewahren Sie ihn wie ein Passwort auf.
  3. Prüfen Sie die Verbindung mit GET /me. Antwortet die API, stimmen Schlüssel und Netzwerkweg.
cURL
export BATTERYPASS_KEY="bp_test_..."

curl -s https://app.digitalbatterypass.eu/api/v1/me \
  -H "Authorization: Bearer $BATTERYPASS_KEY"

Ein Schlüssel, eine Firma

Der Schlüssel legt fest, welche Daten erreichbar sind. Sie erzeugen ihn in der App, er wird nur einmal angezeigt.

Testschlüssel speichern nichts

Ein Testschlüssel prüft jede Anfrage wie im Echtbetrieb, ändert aber keine Daten und verbraucht kein Kontingent.

Sicher wiederholen

Mit demselben Idempotency-Key entsteht auch nach einem Abbruch kein zweiter Datensatz. Die Belegnummer aus dem ERP eignet sich dafür gut.

Pässe werden nicht gelöscht

Die API kennt kein DELETE für Pässe. Das Lebensende einer Batterie wird als Ereignis gemeldet.

Testschlüssel antworten mit Status 200 und dry_run: true. Sie lesen echte Daten, ändern aber nichts.

Endpunkte

MethodePfadWofür
GET/meVerbindungstest: Firma, Paket, Rechte und freies Kontingent
GET/fieldsFeldkatalog mit Pflicht je Kategorie
GET/modelsModelle auflisten, auch nach Modellkennung
POST/modelsModell anlegen
GET/models/{id}Ein Modell mit Daten und fehlenden Pflichtfeldern lesen
PATCH/models/{id}Stammdaten ändern
GET/passportsPässe auflisten, auch nach Seriennummer oder Änderungsdatum
POST/passports/batchBis zu 1.000 Pässe in einem Aufruf anlegen
GET/passports/{id}Einen Pass mit Adresse und Status lesen
GET/passports/{id}/eventsEreignisse eines Passes lesen
POST/passports/{id}/eventsEreignis melden, zum Beispiel Reparatur oder Abfall
POST/models/validateEntwurf prüfen, nichts speichern
POST/passportsEinen Pass anlegen
PATCH/passports/{id}Datum, Charge oder Ort ändern
GET/passports/{id}/componentsKomponenten lesen
POST/passports/{id}/componentsKomponente einbauen
PATCH/passports/{id}/components/{cid}Komponente ändern oder ausbauen
POST/passports/{id}/components/{cid}/replaceKomponente tauschen
GET/passports/{id}/telemetryMessreihe lesen
POST/passports/{id}/telemetryMessungen melden
GET/certificatesNachweise auflisten
GET/certificates/{id}Nachweis mit Download-Link
GET/suppliersLieferanten auflisten
GET/supplier-requestsDatenanfragen auflisten
POST/supplier-requestsLieferanten anfragen
GET/supplier-requests/{id}Anfrage mit gelieferten Werten lesen
POST/supplier-requests/{id}/acceptGelieferte Werte ins Modell übernehmen
GET/auditAudit-Trail lesen

Beispiel: Pässe aus dem ERP anlegen

curl -X POST https://app.digitalbatterypass.eu/api/v1/passports/batch \
  -H "Authorization: Bearer $BATTERYPASS_KEY" \
  -H "Idempotency-Key: erp-4711" \
  -H "Content-Type: application/json" \
  -d '{
  "model_code": "BX-48V",
  "on_conflict": "skip",
  "items": [
    { "serial": "SN-0001", "manufactured_at": "2027-03-01", "batch": "L2027-03" },
    { "serial": "SN-0002", "manufactured_at": "2027-03-01", "batch": "L2027-03" }
  ]
}'

Antwort

201 Created
HTTP/1.1 201 Created
X-Request-Id: req_4f7a91c2d03e8b56

{
  "created": 1,
  "skipped": 1,
  "skipped_serials": ["SN-0002"],
  "items": [
    {
      "id": "7KM2XQ9RTA",
      "serial": "SN-0001",
      "status": "original",
      "url": "https://app.digitalbatterypass.eu/p/7KM2XQ9RTA"
    }
  ]
}

Fehler

422
HTTP/1.1 422 Unprocessable Entity

{
  "error": {
    "code": "invalid_serial",
    "message": "Serial number is missing or contains invalid characters.",
    "field": "items[3].serial",
    "request_id": "req_a03c5e17b92d4f68"
  }
}
HTTPCodeBedeutung
400invalid_requestAnfrage ist kein gültiges JSON oder enthält unbekannte Felder
401unauthorizedSchlüssel fehlt oder ist ungültig
403insufficient_scopeDem Schlüssel fehlt das nötige Recht
403plan_requiredLive-Schlüssel brauchen das Paket Enterprise; mit Pro nur für BMS-Messwerte
403email_not_verifiedDie E-Mail-Adresse der Firma ist noch nicht bestätigt
403quota_exceededDas Kontingent des Pakets ist ausgeschöpft
404not_foundObjekt gibt es nicht oder es gehört einer anderen Firma
409duplicate_serialSeriennummer existiert bereits in diesem Modell (bei on_conflict: fail)
409duplicate_modelDie Modellkennung ist schon vergeben
409idempotency_conflictDer Idempotency-Key wurde für eine andere Anfrage benutzt
413payload_too_largeDie Anfrage ist größer als 2 MB
422invalid_serialEine Seriennummer ist ungültig, das Feld steht in der Antwort. Es wird nichts gespeichert.
422invalid_dateEin Datum entspricht nicht dem Format JJJJ-MM-TT
422out_of_rangeEin Messwert liegt außerhalb des erlaubten Bereichs
422invalid_gtinDie GTIN hat eine falsche Länge oder Prüfziffer
422validation_failedEin anderer Wert verletzt die Regeln
429rate_limitedZu viele Anfragen, nach Retry-After erneut senden
500internal_errorFehler bei uns. Mit demselben Idempotency-Key sicher wiederholbar.

Grenzen

Anfragen je Minute und SchlüsselLive 300, Test 60
Pässe je Aufruf1.000
Größe einer Anfrage2 MB
Einträge je Listenseite100, höchstens 500
Aktive Schlüssel je Firma10
Live-SchlüsselEnterprise mit allen Rechten, Pro nur mit den Rechten für BMS-Messwerte. Testschlüssel gibt es in jedem Paket.

Planen Sie mehr als 100.000 Pässe im Jahr? Stimmen Sie das bitte vorab mit uns ab.

Berechtigungen

Jeder Schlüssel bekommt nur die Rechte, die das System braucht. Fehlt eines, antwortet die API mit 403 und insufficient_scope. In der App wählen Sie eine Vorlage: Alle Rechte, ERP, BMS oder Nur lesen.

RechtErlaubt
models:readModelle lesen und Entwürfe prüfen
models:writeModelle anlegen und ändern
passports:readPässe, Ereignisse und Komponenten lesen
passports:writePässe anlegen und ändern, Ereignisse melden, Komponenten einbauen und tauschen
telemetry:read telemetry:writeMesswerte lesen und melden
certificates:readNachweise lesen und herunterladen
suppliers:read suppliers:writeLieferanten und Datenanfragen lesen, Anfragen senden und übernehmen
audit:readAudit-Trail lesen

Anfragen und Antworten

Listen kommen seitenweise mit data, has_more und next_cursor. Den Wert von next_cursor geben Sie als cursor mit. Unbekannte Felder werden abgelehnt, damit Tippfehler sofort auffallen. Bei PATCH bleibt ein fehlendes Feld unverändert, null leert es.

KopfzeileBedeutung
Idempotency-KeyWiederholung ohne zweiten Datensatz, 7 Tage gültig. Gut geeignet ist die Belegnummer aus dem ERP.
X-Batterypass-Dry-Run: trueAuch ein Live-Schlüssel prüft diese Anfrage nur und speichert nichts.
X-Request-IdKennung des Aufrufs, auch in Fehlern und im Protokoll der App
X-RateLimit-Limit X-RateLimit-RemainingKontingent der laufenden Minute
Idempotent-Replayedtrue, wenn eine gespeicherte Antwort wiederholt wurde

SDK und API-Konsole

Verfügbar

Zwei schlanke Clients ohne Abhängigkeiten: Sie wiederholen Anfragen sicher, blättern selbst durch Listen und teilen große Mengen in Aufrufe zu je 1.000 Pässen. Beide sind einzelne Dateien zum Kopieren in Ihr Projekt. Die API-Konsole finden Sie in der App unter Einstellungen, API-Schlüssel. Die Bibliotheken gehören zum Paket Enterprise.

from batterypass import Batterypass

bp = Batterypass("bp_test_...")
print(bp.me()["organization"]["plan"])

items = [{"serial": f"SN-{i:06}"} for i in range(5000)]
print(bp.create_passports_all("BX-48V", items))

for passport in bp.list_all("/passports", model_code="BX-48V"):
    print(passport["serial"], passport["url"])

Komponenten

Verfügbar

Halten Sie fest, welche Module, Zellen oder BMS in einer Batterie verbaut sind. Eine Seriennummer kann je Pass nur einmal gleichzeitig verbaut sein. Beim Tausch bleibt das alte Teil mit Ausbaudatum erhalten.

cURL
curl -X POST https://app.digitalbatterypass.eu/api/v1/passports/7KM2XQ9RTA/components \
  -H "Authorization: Bearer $BATTERYPASS_KEY" -H "Content-Type: application/json" \
  -d '{"kind": "module", "label": "Modul 1", "serial": "M-0001", "supplier": "Zellwerk GmbH"}'

curl -X POST https://app.digitalbatterypass.eu/api/v1/passports/7KM2XQ9RTA/components/12/replace \
  -H "Authorization: Bearer $BATTERYPASS_KEY" -H "Content-Type: application/json" \
  -d '{"serial": "M-0002", "note": "Modul nach Defekt getauscht"}'

Erlaubte Arten sind pack, rack, module, cell, bms und other.

Messwerte

Verfügbar

Melden Sie Daten aus dem BMS, einzeln oder bis zu 1.000 Messungen mit items. Lesen lässt sich die Reihe mit since und until. Messwerte gibt es ab dem Paket Pro. Sie erscheinen in der App und für Berechtigte, nicht auf der öffentlichen Pass-Seite.

cURL
curl -X POST https://app.digitalbatterypass.eu/api/v1/passports/7KM2XQ9RTA/telemetry \
  -H "Authorization: Bearer $BATTERYPASS_KEY" -H "Content-Type: application/json" \
  -d '{"recorded_at": "2027-03-01T10:00:00Z", "soh_pct": 94.5, "cycle_count": 120}'
FeldBereich
recorded_atISO 8601
soh_pct0–100
soc_pct0–100
capacity_kwh≥ 0
remaining_capacity_ah≥ 0
internal_resistance_mohm≥ 0
cycle_count≥ 0, integer
temp_min_c temp_max_c≥ −273
energy_throughput_kwh≥ 0
negative_eventdeep_discharge, overheat, accident
notemax. 500

Nachweise

Verfügbar

Prüfberichte, Konformitätserklärungen und ähnliche Dokumente laden Sie in der App beim Modell hoch: PDF, PNG oder JPG bis 10 MB. Über die API lesen Sie die Liste und holen einen Download-Link, der 15 Minuten gilt. Jede Datei hat eine SHA-256-Prüfsumme.

cURL
curl -s "https://app.digitalbatterypass.eu/api/v1/certificates?model_code=BX-48V" -H "Authorization: Bearer $BATTERYPASS_KEY"
curl -s https://app.digitalbatterypass.eu/api/v1/certificates/42 -H "Authorization: Bearer $BATTERYPASS_KEY"

Lieferanten und Datenanfragen

Verfügbar

Fragen Sie Werte bei Zulieferern an. Sie erhalten eine E-Mail mit einem 30 Tage gültigen Link und tragen nur die angefragten Felder ein, ohne Konto. Gelieferte Werte landen erst nach Ihrer Freigabe im Modell. Verfügbar ab dem Paket Starter, höchstens 20 Anfragen pro Stunde.

cURL
curl -X POST https://app.digitalbatterypass.eu/api/v1/supplier-requests \
  -H "Authorization: Bearer $BATTERYPASS_KEY" -H "Content-Type: application/json" \
  -d '{"model_code": "BX-48V", "supplier_name": "Zellwerk GmbH", "supplier_email": "daten@zellwerk.example",
       "fields": ["chemistry", "composition_cathode"], "message": "Bitte bis Monatsende"}'

curl -s "https://app.digitalbatterypass.eu/api/v1/supplier-requests?status=submitted" -H "Authorization: Bearer $BATTERYPASS_KEY"
curl -X POST https://app.digitalbatterypass.eu/api/v1/supplier-requests/7/accept -H "Authorization: Bearer $BATTERYPASS_KEY"

GS1 Digital Link

Verfügbar

Hinterlegen Sie beim Modell eine GTIN mit gültiger Prüfziffer. Dann führt die GS1-Adresse aus GTIN und Seriennummer auf die Pass-Seite und steht in der API als gs1_link. Ihre QR-Codes enthalten weiter die feste Pass-Adresse, Sie können aber eigene Codes aus dem GS1-Link erzeugen. Die GTIN selbst erhalten Sie von GS1.

URL
https://app.digitalbatterypass.eu/01/{GTIN}/21/{SERIENNUMMER}
https://app.digitalbatterypass.eu/01/04012345678901/21/SN-0001

Audit-Trail

Verfügbar

GET /audit liefert alle protokollierten Änderungen der Firma, seitenweise und optional ab einem Zeitpunkt mit since. Änderungen über die API tragen den Namen des Schlüssels. In der App sehen Administratoren außerdem die letzten Aufrufe je Schlüssel.

EU-Register

Test im echten Register offen

Die App erstellt das Schlüsselpaar für Ihr Service-Konto. Der private Schlüssel bleibt verschlüsselt bei uns. Der öffentliche Schlüssel kommt ins Register. Ihre Firma muss dort vorher mit qualifiziertem Siegel verifiziert sein.

Eingereicht werden nur freigegebene, vollständige Pässe, in Stapeln zu höchstens 100. Den Status zeigen App und API. Das Register ruft die Pass-Adresse als JSON ab; mit seinem Zugriffstoken bekommt es auch die geschützten Sichten. Ungültige Tokens werden abgelehnt.

Gebaut nach den technischen Unterlagen der Kommission vom 30.10.2026 und gegen einen eigenen Prüfserver getestet. Der Test im echten Register steht noch aus.

cURL
curl -X POST https://app.digitalbatterypass.eu/api/v1/registry/submissions \
  -H "Authorization: Bearer $BATTERYPASS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model_code":"LMT-48V"}'

curl https://app.digitalbatterypass.eu/api/v1/registry/submissions \
  -H "Authorization: Bearer $BATTERYPASS_KEY"

Freigabe und Beweise

Verfügbar

Mit publish: false entstehen Entwürfe. Sie sind öffentlich nicht erreichbar, bis Sie sie freigeben. Jede Änderung an den Stammdaten wird zur neuen Version und hängt per Hash an der vorherigen. Unter /p/ID/proof kann jeder den öffentlichen Stand nachrechnen.

cURL
POST /api/v1/passports/batch        {"model_code":"LMT-48V","publish":false,"items":[...]}
POST /api/v1/passports/PASS-ID/publish
GET  /api/v1/models/42/versions
GET  /p/PASS-ID/proof

Versionen

Die Hauptversion steht im Pfad. Innerhalb von v1 kommen nur Felder und Endpunkte hinzu. Geplant, aber noch nicht vorhanden: Webhooks.

VersionDatumÄnderung
1.2.02026-11-06Register, Freigabe, Versionen, weitere Messwerte für die geschützten EU-Sichten
1.1.02026-11-06Komponenten, Messwerte, Nachweise, Lieferanten, Audit, Einzelpass, GS1, feine Rechte, Dry-Run-Kopfzeile, OpenAPI und Health-Endpunkt
1.0.02026-11-06Modelle, Pässe, Ereignisse, Schlüssel, Testmodus, Idempotenz

Häufige Fragen

Kurze Antworten für die Anbindung.

Wie teste ich, ohne echte Pässe zu erzeugen?

Mit einem Testschlüssel. Er prüft alles wie im Echtbetrieb und speichert nichts.

Was tun bei einem Timeout?

Dieselbe Anfrage mit demselben Idempotency-Key erneut senden. Es entsteht kein zweiter Datensatz.

Wie finde ich den Pass zu einer Seriennummer?

Mit GET /passports?serial=… und bei Bedarf model_code.

Kann ich Pässe über die API löschen?

Nein. Das Lebensende melden Sie als Ereignis mit dem Status waste.

Wie viele Pässe sind möglich?

1.000 je Aufruf, 300 Aufrufe je Minute. Grenzen setzen außerdem Ihr Paket und unser Hosting. Planen Sie mehr als 100.000 Pässe im Jahr, stimmen Sie das bitte vorab mit uns ab.

Probieren Sie den Import mit Ihrer Datei.

Der Pilot ist kostenlos und reicht für ein Modell und 25 Pässe im Jahr.