batterypass
Plateforme
Comment ça marche Fonctionnalités Comparatif
Secteurs
Stockage (BESS) Véhicules légers Batteries industrielles Véhicules électriques Fournisseurs
Ressources
Vue d’ensemble de la conformité Règlement européen sur les batteries Sécurité et confidentialité Tous les articles D'où viennent les données Quelles données il faut au passeport Code QR sur la batterie Qui est responsable ? Glossaire Développeurs et API État du service Évolutions du produit
Batterypass
Test des obligations Tarifs Démo : voir un passeport d’exemple Blog À propos Contact
Connexion Démarrer gratuitement
Développeurs

Connecter les données du passeport à vos systèmes.

API REST, import et export CSV, adresses fixes et tous les champs de données. Avec une clé de test, vous essayez tout sans modifier de données.

100Mo par fichier
67champs de données dans l’application
3formats : CSV, SVG, PNG

Vue d’ensemble

Quatre objets et quatre voies d’échange de données. Un fichier CSV suffit pour commencer ; l’API REST sert à l’exploitation courante.

  1. EntrepriseVotre compte avec utilisateurs et formule
  2. ModèleDonnées de base, une fois par modèle
  3. PasseportUne batterie avec numéro de série et adresse propre
  4. ÉvénementRéparation, réaffectation ou déchet
VoiePour quoiÉtat
Import CSVReprendre les numéros de série de l’ERP, du MES ou d’ExcelDisponible
Export CSVRamener les identifiants et adresses dans vos systèmesDisponible
Adresse du passeport et code QRCréer vos étiquettes ou renvoyer vers les passeportsDisponible
API RESTCréer modèles et passeports automatiquement, sans téléversement manuelDisponible

Import CSV

Disponible

La voie habituelle depuis l’ERP : exporter une liste et la téléverser dans un modèle. Chaque nouveau numéro de série reçoit un passeport.

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
RègleSpécification
EncodageUTF-8 avec ou sans BOM. Windows-1252 est détecté et converti.
SéparateurPoint-virgule, virgule ou tabulation. La première ligne fait foi.
Taille100 Mo maximum par fichier, également en Excel (.xlsx). Les fichiers à partir de 1 Mo sont traités par sections.
StructureUne batterie par ligne, sans saut de ligne dans un champ.
En-têteFacultatif. Avec un en-tête, les colonnes peuvent être dans n’importe quel ordre et les colonnes en plus sont ignorées. Sans en-tête, l’ordre du tableau ci-dessous s’applique.
ColonneChampNoms de colonnes reconnusObligatoireRègle
1Numéro de sérieseriennummer, serialnummer, serial, serial number, serialnumber, serial no, sn, serien-nr, seriennr, sernrOui120 caractères maximum : lettres, chiffres, espaces et - _ . / :
2Date de fabricationherstelldatum, produktionsdatum, fertigungsdatum, manufacturing date, production date, date, datumFacultatif2027-03-01, 01.03.2027, 1.3.2027, 01/03/2027, 1/3/2027 ou 2027/03/01
3Lotcharge, chargennummer, batch, lot, losFacultatif120 caractères maximum
4Lieu de fabricationherstellort, produktionsort, werk, place, plant, manufacturing placeFacultatif190 caractères maximum

Ce qui se passe au téléversement

  • Un aperçu s’affiche d’abord ; rien n’est encore enregistré.
  • Les lignes erronées sont signalées avec leur numéro et ignorées.
  • Les doublons du fichier et les numéros déjà présents dans ce modèle sont ignorés.
  • Les passeports ne sont créés qu’après votre confirmation, en une seule opération. L’import figure dans le journal d’audit.

Vérifier un fichier

Disponible

Vérifiez un export avant de vous connecter. Les règles sont les mêmes que pour l’import dans l’application.

La vérification se fait uniquement dans votre navigateur ; le fichier n’est pas téléversé. Seul l’aperçu de l’application indique si un numéro existe déjà dans le modèle.

Export CSV

Disponible

