batterypass
Plataforma
Cómo funciona Funciones Comparación
Sectores
Almacenamiento (BESS) Vehículos ligeros Baterías industriales Vehículos eléctricos Proveedores
Recursos
Resumen de cumplimiento Reglamento de Baterías de la UE Seguridad y privacidad Todos los artículos De dónde vienen los datos Qué datos necesita el pasaporte Código QR en la batería ¿Quién es responsable? Glosario Desarrolladores y API Estado del servicio Cambios en el producto
Batterypass
Test de obligaciones Precios Demo: ver pasaporte de ejemplo Blog Sobre nosotros Contacto
Acceder Empezar gratis
Desarrolladores

Conecte los datos del pasaporte a sus sistemas.

API REST, importación y exportación CSV, direcciones fijas y todos los campos de datos. Con una clave de prueba lo prueba todo sin cambiar datos.

100MB por archivo
67campos de datos en la aplicación
3formatos: CSV, SVG, PNG

Resumen

Cuatro objetos y cuatro vías para intercambiar datos. Para empezar basta un archivo CSV; para la operación continua está la API REST.

  1. EmpresaSu cuenta con usuarios y plan
  2. ModeloDatos maestros, una vez por modelo
  3. PasaporteUna batería con número de serie y dirección propia
  4. EventoReparación, cambio de uso o residuo
VíaPara quéEstado
Importación CSVTraer números de serie desde ERP, MES o ExcelDisponible
Exportación CSVDevolver identificadores y direcciones a sus sistemasDisponible
Dirección del pasaporte y código QRCrear etiquetas propias o enlazar pasaportesDisponible
API RESTCrear modelos y pasaportes automáticamente, sin subidas manualesDisponible

Importación CSV

Disponible

La vía habitual desde el ERP: exportar una lista y subirla a un modelo. Cada número de serie nuevo recibe un pasaporte.

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
ReglaEspecificación
CodificaciónUTF-8 con o sin BOM. Windows-1252 se detecta y se convierte.
SeparadorPunto y coma, coma o tabulador. Decide la primera línea.
TamañoMáximo 100 MB por archivo, también en Excel (.xlsx). Los archivos desde 1 MB se procesan por secciones.
EstructuraUna batería por fila, sin saltos de línea dentro de un campo.
EncabezadoOpcional. Con encabezado, las columnas pueden ir en cualquier orden y las adicionales se ignoran. Sin él, se aplica el orden de la tabla inferior.
ColumnaCampoNombres de columna reconocidosObligatorioRegla
1Número de serieseriennummer, serialnummer, serial, serial number, serialnumber, serial no, sn, serien-nr, seriennr, sernrSíMáximo 120 caracteres: letras, dígitos, espacios y - _ . / :
2Fecha de fabricaciónherstelldatum, produktionsdatum, fertigungsdatum, manufacturing date, production date, date, datumOpcional2027-03-01, 01.03.2027, 1.3.2027, 01/03/2027, 1/3/2027 o 2027/03/01
3Lotecharge, chargennummer, batch, lot, losOpcionalMáximo 120 caracteres
4Lugar de fabricaciónherstellort, produktionsort, werk, place, plant, manufacturing placeOpcionalMáximo 190 caracteres

Qué ocurre al subir el archivo

  • Primero aparece una vista previa; aún no se guarda nada.
  • Las filas erróneas se indican con su número y se omiten.
  • Se omiten los números duplicados en el archivo y los ya existentes en este modelo.
  • Los pasaportes se crean solo tras su confirmación, en una única operación. La importación figura en el registro de auditoría.

Comprobar un archivo

Disponible

Compruebe una exportación antes de iniciar sesión. Se aplican las mismas reglas que en la importación de la aplicación.

La comprobación se realiza solo en su navegador; el archivo no se sube. Si un número ya existe en el modelo solo lo muestra la vista previa de la aplicación.

Exportación CSV

Disponible

