Saltar al contenido

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.

  1. Entra en el panel y ve a Claves de API.
  2. Crea una clave con un nombre y, si quieres, una fecha de caducidad.
  3. 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.com

Ejemplo: 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 link
const 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 link

Endpoints principales

POST/api/v1/decasEmitir un DeCA (idempotente por external_ref).
GET/api/v1/decasListar DeCA, con filtro por estado.
PATCH/api/v1/decas/{id}Modificar indicando un motivo.
POST/api/v1/decas/{id}/completeMarcar como finalizado.
GET/api/v1/decas/{id}/pdfDescargar el PDF de cualquier versión.
GET/api/v1/carriersDatos 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.

Crear cuenta y obtener una clave