Pour chaque modèle, la liste de tous les passeports se télécharge en UTF-8 avec BOM, séparée par des points-virgules. Identifiants et adresses reviennent ainsi dans l’ERP, le MES ou l’impression d’étiquettes. Le téléchargement nécessite une connexion.

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

Adresse du passeport et code QR

Disponible

Chaque passeport a une adresse fixe. Un code QR, un lien dans un manuel ou une entrée d’ERP n’ont besoin de rien d’autre.

URL
https://app.digitalbatterypass.eu/p/{PASS-ID}
https://app.digitalbatterypass.eu/p/{PASS-ID}?lang=en
  • L’identifiant comporte 10 caractères et évite ceux qui prêtent à confusion comme 0, O, 1, I et L.
  • Le code QR ne contient que cette adresse. Si les données changent, il reste valable.
  • Dans l’application, le code est disponible par passeport en SVG et PNG, ainsi que des planches d’étiquettes à imprimer.
  • Sans connexion, la page du passeport n’affiche que les données publiques. Les moteurs de recherche sont priés de ne pas l’indexer.
  • Avec un GTIN, il existe aussi un lien GS1 Digital Link.

Créer vos étiquettes à partir de l’export

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')

Passeport en JSON au format UE

La même adresse fournit la page aux personnes et le JSON selon le schéma UE 1.0.0 aux programmes, sans connexion et avec les seules données publiques. Si des données obligatoires manquent, elles manquent aussi dans le JSON et le registre refuserait le passeport.

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

Champs de données

Disponible

L’application utilise 67 champs selon le schéma officiel UE pour les batteries, version 1.0.0. Envoyez les champs multiples sous forme de liste ; GET /fields fournit les valeurs autorisées. Les catégories sont lmt, industrie, ev, sli et geraet.