En cada modelo se puede descargar la lista de todos los pasaportes, en UTF-8 con BOM y separada por punto y coma. Así vuelven identificadores y direcciones al ERP, MES o la impresión de etiquetas. La descarga requiere iniciar sesión.

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

Dirección del pasaporte y código QR

Disponible

Cada pasaporte tiene una dirección fija. Un código QR, un enlace de un manual o una entrada del ERP no necesitan más.

URL
https://app.digitalbatterypass.eu/p/{PASS-ID}
https://app.digitalbatterypass.eu/p/{PASS-ID}?lang=en
  • El identificador tiene 10 caracteres y evita los que se confunden, como 0, O, 1, I y L.
  • El código QR solo contiene esta dirección. Si cambian los datos, sigue siendo válido.
  • En la aplicación, el código está disponible por pasaporte en SVG y PNG, además de hojas de etiquetas para imprimir.
  • Sin iniciar sesión, la página del pasaporte muestra solo los datos públicos. Se pide a los buscadores que no la indexen.
  • Con un GTIN hay además un enlace GS1 Digital Link.

Crear etiquetas propias desde la exportación

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

Pasaporte como JSON en formato UE

La misma dirección ofrece la página a las personas y JSON según el esquema UE 1.0.0 a los programas, sin registro y solo con datos públicos. Si faltan datos obligatorios, también faltan en el JSON y el registro rechazaría el pasaporte.

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

Campos de datos

Disponible

La aplicación usa 67 campos según el esquema oficial UE para baterías, versión 1.0.0. Envíe los campos múltiples como lista; GET /fields devuelve los valores permitidos. Las categorías son lmt, industrie, ev, sli y geraet.

