REST · OpenAPI 3
API para desarrolladores
Emite, modifica y consulta DeCA desde tu TMS, ERP o script. La web usa exactamente la misma API.
Autenticación
Cada empresa puede crear claves secretas desde el panel (solo propietarios). Envíalas en la cabecera Authorization como token Bearer. Las claves empiezan por deca_live_ y solo se muestran una vez.
- Entra en el panel y ve a Claves de API.
- Crea una clave con un nombre y, si quieres, una fecha de caducidad.
- Guárdala en un gestor de secretos: no podremos volver a mostrártela.
Referencia completa
Swagger UI (probar en el navegador) ↗ReDoc (lectura) ↗https://api.deca.routyn.comEjemplo: emitir un DeCA
curl -X POST https://api.deca.routyn.com/api/v1/decas \
-H "Authorization: Bearer $DECA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_ref": "TRIP-2026-1012-A",
"data": {
"shipper_name": "Logística Ibérica S.L.",
"shipper_tax_id": "B12345678",
"shipper_address": "Calle Mayor 10, 28013 Madrid",
"carrier_name": "Transportes Ejemplo S.A.",
"carrier_tax_id": "A87654321",
"vehicle_plate": "1234 KLM",
"transport_date": "2026-10-12",
"lines": [
{
"origin": "Polígono Industrial Las Mercedes, 28022 Madrid",
"destination": "Puerto de Valencia, 46024 Valencia",
"goods": "Palés de bebidas",
"weight_kg": 12400
}
]
}
}'import os, requests
resp = requests.post(
"https://api.deca.routyn.com/api/v1/decas",
headers={"Authorization": f"Bearer {os.environ['DECA_API_KEY']}"},
json={
"external_ref": "TRIP-2026-1012-A",
"data": {
"shipper_name": "Logística Ibérica S.L.",
"shipper_tax_id": "B12345678",
"shipper_address": "Calle Mayor 10, 28013 Madrid",
"carrier_name": "Transportes Ejemplo S.A.",
"carrier_tax_id": "A87654321",
"vehicle_plate": "1234 KLM",
"transport_date": "2026-10-12",
"lines": [
{
"origin": "Polígono Industrial Las Mercedes, 28022 Madrid",
"destination": "Puerto de Valencia, 46024 Valencia",
"goods": "Palés de bebidas",
"weight_kg": 12400
}
]
}
},
timeout=30,
)
if not resp.ok:
problem = resp.json() # application/problem+json
raise RuntimeError(f"{problem['code']}: {problem['detail']}")
deca = resp.json()
print(deca["id"], deca["url"]) # url = the QR linkconst res = await fetch("https://api.deca.routyn.com/api/v1/decas", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DECA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"external_ref": "TRIP-2026-1012-A",
"data": {
"shipper_name": "Logística Ibérica S.L.",
"shipper_tax_id": "B12345678",
"shipper_address": "Calle Mayor 10, 28013 Madrid",
"carrier_name": "Transportes Ejemplo S.A.",
"carrier_tax_id": "A87654321",
"vehicle_plate": "1234 KLM",
"transport_date": "2026-10-12",
"lines": [
{
"origin": "Polígono Industrial Las Mercedes, 28022 Madrid",
"destination": "Puerto de Valencia, 46024 Valencia",
"goods": "Palés de bebidas",
"weight_kg": 12400
}
]
}
}),
});
if (!res.ok) {
const problem = await res.json(); // application/problem+json
throw new Error(`${problem.code}: ${problem.detail}`);
}
const deca = await res.json();
console.log(deca.id, deca.url); // url = the QR linkEndpoints principales
| POST | /api/v1/decas | Emitir un DeCA (idempotente por external_ref). |
| GET | /api/v1/decas | Listar DeCA, con filtro por estado. |
| PATCH | /api/v1/decas/{id} | Modificar indicando un motivo. |
| POST | /api/v1/decas/{id}/complete | Marcar como finalizado. |
| GET | /api/v1/decas/{id}/pdf | Descargar el PDF de cualquier versión. |
| GET | /api/v1/carriers | Datos maestros: también shippers, customers, drivers, vehicles y trailers. |
Errores
Todas las respuestas de error usan application/problem+json con un campo code estable. Decide en función de code, nunca del texto de detail.
{"type": "about:blank", "title": "Conflict", "status": 409,
"code": "deca_not_editable", "detail": "DeCA is completed"}Deja de pagar por cada DeCA
Regístrate hoy y emite tu primer documento en unos minutos. Gratis, con tu equipo y con API.