batterypass
Producto
Cómo funciona Funciones Comparación
Soluciones
Almacenamiento (BESS) Vehículos ligeros Baterías industriales Vehículos eléctricos Proveedores
Cumplimiento
Resumen de cumplimiento Reglamento de Baterías de la UE Test de obligaciones Seguridad y privacidad
Recursos
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
Precios Sobre nosotros
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.

50.000pasaportes por archivo
38campos 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 8 MB y 50.000 filas por archivo.
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.batterypass2027.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.batterypass2027.eu/p/{PASS-ID}
https://app.batterypass2027.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')

Campos de datos

Disponible

Estos 38 campos existen hoy en la aplicación, de forma simplificada según el anexo XIII. Se mantienen en el formulario del modelo. Las categorías son lmt, industrie, ev, sli y geraet.

Datos generales6
CampoNombre técnicoTipoVisible paraObligatorio
Fabricante (nombre)manufacturer_nametextPúblicoTodas las categorías con pasaporte
Fabricante (dirección)manufacturer_addresstextPúblicoTodas las categorías con pasaporte
Contacto (correo o sitio web)manufacturer_contacttextPúblicoTodas las categorías con pasaporte
Lugar de fabricación (predeterminado)manufacturing_placetextPúblicoTodas las categorías con pasaporte
Pesoweight_kgnumber · kgPúblicoTodas las categorías con pasaporte
GarantíawarrantytextPúblicoOpcional
Materiales y sustancias6
CampoNombre técnicoTipoVisible paraObligatorio
Química de la bateríachemistrytextPúblicoTodas las categorías con pasaporte
Sustancias peligrosashazardous_substancestextPúblicoTodas las categorías con pasaporte
Materias primas críticascritical_raw_materialstextPú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 durabilidad11
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
Energía nominalrated_energy_kwhnumber · kWhPúblicoTodas las categorías con pasaporte
Potencia (original)rated_power_wnumber · WPúblicoindustrie, ev
Vida útil previstaexpected_lifetime_cyclesnumber · ZyklenPú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
Eficiencia energética (ida y vuelta)round_trip_efficiency_pctnumber · %Públicoindustrie, ev
Resistencia internainternal_resistance_mohmnumber · mΩPúblicoOpcional
Huella de carbono y contenido reciclado6
CampoNombre técnicoTipoVisible paraObligatorio
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
Porcentaje de contenido renovablerenewable_content_pctnumber · %PúblicoOpcional
Conformidad y etiquetado4
CampoNombre técnicoTipoVisible paraObligatorio
Declaración UE de conformidad (enlace)doc_urlurlPúblicoTodas las categorías con pasaporte
Etiquetado y símboloslabels_symbolstextPúblicoTodas las categorías con pasaporte
Informe de diligencia debida (enlace)due_diligence_urlurlPúblicoObligación posterior
Devolución y eliminaciónend_of_life_infotextPúblicoTodas las categorías con pasaporte
Desmontaje, reparación y recambios4
CampoNombre técnicoTipoVisible paraObligatorio
Instrucciones de desmontajedismantling_infotextInterés legítimoTodas las categorías con pasaporte
Números de pieza de los componentespart_numberstextInterés legítimoTodas las categorías con pasaporte
Fuente de recambiosspare_parts_contacttextInterés legítimoTodas las categorías con pasaporte
Medidas de seguridadsafety_measurestextInterés legítimoTodas las categorías con pasaporte
Informes de ensayo1
CampoNombre técnicoTipoVisible paraObligatorio
Informes de ensayo (enlaces o referencias)test_reportstextAutoridades 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.batterypass2027.eu/api/v1

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

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.batterypass2027.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 Pro o Enterprise
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 livePro y Enterprise. Las claves de prueba están 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.

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

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 Pro. Aparecen en la aplicación, no en la página pública.

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

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.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

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.batterypass2027.eu/01/{GTIN}/21/{SERIENNUMMER}
https://app.batterypass2027.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.

Versiones

La versión principal está en la ruta. Dentro de v1 solo se añaden campos y endpoints. Previstos pero aún no disponibles: webhooks, acceso para autoridades y recicladores y una cadena de cambios verificable.

VersionFechaCambio
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.