Datos generales13
CampoNombre técnicoTipoVisible paraObligatorio
Idioma de los textoscontent_languagevocabPúblicoOpcional
Fabricante (nombre)manufacturer_nametextPúblicoTodas las categorías con pasaporte
Nombre comercialmanufacturer_trade_nametextPúblicoOpcional
Marcamanufacturer_trademarktextPúblicoOpcional
Fabricante (dirección)manufacturer_addresstextPúblicoTodas las categorías con pasaporte
Sitio web del fabricantemanufacturer_websiteurlPúblicoOpcional
Correo del fabricantemanufacturer_emailemailPúblicoOpcional
Número de productoproduct_numbertextPúblicoOpcional
Lugar de fabricación (ciudad)manufacturing_placetextPúblicoOpcional
Regiónmanufacturing_regiontextPúblicoOpcional
País de fabricaciónmanufacturing_countryvocabPúblicoTodas las categorías con pasaporte
Pesoweight_kgnumber · kgPúblicoTodas las categorías con pasaporte
Garantía comercialwarranty_monthsinteger · MonatePúblicoOpcional
Materiales y sustancias8
CampoNombre técnicoTipoVisible paraObligatorio
Química de la bateríachemistrylist · vocabPúblicoTodas las categorías con pasaporte
Sustancias peligrosashazardous_substanceslistPúblicoTodas las categorías con pasaporte
Materias primas críticascritical_raw_materialslist · vocabPúblicoTodas las categorías con pasaporte
Símbolo químico en la etiquetachemical_symbollist · vocabPúblicoOpcional
Agente extintorextinguishing_agenttext · langPúblicoTodas las categorías con pasaporte
Composición del cátodocomposition_cathodetextInterés legítimoTodas las categorías con pasaporte
Composición del ánodocomposition_anodetextInterés legítimoTodas las categorías con pasaporte
Composición del electrolitocomposition_electrolytetextInterés legítimoTodas las categorías con pasaporte
Rendimiento y durabilidad23
CampoNombre técnicoTipoVisible paraObligatorio
Capacidad nominalrated_capacity_ahnumber · AhPúblicoTodas las categorías con pasaporte
Tensión nominalnominal_voltage_vnumber · VPúblicoTodas las categorías con pasaporte
Tensión mínimamin_voltage_vnumber · VPúblicoTodas las categorías con pasaporte
Tensión máximamax_voltage_vnumber · VPúblicoTodas las categorías con pasaporte
Valores de tensión válidos desdevoltage_temp_min_cnumber · °CPúblicoTodas las categorías con pasaporte
Valores de tensión válidos hastavoltage_temp_max_cnumber · °CPúblicoTodas las categorías con pasaporte
Potencia (original)rated_power_wnumber · WPúblicoTodas las categorías con pasaporte
Límite de potenciapower_limit_wnumber · WPúblicoTodas las categorías con pasaporte
Límite de potencia válido desdepower_temp_min_cnumber · °CPúblicoOpcional
Límite de potencia válido hastapower_temp_max_cnumber · °CPúblicoOpcional
Ensayo del rango de temperatura sin usotemp_testtext · langPúblicoTodas las categorías con pasaporte
Rango de temperatura desdetemp_min_cnumber · °CPúblicoTodas las categorías con pasaporte
Rango de temperatura hastatemp_max_cnumber · °CPúblicoTodas las categorías con pasaporte
Resistencia interna de la celdainternal_cell_resistance_mohmnumber · mΩPúblicoTodas las categorías con pasaporte
Resistencia interna del paqueteinternal_pack_resistance_mohmnumber · mΩPúblicoTodas las categorías con pasaporte
Vida útil previstaexpected_lifetime_cyclesinteger · ZyklenPúblicolmt, ev
Ensayo de referencia de vida en cicloscycle_life_testtext · langPúblicolmt, ev
Umbral de agotamiento de capacidadcapacity_threshold_pctnumber · %Públicoev
Eficiencia energética inicialinitial_rte_pctnumber · %Públicolmt, ev
Eficiencia a media vida en ciclosrte_half_life_pctnumber · %Públicolmt, ev
Tasa C de carga en el ensayocycle_charge_cratenumber · 1/hPúblicolmt, ev
Tasa C de descarga en el ensayocycle_discharge_cratenumber · 1/hPúblicoOpcional
Energía nominalrated_energy_kwhnumber · kWhPúblicoOpcional
Huella de carbono y contenido reciclado6
CampoNombre técnicoTipoVisible paraObligatorio
Porcentaje de contenido renovablerenewable_content_pctnumber · %PúblicoTodas las categorías con pasaporte
Huella de carbonocarbon_footprintnumber · kg CO₂e/kWhPúblicoObligación posterior
Contenido de cobalto recicladorecycled_cobalt_pctnumber · %PúblicoObligación posterior
Contenido de litio recicladorecycled_lithium_pctnumber · %PúblicoObligación posterior
Contenido de níquel recicladorecycled_nickel_pctnumber · %PúblicoObligación posterior
Contenido de plomo recicladorecycled_lead_pctnumber · %PúblicoObligación posterior
Conformidad y etiquetado3
CampoNombre técnicoTipoVisible paraObligatorio
Símbolo de recogida separada presenteseparate_collection_symbolbooleanPúblicoTodas las categorías con pasaporte
Declaración UE de conformidad (enlace)doc_urlurlPúblicoTodas las categorías con pasaporte
Informe de diligencia debida (enlace)due_diligence_urlurlPúblicoObligación posterior
Prevención de residuos y devolución10
CampoNombre técnicoTipoVisible paraObligatorio
Papel de los usuarios en la prevención de residuosend_user_preventiontext · langPúblicoTodas las categorías con pasaporte
Papel de los usuarios en la recogida separadaend_user_collectiontext · langPúblicoTodas las categorías con pasaporte
Puntos de recogida separadacollection_pointstext · langPúblicoTodas las categorías con pasaporte
Puntos de devolucióntake_back_pointstext · langPúblicoTodas las categorías con pasaporte
Instalaciones de preparación para la reutilizaciónreuse_facilitiestext · langPúblicoTodas las categorías con pasaporte
Instalaciones de preparación para cambio de usorepurposing_facilitiestext · langPúblicoTodas las categorías con pasaporte
Instalaciones de tratamiento de baterías usadastreatment_facilitiestext · langPúblicoTodas las categorías con pasaporte
Instrucciones de seguridad para baterías usadaswaste_safetytext · langPúblicoTodas las categorías con pasaporte
Significado de los símbolos de la etiquetalabel_symbols_meaningtext · langPúblicoTodas las categorías con pasaporte
Efectos de las sustancias en el medio ambiente y la saludsubstances_impacttext · langPúblicoTodas las categorías con pasaporte
Desmontaje, reparación y recambios3
CampoNombre técnicoTipoVisible paraObligatorio
Repuestos y sustitución (enlace)spare_parts_urlurlInterés legítimoTodas las categorías con pasaporte
Instrucciones de desmontaje (enlace)dismantling_urlurlInterés legítimoTodas las categorías con pasaporte
Medidas de seguridad (enlace)safety_urlurlInterés legítimoTodas las categorías con pasaporte
Informes de ensayo1
CampoNombre técnicoTipoVisible paraObligatorio
Informes de ensayo de conformidad (enlace)compliance_report_urlurlAutoridades y organismos de controlTodas las categorías con pasaporte