Données générales13
ChampNom techniqueTypeVisible pourObligatoire
Langue des textescontent_languagevocabPublicFacultatif
Fabricant (nom)manufacturer_nametextPublicToutes les catégories avec passeport
Nom commercialmanufacturer_trade_nametextPublicFacultatif
Marquemanufacturer_trademarktextPublicFacultatif
Fabricant (adresse)manufacturer_addresstextPublicToutes les catégories avec passeport
Site web du fabricantmanufacturer_websiteurlPublicFacultatif
E-mail du fabricantmanufacturer_emailemailPublicFacultatif
Numéro de produitproduct_numbertextPublicFacultatif
Lieu de fabrication (ville)manufacturing_placetextPublicFacultatif
Régionmanufacturing_regiontextPublicFacultatif
Pays de fabricationmanufacturing_countryvocabPublicToutes les catégories avec passeport
Poidsweight_kgnumber · kgPublicToutes les catégories avec passeport
Garantie commercialewarranty_monthsinteger · MonatePublicFacultatif
Matériaux et substances8
ChampNom techniqueTypeVisible pourObligatoire
Chimie de la batteriechemistrylist · vocabPublicToutes les catégories avec passeport
Substances dangereuseshazardous_substanceslistPublicToutes les catégories avec passeport
Matières premières critiquescritical_raw_materialslist · vocabPublicToutes les catégories avec passeport
Symbole chimique sur l’étiquettechemical_symbollist · vocabPublicFacultatif
Agent d’extinctionextinguishing_agenttext · langPublicToutes les catégories avec passeport
Composition de la cathodecomposition_cathodetextIntérêt légitimeToutes les catégories avec passeport
Composition de l'anodecomposition_anodetextIntérêt légitimeToutes les catégories avec passeport
Composition de l'électrolytecomposition_electrolytetextIntérêt légitimeToutes les catégories avec passeport
Performance et durabilité23
ChampNom techniqueTypeVisible pourObligatoire
Capacité nominalerated_capacity_ahnumber · AhPublicToutes les catégories avec passeport
Tension nominalenominal_voltage_vnumber · VPublicToutes les catégories avec passeport
Tension minimalemin_voltage_vnumber · VPublicToutes les catégories avec passeport
Tension maximalemax_voltage_vnumber · VPublicToutes les catégories avec passeport
Valeurs de tension valables à partir devoltage_temp_min_cnumber · °CPublicToutes les catégories avec passeport
Valeurs de tension valables jusqu’àvoltage_temp_max_cnumber · °CPublicToutes les catégories avec passeport
Puissance (d'origine)rated_power_wnumber · WPublicToutes les catégories avec passeport
Limite de puissancepower_limit_wnumber · WPublicToutes les catégories avec passeport
Limite de puissance valable à partir depower_temp_min_cnumber · °CPublicFacultatif
Limite de puissance valable jusqu’àpower_temp_max_cnumber · °CPublicFacultatif
Essai de la plage de température hors utilisationtemp_testtext · langPublicToutes les catégories avec passeport
Plage de température detemp_min_cnumber · °CPublicToutes les catégories avec passeport
Plage de température àtemp_max_cnumber · °CPublicToutes les catégories avec passeport
Résistance interne de la celluleinternal_cell_resistance_mohmnumber · mΩPublicToutes les catégories avec passeport
Résistance interne du packinternal_pack_resistance_mohmnumber · mΩPublicToutes les catégories avec passeport
Durée de vie prévueexpected_lifetime_cyclesinteger · ZyklenPubliclmt, ev
Essai de référence de la durée de vie en cyclescycle_life_testtext · langPubliclmt, ev
Seuil d’épuisement de capacitécapacity_threshold_pctnumber · %Publicev
Rendement énergétique initialinitial_rte_pctnumber · %Publiclmt, ev
Rendement à mi-durée de vierte_half_life_pctnumber · %Publiclmt, ev
Régime C de charge de l’essaicycle_charge_cratenumber · 1/hPubliclmt, ev
Régime C de décharge de l’essaicycle_discharge_cratenumber · 1/hPublicFacultatif
Énergie nominalerated_energy_kwhnumber · kWhPublicFacultatif
Empreinte carbone et contenu recyclé6
ChampNom techniqueTypeVisible pourObligatoire
Part de contenu renouvelablerenewable_content_pctnumber · %PublicToutes les catégories avec passeport
Empreinte carbonecarbon_footprintnumber · kg CO₂e/kWhPublicObligation ultérieure
Part de cobalt recyclérecycled_cobalt_pctnumber · %PublicObligation ultérieure
Part de lithium recyclérecycled_lithium_pctnumber · %PublicObligation ultérieure
Part de nickel recyclérecycled_nickel_pctnumber · %PublicObligation ultérieure
Part de plomb recyclérecycled_lead_pctnumber · %PublicObligation ultérieure
Conformité et étiquetage3
ChampNom techniqueTypeVisible pourObligatoire
Symbole de collecte séparée présentseparate_collection_symbolbooleanPublicToutes les catégories avec passeport
Déclaration UE de conformité (lien)doc_urlurlPublicToutes les catégories avec passeport
Rapport sur le devoir de diligence (lien)due_diligence_urlurlPublicObligation ultérieure
Prévention des déchets et reprise10
ChampNom techniqueTypeVisible pourObligatoire
Rôle des utilisateurs dans la prévention des déchetsend_user_preventiontext · langPublicToutes les catégories avec passeport
Rôle des utilisateurs dans la collecte séparéeend_user_collectiontext · langPublicToutes les catégories avec passeport
Points de collecte séparéecollection_pointstext · langPublicToutes les catégories avec passeport
Points de reprisetake_back_pointstext · langPublicToutes les catégories avec passeport
Installations de préparation au réemploireuse_facilitiestext · langPublicToutes les catégories avec passeport
Installations de préparation à la réaffectationrepurposing_facilitiestext · langPublicToutes les catégories avec passeport
Installations de traitement des batteries usagéestreatment_facilitiestext · langPublicToutes les catégories avec passeport
Consignes de sécurité pour les batteries usagéeswaste_safetytext · langPublicToutes les catégories avec passeport
Signification des symboles de l’étiquettelabel_symbols_meaningtext · langPublicToutes les catégories avec passeport
Effets des substances sur l’environnement et la santésubstances_impacttext · langPublicToutes les catégories avec passeport
Démontage, réparation et pièces détachées3
ChampNom techniqueTypeVisible pourObligatoire
Pièces de rechange et remplacement (lien)spare_parts_urlurlIntérêt légitimeToutes les catégories avec passeport
Instructions de démontage (lien)dismantling_urlurlIntérêt légitimeToutes les catégories avec passeport
Mesures de sécurité (lien)safety_urlurlIntérêt légitimeToutes les catégories avec passeport
Rapports d'essai1
ChampNom techniqueTypeVisible pourObligatoire
Rapports d’essai de conformité (lien)compliance_report_urlurlAutorités et organismes de contrôleToutes les catégories avec passeport

API REST

Disponible

Créez modèles et passeports directement depuis l’ERP, le MES ou le BMS et signalez des événements. JSON sur HTTPS, authentification par clé. Adresse de base : https://app.digitalbatterypass.eu/api/v1

En production, l’API REST fait partie de l’offre Enterprise. Avec Pro, vous n’envoyez que les mesures BMS. Les clés de test sont disponibles dans toutes les offres.

Démarrer en trois étapes

  1. Connectez-vous en tant qu’administrateur et ouvrez Paramètres, puis Clés API.
  2. Créez une clé de test. Elle ne s’affiche qu’une fois ; conservez-la comme un mot de passe.
  3. Vérifiez la connexion avec GET /me. Si l’API répond, la clé et le chemin réseau sont corrects.
cURL
export BATTERYPASS_KEY="bp_test_..."

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

Une clé, une entreprise

La clé détermine les données accessibles. Vous la créez dans l’application et elle ne s’affiche qu’une fois.

Les clés de test n’enregistrent rien

Une clé de test vérifie chaque requête comme en production, sans modifier de données ni consommer de quota.

Répétition sans risque

Avec la même clé d’idempotence, aucun second enregistrement n’est créé, même après une interruption. Le numéro de pièce de l’ERP convient bien.

Les passeports ne sont pas supprimés

L’API n’a pas de DELETE pour les passeports. La fin de vie d’une batterie est signalée comme événement.

Les clés de test répondent avec le statut 200 et dry_run: true. Elles lisent les vraies données sans rien modifier.

Points de terminaison

MéthodeCheminPour quoi
GET/meTest de connexion : entreprise, formule, droits et quota restant
GET/fieldsCatalogue des champs avec obligations par catégorie
GET/modelsLister les modèles, aussi par code
POST/modelsCréer un modèle
GET/models/{id}Lire un modèle avec ses données et les champs obligatoires manquants
PATCH/models/{id}Modifier les données de base
GET/passportsLister les passeports, aussi par numéro de série ou date de modification
POST/passports/batchCréer jusqu’à 1 000 passeports en un appel
GET/passports/{id}Lire un passeport avec adresse et statut
GET/passports/{id}/eventsLire les événements d’un passeport
POST/passports/{id}/eventsSignaler un événement, p. ex. réparation ou déchet
POST/models/validateVérifier un brouillon sans rien enregistrer
POST/passportsCréer un passeport
PATCH/passports/{id}Modifier la date, le lot ou le lieu
GET/passports/{id}/componentsLire les composants
POST/passports/{id}/componentsInstaller un composant
PATCH/passports/{id}/components/{cid}Modifier ou retirer un composant
POST/passports/{id}/components/{cid}/replaceRemplacer un composant
GET/passports/{id}/telemetryLire la série de mesures
POST/passports/{id}/telemetrySignaler des mesures
GET/certificatesLister les justificatifs
GET/certificates/{id}Justificatif avec lien de téléchargement
GET/suppliersLister les fournisseurs
GET/supplier-requestsLister les demandes
POST/supplier-requestsEnvoyer une demande
GET/supplier-requests/{id}Lire une demande avec les valeurs
POST/supplier-requests/{id}/acceptReprendre les valeurs dans le modèle
GET/auditLire le journal d’audit

Exemple : créer des passeports depuis l’ERP

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" }
  ]
}'

