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.
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.
- EmpresaSu cuenta con usuarios y plan
- ModeloDatos maestros, una vez por modelo
- PasaporteUna batería con número de serie y dirección propia
- EventoReparación, cambio de uso o residuo
| Vía | Para qué | Estado |
|---|---|---|
| Importación CSV | Traer números de serie desde ERP, MES o Excel | Disponible |
| Exportación CSV | Devolver identificadores y direcciones a sus sistemas | Disponible |
| Dirección del pasaporte y código QR | Crear etiquetas propias o enlazar pasaportes | Disponible |
| API REST | Crear modelos y pasaportes automáticamente, sin subidas manuales | Disponible |
Importación CSV
DisponibleLa vía habitual desde el ERP: exportar una lista y subirla a un modelo. Cada número de serie nuevo recibe un pasaporte.
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
| Regla | Especificación |
|---|---|
| Codificación | UTF-8 con o sin BOM. Windows-1252 se detecta y se convierte. |
| Separador | Punto y coma, coma o tabulador. Decide la primera línea. |
| Tamaño | Máximo 8 MB y 50.000 filas por archivo. |
| Estructura | Una batería por fila, sin saltos de línea dentro de un campo. |
| Encabezado | Opcional. Con encabezado, las columnas pueden ir en cualquier orden y las adicionales se ignoran. Sin él, se aplica el orden de la tabla inferior. |
| Columna | Campo | Nombres de columna reconocidos | Obligatorio | Regla |
|---|---|---|---|---|
| 1 | Número de serie | seriennummer, serialnummer, serial, serial number, serialnumber, serial no, sn, serien-nr, seriennr, sernr | Sí | Máximo 120 caracteres: letras, dígitos, espacios y - _ . / : |
| 2 | Fecha de fabricación | herstelldatum, produktionsdatum, fertigungsdatum, manufacturing date, production date, date, datum | Opcional | 2027-03-01, 01.03.2027, 1.3.2027, 01/03/2027, 1/3/2027 o 2027/03/01 |
| 3 | Lote | charge, chargennummer, batch, lot, los | Opcional | Máximo 120 caracteres |
| 4 | Lugar de fabricación | herstellort, produktionsort, werk, place, plant, manufacturing place | Opcional | Má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
DisponibleCompruebe 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.
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;freiExportación CSV
DisponibleEn 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.
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
DisponibleCada pasaporte tiene una dirección fija. Un código QR, un enlace de un manual o una entrada del ERP no necesitan más.
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
# 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
DisponibleEstos 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
| Campo | Nombre técnico | Tipo | Visible para | Obligatorio |
|---|---|---|---|---|
| Fabricante (nombre) | manufacturer_name | text | Público | Todas las categorías con pasaporte |
| Fabricante (dirección) | manufacturer_address | text | Público | Todas las categorías con pasaporte |
| Contacto (correo o sitio web) | manufacturer_contact | text | Público | Todas las categorías con pasaporte |
| Lugar de fabricación (predeterminado) | manufacturing_place | text | Público | Todas las categorías con pasaporte |
| Peso | weight_kg | number · kg | Público | Todas las categorías con pasaporte |
| Garantía | warranty | text | Público | Opcional |
Materiales y sustancias6
| Campo | Nombre técnico | Tipo | Visible para | Obligatorio |
|---|---|---|---|---|
| Química de la batería | chemistry | text | Público | Todas las categorías con pasaporte |
| Sustancias peligrosas | hazardous_substances | text | Público | Todas las categorías con pasaporte |
| Materias primas críticas | critical_raw_materials | text | Público | Todas las categorías con pasaporte |
| Composición del cátodo | composition_cathode | text | Interés legítimo | Todas las categorías con pasaporte |
| Composición del ánodo | composition_anode | text | Interés legítimo | Todas las categorías con pasaporte |
| Composición del electrolito | composition_electrolyte | text | Interés legítimo | Todas las categorías con pasaporte |
Rendimiento y durabilidad11
| Campo | Nombre técnico | Tipo | Visible para | Obligatorio |
|---|---|---|---|---|
| Capacidad nominal | rated_capacity_ah | number · Ah | Público | Todas las categorías con pasaporte |
| Tensión nominal | nominal_voltage_v | number · V | Público | Todas las categorías con pasaporte |
| Tensión mínima | min_voltage_v | number · V | Público | Todas las categorías con pasaporte |
| Tensión máxima | max_voltage_v | number · V | Público | Todas las categorías con pasaporte |
| Energía nominal | rated_energy_kwh | number · kWh | Público | Todas las categorías con pasaporte |
| Potencia (original) | rated_power_w | number · W | Público | industrie, ev |
| Vida útil prevista | expected_lifetime_cycles | number · Zyklen | Público | Todas las categorías con pasaporte |
| Rango de temperatura desde | temp_min_c | number · °C | Público | Todas las categorías con pasaporte |
| Rango de temperatura hasta | temp_max_c | number · °C | Público | Todas las categorías con pasaporte |
| Eficiencia energética (ida y vuelta) | round_trip_efficiency_pct | number · % | Público | industrie, ev |
| Resistencia interna | internal_resistance_mohm | number · mΩ | Público | Opcional |
Huella de carbono y contenido reciclado6
| Campo | Nombre técnico | Tipo | Visible para | Obligatorio |
|---|---|---|---|---|
| Huella de carbono | carbon_footprint | number · kg CO₂e/kWh | Público | Obligación posterior |
| Contenido de cobalto reciclado | recycled_cobalt_pct | number · % | Público | Obligación posterior |
| Contenido de litio reciclado | recycled_lithium_pct | number · % | Público | Obligación posterior |
| Contenido de níquel reciclado | recycled_nickel_pct | number · % | Público | Obligación posterior |
| Contenido de plomo reciclado | recycled_lead_pct | number · % | Público | Obligación posterior |
| Porcentaje de contenido renovable | renewable_content_pct | number · % | Público | Opcional |
Conformidad y etiquetado4
| Campo | Nombre técnico | Tipo | Visible para | Obligatorio |
|---|---|---|---|---|
| Declaración UE de conformidad (enlace) | doc_url | url | Público | Todas las categorías con pasaporte |
| Etiquetado y símbolos | labels_symbols | text | Público | Todas las categorías con pasaporte |
| Informe de diligencia debida (enlace) | due_diligence_url | url | Público | Obligación posterior |
| Devolución y eliminación | end_of_life_info | text | Público | Todas las categorías con pasaporte |
Desmontaje, reparación y recambios4
| Campo | Nombre técnico | Tipo | Visible para | Obligatorio |
|---|---|---|---|---|
| Instrucciones de desmontaje | dismantling_info | text | Interés legítimo | Todas las categorías con pasaporte |
| Números de pieza de los componentes | part_numbers | text | Interés legítimo | Todas las categorías con pasaporte |
| Fuente de recambios | spare_parts_contact | text | Interés legítimo | Todas las categorías con pasaporte |
| Medidas de seguridad | safety_measures | text | Interés legítimo | Todas las categorías con pasaporte |
Informes de ensayo1
| Campo | Nombre técnico | Tipo | Visible para | Obligatorio |
|---|---|---|---|---|
| Informes de ensayo (enlaces o referencias) | test_reports | text | Autoridades y organismos de control | Todas las categorías con pasaporte |
API REST
DisponibleCree 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
- Inicie sesión como administrador y abra Ajustes y luego Claves API.
- Cree una clave de prueba. Solo se muestra una vez; guárdela como una contraseña.
- Compruebe la conexión con GET /me. Si la API responde, la clave y la ruta de red son correctas.
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étodo | Ruta | Para qué |
|---|---|---|
| GET | /me | Prueba de conexión: empresa, plan, permisos y cuota restante |
| GET | /fields | Catálogo de campos con obligaciones por categoría |
| GET | /models | Listar modelos, también por código |
| POST | /models | Crear un modelo |
| GET | /models/{id} | Leer un modelo con sus datos y campos obligatorios que faltan |
| PATCH | /models/{id} | Cambiar datos maestros |
| GET | /passports | Listar pasaportes, también por número de serie o fecha de cambio |
| POST | /passports/batch | Crear hasta 1.000 pasaportes en una llamada |
| GET | /passports/{id} | Leer un pasaporte con dirección y estado |
| GET | /passports/{id}/events | Leer los eventos de un pasaporte |
| POST | /passports/{id}/events | Notificar un evento, p. ej., reparación o residuo |
| POST | /models/validate | Comprobar un borrador sin guardar |
| POST | /passports | Crear un pasaporte |
| PATCH | /passports/{id} | Cambiar fecha, lote o lugar |
| GET | /passports/{id}/components | Leer componentes |
| POST | /passports/{id}/components | Instalar un componente |
| PATCH | /passports/{id}/components/{cid} | Cambiar o retirar un componente |
| POST | /passports/{id}/components/{cid}/replace | Sustituir un componente |
| GET | /passports/{id}/telemetry | Leer serie de mediciones |
| POST | /passports/{id}/telemetry | Notificar mediciones |
| GET | /certificates | Listar justificantes |
| GET | /certificates/{id} | Justificante con enlace de descarga |
| GET | /suppliers | Listar proveedores |
| GET | /supplier-requests | Listar solicitudes |
| POST | /supplier-requests | Enviar una solicitud |
| GET | /supplier-requests/{id} | Leer una solicitud con valores |
| POST | /supplier-requests/{id}/accept | Aceptar valores en el modelo |
| GET | /audit | Leer 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" }
]
}'
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);
Respuesta
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
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 | Significado |
|---|---|---|
400 | invalid_request | La solicitud no es JSON válido o contiene campos desconocidos |
401 | unauthorized | Falta la clave o no es válida |
403 | insufficient_scope | A la clave le falta el permiso necesario |
403 | plan_required | Las claves live requieren el plan Pro o Enterprise |
403 | email_not_verified | El correo de la empresa aún no está confirmado |
403 | quota_exceeded | La cuota del plan está agotada |
404 | not_found | El objeto no existe o pertenece a otra empresa |
409 | duplicate_serial | El número de serie ya existe en este modelo (con on_conflict: fail) |
409 | duplicate_model | El código del modelo ya está en uso |
409 | idempotency_conflict | La clave de idempotencia se usó para otra solicitud |
413 | payload_too_large | La solicitud supera los 2 MB |
422 | invalid_serial | Un número de serie no es válido; la respuesta indica el campo. No se guarda nada. |
422 | invalid_date | Una fecha no sigue el formato AAAA-MM-DD |
422 | out_of_range | Una medición está fuera del rango permitido |
422 | invalid_gtin | El GTIN tiene longitud o dígito de control incorrectos |
422 | validation_failed | Otro valor incumple las reglas |
429 | rate_limited | Demasiadas solicitudes; reintentar tras Retry-After |
500 | internal_error | Error por nuestra parte. Se puede reintentar con la misma clave de idempotencia. |
Límites
| Solicitudes por minuto y clave | Live 300, prueba 60 |
| Pasaportes por llamada | 1.000 |
| Tamaño de una solicitud | 2 MB |
| Entradas por página de lista | 100, máximo 500 |
| Claves activas por empresa | 10 |
| Claves live | Pro 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.
| Permiso | Permite |
|---|---|
models:read | Leer modelos y comprobar borradores |
models:write | Crear y cambiar modelos |
passports:read | Leer pasaportes, eventos y componentes |
passports:write | Crear y cambiar pasaportes, notificar eventos, instalar y sustituir componentes |
telemetry:read telemetry:write | Leer y notificar mediciones |
certificates:read | Leer y descargar justificantes |
suppliers:read suppliers:write | Leer proveedores y solicitudes, enviar y aceptar solicitudes |
audit:read | Leer 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.
| Encabezado | Significado |
|---|---|
Idempotency-Key | Reintento sin segundo registro, válido 7 días. El número de documento del ERP sirve bien. |
X-Batterypass-Dry-Run: true | Incluso una clave live solo comprueba esta solicitud y no guarda nada. |
X-Request-Id | Identificador de la llamada, también en errores y en el registro |
X-RateLimit-Limit X-RateLimit-Remaining | Cuota del minuto actual |
Idempotent-Replayed | true si se repitió una respuesta guardada |
SDK y consola API
DisponibleDos 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"])
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);
}
Componentes
DisponibleRegistre 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 -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
DisponibleNotifique 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 -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}'
| Campo | Rango |
|---|---|
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 |
Justificantes
DisponibleSuba 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 -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
DisponibleSolicite 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 -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
DisponibleIndique 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.
https://app.batterypass2027.eu/01/{GTIN}/21/{SERIENNUMMER}
https://app.batterypass2027.eu/01/04012345678901/21/SN-0001
Registro de auditoría
DisponibleGET /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.
| Version | Fecha | Cambio |
|---|---|---|
1.1.0 | 2026-11-06 | Componentes, mediciones, justificantes, proveedores, auditoría, pasaporte único, GS1, permisos detallados, encabezado dry-run, OpenAPI y endpoint de estado |
1.0.0 | 2026-11-06 | Modelos, 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.