API REST

Disponible

Cree modelos y pasaportes directamente desde ERP, MES o BMS y notifique eventos. JSON sobre HTTPS, autenticación por clave. Dirección base: https://app.digitalbatterypass.eu/api/v1

En producción, la API REST forma parte del plan Enterprise. Con Pro solo envía mediciones del BMS. Las claves de prueba están disponibles en todos los planes.

Empiece en tres pasos

  1. Inicie sesión como administrador y abra Ajustes y luego Claves API.
  2. Cree una clave de prueba. Solo se muestra una vez; guárdela como una contraseña.
  3. Compruebe la conexión con GET /me. Si la API responde, la clave y la ruta de red son correctas.
cURL
export BATTERYPASS_KEY="bp_test_..."

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

Una clave, una empresa

La clave determina qué datos son accesibles. Se crea en la aplicación y solo se muestra una vez.

Las claves de prueba no guardan nada

Una clave de prueba comprueba cada solicitud como en producción, sin cambiar datos ni consumir cuota.

Reintentos seguros

Con la misma clave de idempotencia no se crea un segundo registro, ni siquiera tras una interrupción. El número de documento del ERP sirve bien.

Los pasaportes no se eliminan

La API no tiene DELETE para pasaportes. El fin de vida de una batería se notifica como evento.

Las claves de prueba responden con estado 200 y dry_run: true. Leen datos reales, pero no cambian nada.

Endpoints

MétodoRutaPara qué
GET/mePrueba de conexión: empresa, plan, permisos y cuota restante
GET/fieldsCatálogo de campos con obligaciones por categoría
GET/modelsListar modelos, también por código
POST/modelsCrear un modelo
GET/models/{id}Leer un modelo con sus datos y campos obligatorios que faltan
PATCH/models/{id}Cambiar datos maestros
GET/passportsListar pasaportes, también por número de serie o fecha de cambio
POST/passports/batchCrear hasta 1.000 pasaportes en una llamada
GET/passports/{id}Leer un pasaporte con dirección y estado
GET/passports/{id}/eventsLeer los eventos de un pasaporte
POST/passports/{id}/eventsNotificar un evento, p. ej., reparación o residuo
POST/models/validateComprobar un borrador sin guardar
POST/passportsCrear un pasaporte
PATCH/passports/{id}Cambiar fecha, lote o lugar
GET/passports/{id}/componentsLeer componentes
POST/passports/{id}/componentsInstalar un componente
PATCH/passports/{id}/components/{cid}Cambiar o retirar un componente
POST/passports/{id}/components/{cid}/replaceSustituir un componente
GET/passports/{id}/telemetryLeer serie de mediciones
POST/passports/{id}/telemetryNotificar mediciones
GET/certificatesListar justificantes
GET/certificates/{id}Justificante con enlace de descarga
GET/suppliersListar proveedores
GET/supplier-requestsListar solicitudes
POST/supplier-requestsEnviar una solicitud
GET/supplier-requests/{id}Leer una solicitud con valores
POST/supplier-requests/{id}/acceptAceptar valores en el modelo
GET/auditLeer el registro de auditoría