Réponse

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"
    }
  ]
}

Erreurs

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"
  }
}
HTTPCodeSignification
400invalid_requestLa requête n’est pas un JSON valide ou contient des champs inconnus
401unauthorizedClé manquante ou non valide
403insufficient_scopeIl manque à la clé le droit requis
403plan_requiredLes clés live nécessitent l’offre Enterprise ; avec Pro uniquement pour les mesures BMS
403email_not_verifiedL’adresse e-mail de l’entreprise n’est pas encore confirmée
403quota_exceededLe quota de la formule est épuisé
404not_foundL’objet n’existe pas ou appartient à une autre entreprise
409duplicate_serialLe numéro de série existe déjà dans ce modèle (avec on_conflict: fail)
409duplicate_modelLe code du modèle est déjà pris
409idempotency_conflictLa clé d’idempotence a servi à une autre requête
413payload_too_largeLa requête dépasse 2 Mo
422invalid_serialUn numéro de série n’est pas valide ; la réponse indique le champ. Rien n’est enregistré.
422invalid_dateUne date ne respecte pas le format AAAA-MM-JJ
422out_of_rangeUne mesure est hors de la plage autorisée
422invalid_gtinLe GTIN a une longueur ou un chiffre de contrôle incorrect
422validation_failedUne autre valeur enfreint les règles
429rate_limitedTrop de requêtes ; réessayer après Retry-After
500internal_errorErreur de notre côté. Réessai sûr avec la même clé d’idempotence.

