API v1Para desarrolladores

Genera DeCAs desde tu programa.

REST, JSON y un token. Sin SDK, sin OAuth de tres pasos y sin dependencias que instalar. Si tu software ya sabe hacer una petición HTTP, ya sabe emitir DeCAs.

Lo básico

  • URL base: https://decaclick.com/api/v1
  • Autenticación: Authorization: Bearer tu-token. El token se crea en tu panel, en API.
  • Formato: JSON de entrada y de salida, siempre UTF-8.
  • Límite: 300 peticiones por hora y token.
  • Disponible en: planes Basic y Premium.

La API usa exactamente el mismo generador que la web: mismos requisitos del artículo 6, misma cuota de tu plan, mismo PDF con QR y misma URL única. No es una puerta trasera.

Crear un DeCA

POST /api/v1/decas

curl -X POST https://decaclick.com/api/v1/decas \
  -H "Authorization: Bearer dk_tu_token" \
  -H "Content-Type: application/json" \
  -d '{
    "cargador": {
      "nombre": "Cerámicas Nules SL",
      "nif": "B12345674",
      "domicilio": "Pol. Ind. Nules, Castellón"
    },
    "transportista": { "nombre": "Transportes Pérez", "nif": "27476156B" },
    "fecha_servicio": "2026-10-06",
    "matricula_tractora": "1234 KLM",
    "matricula_remolque": "R1234BCD",
    "envios": [
      {
        "origen": "Nules (Castellón)",
        "destino": "Getafe (Madrid)",
        "naturaleza": "Azulejos en palet",
        "peso": "18000 kg"
      }
    ]
  }'

Responde 201 con el documento creado: su token, la url única de descarga (la del QR) y la url_qr del código como imagen.

Varios envíos en un mismo documento (agrupación) solo si cargador y transportista coinciden en todos, como exige la norma, y con plan Basic o Premium.

Consultar

  • GET /api/v1/estado — comprueba el token y devuelve plan y cuota.
  • GET /api/v1/decas — lista los tuyos. Filtros: desde, hasta, cargador_nif, limite, pagina.
  • GET /api/v1/decas/{token} — uno concreto.

El filtro por cargador_nif existe por un motivo muy concreto: es el que necesitas para facturar a un cliente todos sus portes de un periodo.

Errores

Siempre con la misma forma, y con un codigo estable que puedes programar aunque cambiemos el texto:

{ "error": { "codigo": "datos_invalidos",
            "mensaje": "Faltan datos obligatorios o son incorrectos.",
            "detalles": ["Falta el domicilio del cargador (art. 6.a)."] } }

¿Integrando y algo no cuadra? Escríbenos desde tu panel, en Soporte: contestamos con el ejemplo funcionando, no con un enlace a esta misma página.