Ejemplo: crear pasaportes desde el 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" }
  ]
}'

Respuesta

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

Errores

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"
  }
}
HTTPCodeSignificado
400invalid_requestLa solicitud no es JSON válido o contiene campos desconocidos
401unauthorizedFalta la clave o no es válida
403insufficient_scopeA la clave le falta el permiso necesario
403plan_requiredLas claves live requieren el plan Enterprise; con Pro solo para mediciones del BMS
403email_not_verifiedEl correo de la empresa aún no está confirmado
403quota_exceededLa cuota del plan está agotada
404not_foundEl objeto no existe o pertenece a otra empresa
409duplicate_serialEl número de serie ya existe en este modelo (con on_conflict: fail)
409duplicate_modelEl código del modelo ya está en uso
409idempotency_conflictLa clave de idempotencia se usó para otra solicitud
413payload_too_largeLa solicitud supera los 2 MB
422invalid_serialUn número de serie no es válido; la respuesta indica el campo. No se guarda nada.
422invalid_dateUna fecha no sigue el formato AAAA-MM-DD
422out_of_rangeUna medición está fuera del rango permitido
422invalid_gtinEl GTIN tiene longitud o dígito de control incorrectos
422validation_failedOtro valor incumple las reglas
429rate_limitedDemasiadas solicitudes; reintentar tras Retry-After
500internal_errorError por nuestra parte. Se puede reintentar con la misma clave de idempotencia.

Límites

Solicitudes por minuto y claveLive 300, prueba 60
Pasaportes por llamada1.000
Tamaño de una solicitud2 MB
Entradas por página de lista100, máximo 500
Claves activas por empresa10
Claves liveEnterprise con todos los permisos, Pro solo con los permisos para mediciones del BMS. Las claves de prueba están disponibles en todos los planes.

¿Prevé más de 100.000 pasaportes al año? Háblelo antes con nosotros.

Permisos

Cada clave recibe solo los permisos necesarios. Si falta uno, la API responde 403 e insufficient_scope. En la aplicación elige una plantilla: Todos los permisos, ERP, BMS o Solo lectura.

PermisoPermite
models:readLeer modelos y comprobar borradores
models:writeCrear y cambiar modelos
passports:readLeer pasaportes, eventos y componentes
passports:writeCrear y cambiar pasaportes, notificar eventos, instalar y sustituir componentes
telemetry:read telemetry:writeLeer y notificar mediciones
certificates:readLeer y descargar justificantes
suppliers:read suppliers:writeLeer proveedores y solicitudes, enviar y aceptar solicitudes
audit:readLeer el registro de auditoría

Solicitudes y respuestas

Las listas llegan por páginas con data, has_more y next_cursor. Pase next_cursor como cursor. Los campos desconocidos se rechazan para detectar erratas. Con PATCH, un campo ausente no cambia y null lo vacía.

EncabezadoSignificado
Idempotency-KeyReintento sin segundo registro, válido 7 días. El número de documento del ERP sirve bien.
X-Batterypass-Dry-Run: trueIncluso una clave live solo comprueba esta solicitud y no guarda nada.
X-Request-IdIdentificador de la llamada, también en errores y en el registro
X-RateLimit-Limit X-RateLimit-RemainingCuota del minuto actual
Idempotent-Replayedtrue si se repitió una respuesta guardada

SDK y consola API

Disponible

Dos clientes ligeros sin dependencias: repiten solicitudes con seguridad, recorren listas y dividen grandes volúmenes en llamadas de 1.000 pasaportes. Son archivos únicos para copiar a su proyecto. La consola API está en la aplicación en Ajustes, Claves API. Las bibliotecas forman parte del plan 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"])

Componentes

Disponible