Limites

Requêtes par minute et par cléLive 300, test 60
Passeports par appel1.000
Taille d’une requête2 MB
Entrées par page de liste100, 500 maximum
Clés actives par entreprise10
Clés liveEnterprise avec tous les droits, Pro uniquement avec les droits pour les mesures BMS. Les clés de test sont disponibles dans toutes les offres.

Vous prévoyez plus de 100 000 passeports par an ? Parlons-en à l’avance.

Autorisations

Chaque clé ne reçoit que les droits nécessaires. S’il en manque un, l’API répond 403 et insufficient_scope. Dans l’application, vous choisissez un modèle : Tous les droits, ERP, BMS ou Lecture seule.

DroitAutorise
models:readLire les modèles et vérifier des brouillons
models:writeCréer et modifier des modèles
passports:readLire passeports, événements et composants
passports:writeCréer et modifier des passeports, signaler des événements, installer et remplacer des composants
telemetry:read telemetry:writeLire et signaler des mesures
certificates:readLire et télécharger des justificatifs
suppliers:read suppliers:writeLire fournisseurs et demandes, envoyer et accepter des demandes
audit:readLire le journal d’audit

Requêtes et réponses

Les listes arrivent par pages avec data, has_more et next_cursor. Transmettez next_cursor comme cursor. Les champs inconnus sont refusés pour révéler les fautes de frappe. Avec PATCH, un champ absent reste inchangé et null le vide.

En-têteSignification
Idempotency-KeyRépétition sans second enregistrement, valable 7 jours. Le numéro de pièce de l’ERP convient bien.
X-Batterypass-Dry-Run: trueMême une clé live ne fait que vérifier cette requête sans rien enregistrer.
X-Request-IdIdentifiant de l’appel, aussi dans les erreurs et le journal
X-RateLimit-Limit X-RateLimit-RemainingQuota de la minute en cours
Idempotent-Replayedtrue si une réponse enregistrée a été rejouée

SDK et console API

Disponible

Deux clients légers sans dépendances : ils répètent les requêtes en sécurité, parcourent les listes et découpent les gros volumes en appels de 1 000 passeports. Ce sont des fichiers uniques à copier dans votre projet. La console API se trouve dans l’application sous Paramètres, Clés API. Les bibliothèques font partie de l’offre 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"])

Composants

Disponible

Consignez les modules, cellules ou BMS installés dans une batterie. Un numéro de série ne peut être installé qu’une fois à la fois par passeport. Lors d’un remplacement, l’ancienne pièce reste enregistrée avec sa date de retrait.

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"}'

Les types autorisés sont pack, rack, module, cell, bms et other.

