Conecta tu ERP y emite sin teclear
Tu programa manda el porte, DecaFirma emite el DeCA y el albarán con su QR y te devuelve el enlace y el PDF. Lo mismo que en pantalla, con las mismas comprobaciones.
¿Usas a3ERP, Holded, Odoo u otro? Si prefieres que lo conectemos nosotros, escríbenos: es lo que hacemos en Francodesystems.
1. La clave
Quien administra la empresa la crea en Configuración → Conectar tu programa (API). Se enseña una sola vez. Va en cada petición:
Authorization: Bearer dfk_…
Lo que se emite con una clave va a nombre de quien la creó. Si esa persona deja de poder emitir, la clave deja de valer. Como mucho 120 peticiones por minuto. Durante la prueba, los documentos salen marcados como DEMO, igual que en pantalla.
2. Crear el envío y emitir
POST /api/v1/envios
curl -X POST https://decafirma.com/api/v1/envios \
-H "Authorization: Bearer dfk_…" \
-H "Content-Type: application/json" \
-d '{
"referencia": "PED-4521",
"shipperName": "Cerámicas Levante, S.L.",
"shipperTaxId": "B98765431",
"shipperAddress": "Camí Collet 14, 12200 Onda",
"originCity": "Onda",
"destinationCity": "Riba-roja de Túria",
"consigneeName": "Almacenes Pérez, S.A.",
"goodsDescription": "Palés de azulejo",
"weightKg": 9000,
"packages": 12,
"transportDate": "2026-10-05",
"plate": "1234KLM",
"driverName": "Paco Martínez",
"emitir": "ambos"
}'Respuesta (201):
{
"id": "cmu…",
"referencia": "PED-4521",
"estado": "documentado",
"documentos": [
{ "id": "cmv…", "tipo": "deca", "referencia": "DECA-…", "version": 1, "estado": "vigente",
"demo": false, "url": "https://decafirma.com/d/…", "pdf": "https://decafirma.com/api/v1/documentos/cmv…/pdf" },
{ "id": "cmw…", "tipo": "albaran", "referencia": "ALB-2026-0042", "version": 1, "estado": "vigente",
"demo": false, "url": "https://decafirma.com/d/…", "urlFirma": "https://decafirma.com/d/…/firmar", "firmado": null,
"pdf": "https://decafirma.com/api/v1/documentos/cmw…/pdf" }
]
}url es lo que abre el QR: se puede mandar tal cual al conductor. urlFirma es donde firma el cliente la entrega.
Los campos
Los mismos del formulario de emitir. Un campo que no conocemos devuelve error, para que una errata no se pierda en silencio.
- referencia
- Tu número de pedido o porte. Si ya existe un envío con esa referencia, no se crea otro: se devuelve el que hay.
- shipperName, shipperTaxId, shipperAddress
- Cargador contractual (quien contrata el porte): nombre, NIF y domicilio. Obligatorios para el DeCA.
- carrierName, carrierTaxId
- Transportista efectivo. Si no los mandas, eres tú.
- carrierPhone, carrierEmail
- Para mandarle el QR. No se imprimen.
- originCity, destinationCity
- Municipio de origen y de destino. Obligatorios.
- originName, originAddress, originPostcode, originProvince, originPhone, originContact
- El resto del origen (y lo mismo con destination…).
- consigneeName, consigneeTaxId, consigneeContact, consigneeContactPhone, consigneeEmail
- Destinatario. Obligatorio solo para el albarán.
- goodsDescription, weightKg, packages
- Mercancía, peso en kilos y bultos. Mercancía y peso son obligatorios.
- transportDate, transportTime
- Fecha AAAA-MM-DD (obligatoria) y hora HH:MM.
- plate, trailerPlate
- Matrícula de la tractora (obligatoria) y del remolque.
- driverName, driverTaxId, driverPhone
- Conductor. Con el teléfono se le puede mandar el QR.
- noteKind
- Tipo de albarán: DELIVERY (entrega, por defecto), PICKUP (recogida) o SERVICE.
- freightTerms, importe, terms, notes
- Portes (PREPAID o COLLECT), importe en euros, condiciones y observaciones.
- lineas
- Líneas del albarán: [{ "descripcion", "referencia", "bultos", "pesoKg" }].
- numeroAlbaran
- El número de albarán de tu programa. Sin él, lo numera DecaFirma.
- autorizacionEspecial
- true si el vehículo circula con autorización especial.
- emitir
- «deca», «albaran», «ambos» o «ninguno» (por defecto: solo se guarda).
3. Consultar y descargar
# El envío, sus documentos y si el albarán está firmado
curl https://decafirma.com/api/v1/envios/cmu… -H "Authorization: Bearer dfk_…"
# El PDF (última versión)
curl https://decafirma.com/api/v1/documentos/cmv…/pdf -H "Authorization: Bearer dfk_…" -o DECA.pdf
# Emitir más tarde (si lo creaste sin emitir o faltaba algo)
curl -X POST https://decafirma.com/api/v1/envios/cmu…/emitir -H "Authorization: Bearer dfk_…" \
-H "Content-Type: application/json" -d '{"tipo": "deca"}'Errores
Siempre en JSON, con un mensaje que se entiende: { "error": "…", "detalles": [...] }.
- 400: la petición no es válida (dice qué campo).
- 401: falta la clave o está revocada. 403: quien la creó ya no puede emitir.
- 422: el envío se ha creado pero no se ha podido emitir (falta un dato, un NIF mal…). Viene el envío y el motivo: lo arreglas y llamas a
/emitir. - 429: más de 120 peticiones en un minuto.