Registre qué módulos, celdas o BMS están instalados. Un número de serie solo puede estar instalado una vez a la vez por pasaporte. Al sustituir, la pieza antigua queda registrada con su fecha de retirada.

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

Los tipos permitidos son pack, rack, module, cell, bms y other.

Mediciones

Disponible

Notifique datos del BMS, de uno en uno o hasta 1.000 mediciones con items. Lea la serie con since y until. Las mediciones están disponibles desde el plan Pro. Aparecen en la app y para los interesados, no en la página pública.

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

Justificantes

Disponible

Suba informes de ensayo, declaraciones de conformidad y documentos similares en el modelo: PDF, PNG o JPG hasta 10 MB. Por la API lee la lista y obtiene un enlace de descarga válido 15 minutos. Cada archivo tiene una suma 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"

Proveedores y solicitudes de datos

Disponible

Solicite valores a proveedores. Reciben un correo con un enlace válido 30 días e introducen solo los campos solicitados, sin cuenta. Los valores llegan al modelo solo tras su aprobación. Disponible desde Starter, máximo 20 solicitudes por hora.

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

Indique en el modelo un GTIN con dígito de control válido. La dirección GS1 de GTIN y número de serie lleva entonces a la página del pasaporte y aparece en la API como gs1_link. Sus códigos QR siguen con la dirección fija, pero puede crear los suyos desde el enlace GS1. El GTIN lo obtiene de GS1.

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

Registro de auditoría

Disponible

GET /audit devuelve todos los cambios registrados, por páginas y opcionalmente desde un momento con since. Los cambios por API llevan el nombre de la clave. En la aplicación, los administradores ven también las últimas llamadas.

Registro de la UE

Prueba en el registro real pendiente

La app crea el par de claves de su cuenta de servicio. La clave privada queda cifrada con nosotros. La clave pública va al registro. Su empresa debe verificarse antes allí con un sello cualificado.

Solo se envían pasaportes publicados y completos, en lotes de 100 como máximo. La app y la API muestran el estado. El registro lee la dirección del pasaporte como JSON; con su token de acceso recibe también las vistas protegidas. Los tokens no válidos se rechazan.

Creado a partir de los documentos técnicos de la Comisión del 30/10/2026 y probado con nuestro propio servidor de pruebas. La prueba en el registro real sigue pendiente.

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"

Publicación y prueba

Disponible

Con publish: false se crean borradores. No son accesibles públicamente hasta que los publique. Cada cambio en los datos maestros es una nueva versión enlazada por hash con la anterior. En /p/ID/proof cualquiera puede recalcular el estado público.

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

Versiones

La versión principal está en la ruta. Dentro de v1 solo se añaden campos y endpoints. Previsto, pero aún no disponible: webhooks.

VersionFechaCambio
1.2.02026-11-06Registro, publicación, versiones, más mediciones para las vistas protegidas de la UE
1.1.02026-11-06Componentes, mediciones, justificantes, proveedores, auditoría, pasaporte único, GS1, permisos detallados, encabezado dry-run, OpenAPI y endpoint de estado
1.0.02026-11-06Modelos, pasaportes, eventos, claves, modo de prueba, idempotencia

Preguntas frecuentes

Respuestas breves para la integración.

¿Cómo pruebo sin crear pasaportes reales?

Con una clave de prueba. Comprueba todo como en producción y no guarda nada.

¿Qué hago tras un timeout?

Envíe la misma solicitud con la misma clave de idempotencia. No se crea un segundo registro.

¿Cómo encuentro el pasaporte de un número de serie?

Con GET /passports?serial=… y, si hace falta, model_code.

¿Puedo eliminar pasaportes por API?

No. Notifique el fin de vida como evento con el estado waste.

¿Cuántos pasaportes son posibles?

1.000 por llamada, 300 llamadas por minuto. Su plan y nuestro alojamiento también fijan límites. Si prevé más de 100.000 al año, háblelo antes con nosotros.

Pruebe la importación con su archivo.

El plan Pilot es gratuito e incluye un modelo y 25 pasaportes al año.