Mesures

Disponible

Signalez les données du BMS, une à une ou jusqu’à 1 000 mesures avec items. Lisez la série avec since et until. Les mesures sont disponibles à partir de la formule Pro. Elles apparaissent dans l’application et pour les ayants droit, pas sur la page publique.

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}'
ChampPlage
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

Justificatifs

Disponible

Téléversez rapports d’essai, déclarations de conformité et documents similaires dans le modèle : PDF, PNG ou JPG jusqu’à 10 Mo. Via l’API, vous lisez la liste et obtenez un lien de téléchargement valable 15 minutes. Chaque fichier a une somme de contrôle SHA-256.

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"

Fournisseurs et demandes de données

Disponible

Demandez des valeurs aux fournisseurs. Ils reçoivent un e-mail avec un lien valable 30 jours et ne saisissent que les champs demandés, sans compte. Les valeurs n’arrivent dans le modèle qu’après votre validation. Disponible à partir de Starter, 20 demandes maximum par heure.

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

Disponible

Indiquez dans le modèle un GTIN avec un chiffre de contrôle valide. L’adresse GS1 issue du GTIN et du numéro de série mène alors à la page du passeport et figure dans l’API comme gs1_link. Vos codes QR contiennent toujours l’adresse fixe, mais vous pouvez créer vos codes à partir du lien GS1. Le GTIN s’obtient auprès de GS1.

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

Journal d'audit

Disponible

GET /audit renvoie toutes les modifications journalisées, par pages et éventuellement depuis une date avec since. Les modifications via l’API portent le nom de la clé. Dans l’application, les administrateurs voient aussi les derniers appels.

Registre de l’UE

Test dans le vrai registre en attente

L’application crée la paire de clés de votre compte de service. La clé privée reste chiffrée chez nous. La clé publique va dans le registre. Votre entreprise doit d’abord y être vérifiée avec un cachet qualifié.

Seuls les passeports publiés et complets sont soumis, par lots de 100 maximum. L’application et l’API affichent le statut. Le registre lit l’adresse du passeport en JSON ; avec son jeton d’accès, il reçoit aussi les vues protégées. Les jetons invalides sont refusés.

Conçu d’après les documents techniques de la Commission du 30/10/2026 et testé sur notre propre serveur de test. Le test dans le vrai registre reste à faire.

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"

Publication et preuve

Disponible

Avec publish: false, vous créez des brouillons. Ils ne sont pas accessibles publiquement tant que vous ne les publiez pas. Chaque modification des données de base devient une nouvelle version liée par hachage à la précédente. Sous /p/ID/proof, chacun peut recalculer l’état public.

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

Versions

La version majeure figure dans le chemin. Dans la v1, seuls des champs et des points de terminaison sont ajoutés. Prévu mais pas encore disponible : webhooks.

VersionDateModification
1.2.02026-11-06Registre, publication, versions, mesures supplémentaires pour les vues protégées de l’UE
1.1.02026-11-06Composants, mesures, justificatifs, fournisseurs, audit, passeport unique, GS1, droits fins, en-tête dry-run, OpenAPI et point de santé
1.0.02026-11-06Modèles, passeports, événements, clés, mode test, idempotence

Questions fréquentes

Réponses courtes pour l’intégration.

Comment tester sans créer de vrais passeports ?

Avec une clé de test. Elle vérifie tout comme en production sans rien enregistrer.

Que faire en cas de timeout ?

Renvoyez la même requête avec la même clé d’idempotence. Aucun second enregistrement n’est créé.

Comment trouver le passeport d’un numéro de série ?

Avec GET /passports?serial=… et si besoin model_code.

Puis-je supprimer des passeports via l’API ?

Non. Signalez la fin de vie comme événement avec le statut waste.

Combien de passeports sont possibles ?

1 000 par appel, 300 appels par minute. Votre formule et notre hébergement fixent aussi des limites. Au-delà de 100 000 passeports par an, parlons-en à l’avance.

Essayez l’import avec votre fichier.

La formule Pilot est gratuite et couvre un modèle et 25 passeports par an.