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.
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.
- EntrepriseVotre compte avec utilisateurs et formule
- ModèleDonnées de base, une fois par modèle
- PasseportUne batterie avec numéro de série et adresse propre
- ÉvénementRéparation, réaffectation ou déchet
| Voie | Pour quoi | État |
|---|---|---|
| Import CSV | Reprendre les numéros de série de l’ERP, du MES ou d’Excel | Disponible |
| Export CSV | Ramener les identifiants et adresses dans vos systèmes | Disponible |
| Adresse du passeport et code QR | Créer vos étiquettes ou renvoyer vers les passeports | Disponible |
| API REST | Créer modèles et passeports automatiquement, sans téléversement manuel | Disponible |
Import CSV
DisponibleLa 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.
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ègle | Spécification |
|---|---|
| Encodage | UTF-8 avec ou sans BOM. Windows-1252 est détecté et converti. |
| Séparateur | Point-virgule, virgule ou tabulation. La première ligne fait foi. |
| Taille | 8 Mo et 50 000 lignes maximum par fichier. |
| Structure | Une batterie par ligne, sans saut de ligne dans un champ. |
| En-tête | Facultatif. 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. |
| Colonne | Champ | Noms de colonnes reconnus | Obligatoire | Règle |
|---|---|---|---|---|
| 1 | Numéro de série | seriennummer, serialnummer, serial, serial number, serialnumber, serial no, sn, serien-nr, seriennr, sernr | Oui | 120 caractères maximum : lettres, chiffres, espaces et - _ . / : |
| 2 | Date de fabrication | herstelldatum, produktionsdatum, fertigungsdatum, manufacturing date, production date, date, datum | Facultatif | 2027-03-01, 01.03.2027, 1.3.2027, 01/03/2027, 1/3/2027 ou 2027/03/01 |
| 3 | Lot | charge, chargennummer, batch, lot, los | Facultatif | 120 caractères maximum |
| 4 | Lieu de fabrication | herstellort, produktionsort, werk, place, plant, manufacturing place | Facultatif | 190 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
DisponibleVé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.
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;freiExport CSV
DisponiblePour 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.
Seriennummer;Pass-ID;Pass-URL;Herstelldatum;Charge;Herstellort;Status SN-0001;7KM2XQ9RTA;https://app.batterypass2027.eu/p/7KM2XQ9RTA;2027-03-01;L2027-03;Essen;Original
Adresse du passeport et code QR
DisponibleChaque 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.
https://app.batterypass2027.eu/p/{PASS-ID}
https://app.batterypass2027.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
# 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')
Champs de données
DisponibleCes 38 champs existent aujourd’hui dans l’application, sous forme simplifiée selon l’annexe XIII. Ils se gèrent dans le formulaire du modèle. Les catégories sont lmt, industrie, ev, sli et geraet.
Données générales6
| Champ | Nom technique | Type | Visible pour | Obligatoire |
|---|---|---|---|---|
| Fabricant (nom) | manufacturer_name | text | Public | Toutes les catégories avec passeport |
| Fabricant (adresse) | manufacturer_address | text | Public | Toutes les catégories avec passeport |
| Contact (e-mail ou site web) | manufacturer_contact | text | Public | Toutes les catégories avec passeport |
| Lieu de fabrication (par défaut) | manufacturing_place | text | Public | Toutes les catégories avec passeport |
| Poids | weight_kg | number · kg | Public | Toutes les catégories avec passeport |
| Garantie | warranty | text | Public | Facultatif |
Matériaux et substances6
| Champ | Nom technique | Type | Visible pour | Obligatoire |
|---|---|---|---|---|
| Chimie de la batterie | chemistry | text | Public | Toutes les catégories avec passeport |
| Substances dangereuses | hazardous_substances | text | Public | Toutes les catégories avec passeport |
| Matières premières critiques | critical_raw_materials | text | Public | Toutes les catégories avec passeport |
| Composition de la cathode | composition_cathode | text | Intérêt légitime | Toutes les catégories avec passeport |
| Composition de l'anode | composition_anode | text | Intérêt légitime | Toutes les catégories avec passeport |
| Composition de l'électrolyte | composition_electrolyte | text | Intérêt légitime | Toutes les catégories avec passeport |
Performance et durabilité11
| Champ | Nom technique | Type | Visible pour | Obligatoire |
|---|---|---|---|---|
| Capacité nominale | rated_capacity_ah | number · Ah | Public | Toutes les catégories avec passeport |
| Tension nominale | nominal_voltage_v | number · V | Public | Toutes les catégories avec passeport |
| Tension minimale | min_voltage_v | number · V | Public | Toutes les catégories avec passeport |
| Tension maximale | max_voltage_v | number · V | Public | Toutes les catégories avec passeport |
| Énergie nominale | rated_energy_kwh | number · kWh | Public | Toutes les catégories avec passeport |
| Puissance (d'origine) | rated_power_w | number · W | Public | industrie, ev |
| Durée de vie prévue | expected_lifetime_cycles | number · Zyklen | Public | Toutes les catégories avec passeport |
| Plage de température de | temp_min_c | number · °C | Public | Toutes les catégories avec passeport |
| Plage de température à | temp_max_c | number · °C | Public | Toutes les catégories avec passeport |
| Rendement énergétique (aller-retour) | round_trip_efficiency_pct | number · % | Public | industrie, ev |
| Résistance interne | internal_resistance_mohm | number · mΩ | Public | Facultatif |
Empreinte carbone et contenu recyclé6
| Champ | Nom technique | Type | Visible pour | Obligatoire |
|---|---|---|---|---|
| Empreinte carbone | carbon_footprint | number · kg CO₂e/kWh | Public | Obligation ultérieure |
| Part de cobalt recyclé | recycled_cobalt_pct | number · % | Public | Obligation ultérieure |
| Part de lithium recyclé | recycled_lithium_pct | number · % | Public | Obligation ultérieure |
| Part de nickel recyclé | recycled_nickel_pct | number · % | Public | Obligation ultérieure |
| Part de plomb recyclé | recycled_lead_pct | number · % | Public | Obligation ultérieure |
| Part de contenu renouvelable | renewable_content_pct | number · % | Public | Facultatif |
Conformité et étiquetage4
| Champ | Nom technique | Type | Visible pour | Obligatoire |
|---|---|---|---|---|
| Déclaration UE de conformité (lien) | doc_url | url | Public | Toutes les catégories avec passeport |
| Étiquetage et symboles | labels_symbols | text | Public | Toutes les catégories avec passeport |
| Rapport sur le devoir de diligence (lien) | due_diligence_url | url | Public | Obligation ultérieure |
| Retour et élimination | end_of_life_info | text | Public | Toutes les catégories avec passeport |
Démontage, réparation et pièces détachées4
| Champ | Nom technique | Type | Visible pour | Obligatoire |
|---|---|---|---|---|
| Instructions de démontage | dismantling_info | text | Intérêt légitime | Toutes les catégories avec passeport |
| Références des composants | part_numbers | text | Intérêt légitime | Toutes les catégories avec passeport |
| Source des pièces détachées | spare_parts_contact | text | Intérêt légitime | Toutes les catégories avec passeport |
| Mesures de sécurité | safety_measures | text | Intérêt légitime | Toutes les catégories avec passeport |
Rapports d'essai1
| Champ | Nom technique | Type | Visible pour | Obligatoire |
|---|---|---|---|---|
| Rapports d'essai (liens ou références) | test_reports | text | Autorités et organismes de contrôle | Toutes les catégories avec passeport |
API REST
DisponibleCré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.batterypass2027.eu/api/v1
Démarrer en trois étapes
- Connectez-vous en tant qu’administrateur et ouvrez Paramètres, puis Clés API.
- Créez une clé de test. Elle ne s’affiche qu’une fois ; conservez-la comme un mot de passe.
- Vérifiez la connexion avec GET /me. Si l’API répond, la clé et le chemin réseau sont corrects.
export BATTERYPASS_KEY="bp_test_..." curl -s https://app.batterypass2027.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éthode | Chemin | Pour quoi |
|---|---|---|
| GET | /me | Test de connexion : entreprise, formule, droits et quota restant |
| GET | /fields | Catalogue des champs avec obligations par catégorie |
| GET | /models | Lister les modèles, aussi par code |
| POST | /models | Cré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 | /passports | Lister les passeports, aussi par numéro de série ou date de modification |
| POST | /passports/batch | Créer jusqu’à 1 000 passeports en un appel |
| GET | /passports/{id} | Lire un passeport avec adresse et statut |
| GET | /passports/{id}/events | Lire les événements d’un passeport |
| POST | /passports/{id}/events | Signaler un événement, p. ex. réparation ou déchet |
| POST | /models/validate | Vérifier un brouillon sans rien enregistrer |
| POST | /passports | Créer un passeport |
| PATCH | /passports/{id} | Modifier la date, le lot ou le lieu |
| GET | /passports/{id}/components | Lire les composants |
| POST | /passports/{id}/components | Installer un composant |
| PATCH | /passports/{id}/components/{cid} | Modifier ou retirer un composant |
| POST | /passports/{id}/components/{cid}/replace | Remplacer un composant |
| GET | /passports/{id}/telemetry | Lire la série de mesures |
| POST | /passports/{id}/telemetry | Signaler des mesures |
| GET | /certificates | Lister les justificatifs |
| GET | /certificates/{id} | Justificatif avec lien de téléchargement |
| GET | /suppliers | Lister les fournisseurs |
| GET | /supplier-requests | Lister les demandes |
| POST | /supplier-requests | Envoyer une demande |
| GET | /supplier-requests/{id} | Lire une demande avec les valeurs |
| POST | /supplier-requests/{id}/accept | Reprendre les valeurs dans le modèle |
| GET | /audit | Lire le journal d’audit |
Exemple : créer des passeports depuis l’ERP
curl -X POST https://app.batterypass2027.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" }
]
}'
import os
import requests
res = requests.post(
"https://app.batterypass2027.eu/api/v1/passports/batch",
headers={
"Authorization": f"Bearer {os.environ['BATTERYPASS_KEY']}",
"Idempotency-Key": "erp-4711",
},
json={
"model_code": "BX-48V",
"on_conflict": "skip",
"items": [{"serial": "SN-0001", "manufactured_at": "2027-03-01"}],
},
timeout=30,
)
res.raise_for_status()
print(res.json()["created"])
const res = await fetch("https://app.batterypass2027.eu/api/v1/passports/batch", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BATTERYPASS_KEY}`,
"Idempotency-Key": "erp-4711",
"Content-Type": "application/json",
},
body: JSON.stringify({
model_code: "BX-48V",
on_conflict: "skip",
items: [{ serial: "SN-0001", manufactured_at: "2027-03-01" }],
}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log((await res.json()).created);
<?php
$ch = curl_init("https://app.batterypass2027.eu/api/v1/passports/batch");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BATTERYPASS_KEY"),
"Idempotency-Key: erp-4711",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"model_code" => "BX-48V",
"on_conflict" => "skip",
"items" => [["serial" => "SN-0001", "manufactured_at" => "2027-03-01"]],
]),
]);
echo curl_exec($ch);
Réponse
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.batterypass2027.eu/p/7KM2XQ9RTA"
}
]
}
Erreurs
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"
}
}
| HTTP | Code | Signification |
|---|---|---|
400 | invalid_request | La requête n’est pas un JSON valide ou contient des champs inconnus |
401 | unauthorized | Clé manquante ou non valide |
403 | insufficient_scope | Il manque à la clé le droit requis |
403 | plan_required | Les clés live nécessitent la formule Pro ou Enterprise |
403 | email_not_verified | L’adresse e-mail de l’entreprise n’est pas encore confirmée |
403 | quota_exceeded | Le quota de la formule est épuisé |
404 | not_found | L’objet n’existe pas ou appartient à une autre entreprise |
409 | duplicate_serial | Le numéro de série existe déjà dans ce modèle (avec on_conflict: fail) |
409 | duplicate_model | Le code du modèle est déjà pris |
409 | idempotency_conflict | La clé d’idempotence a servi à une autre requête |
413 | payload_too_large | La requête dépasse 2 Mo |
422 | invalid_serial | Un numéro de série n’est pas valide ; la réponse indique le champ. Rien n’est enregistré. |
422 | invalid_date | Une date ne respecte pas le format AAAA-MM-JJ |
422 | out_of_range | Une mesure est hors de la plage autorisée |
422 | invalid_gtin | Le GTIN a une longueur ou un chiffre de contrôle incorrect |
422 | validation_failed | Une autre valeur enfreint les règles |
429 | rate_limited | Trop de requêtes ; réessayer après Retry-After |
500 | internal_error | Erreur 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 appel | 1.000 |
| Taille d’une requête | 2 MB |
| Entrées par page de liste | 100, 500 maximum |
| Clés actives par entreprise | 10 |
| Clés live | Pro et Enterprise. Les clés de test existent dans toutes les formules. |
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.
| Droit | Autorise |
|---|---|
models:read | Lire les modèles et vérifier des brouillons |
models:write | Créer et modifier des modèles |
passports:read | Lire passeports, événements et composants |
passports:write | Créer et modifier des passeports, signaler des événements, installer et remplacer des composants |
telemetry:read telemetry:write | Lire et signaler des mesures |
certificates:read | Lire et télécharger des justificatifs |
suppliers:read suppliers:write | Lire fournisseurs et demandes, envoyer et accepter des demandes |
audit:read | Lire 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ête | Signification |
|---|---|
Idempotency-Key | Répétition sans second enregistrement, valable 7 jours. Le numéro de pièce de l’ERP convient bien. |
X-Batterypass-Dry-Run: true | Même une clé live ne fait que vérifier cette requête sans rien enregistrer. |
X-Request-Id | Identifiant de l’appel, aussi dans les erreurs et le journal |
X-RateLimit-Limit X-RateLimit-Remaining | Quota de la minute en cours |
Idempotent-Replayed | true si une réponse enregistrée a été rejouée |
SDK et console API
DisponibleDeux 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.
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"])
import { Batterypass } from "./batterypass.mjs";
const bp = new Batterypass({ apiKey: process.env.BATTERYPASS_KEY });
console.log((await bp.me()).organization.plan);
const items = Array.from({ length: 5000 }, (_, i) => ({ serial: `SN-${i}` }));
console.log(await bp.createPassportsAll("BX-48V", items));
for await (const passport of bp.listAll("/passports", { model_code: "BX-48V" })) {
console.log(passport.serial, passport.url);
}
Composants
DisponibleConsignez 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 -X POST https://app.batterypass2027.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.batterypass2027.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
DisponibleSignalez 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 Pro. Elles apparaissent dans l’application, pas sur la page publique.
curl -X POST https://app.batterypass2027.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}'
| Champ | Plage |
|---|---|
recorded_at | ISO 8601 |
soh_pct | 0–100 |
soc_pct | 0–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_event | deep_discharge, overheat, accident |
note | max. 500 |
Justificatifs
DisponibleTé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 -s "https://app.batterypass2027.eu/api/v1/certificates?model_code=BX-48V" -H "Authorization: Bearer $BATTERYPASS_KEY" curl -s https://app.batterypass2027.eu/api/v1/certificates/42 -H "Authorization: Bearer $BATTERYPASS_KEY"
Fournisseurs et demandes de données
DisponibleDemandez 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 -X POST https://app.batterypass2027.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.batterypass2027.eu/api/v1/supplier-requests?status=submitted" -H "Authorization: Bearer $BATTERYPASS_KEY"
curl -X POST https://app.batterypass2027.eu/api/v1/supplier-requests/7/accept -H "Authorization: Bearer $BATTERYPASS_KEY"
GS1 Digital Link
DisponibleIndiquez 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.
https://app.batterypass2027.eu/01/{GTIN}/21/{SERIENNUMMER}
https://app.batterypass2027.eu/01/04012345678901/21/SN-0001
Journal d'audit
DisponibleGET /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.
Versions
La version majeure figure dans le chemin. Dans v1, seuls des champs et points de terminaison s’ajoutent. Prévus mais pas encore disponibles : webhooks, accès pour autorités et recycleurs et chaîne de modifications vérifiable.
| Version | Date | Modification |
|---|---|---|
1.1.0 | 2026-11-06 | Composants, mesures, justificatifs, fournisseurs, audit, passeport unique, GS1, droits fins, en-tête dry-run, OpenAPI et point de santé |
1.0.0 | 2026-11-06 | Modè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.