QAPI está en beta — la API puede cambiar sin previo aviso. Usa sandbox para pruebas.
QAPIQAPIDocs · by DTEVIA
Errores

INTEGRITY_CHECK_FAILED (400)

El hash enviado en X-Content-SHA256 no coincide con el cuerpo del request recibido por QAPI.

INTEGRITY_CHECK_FAILED

HTTP 400 Bad Request

Enviaste el header opcional X-Content-SHA256 y su valor no coincide con el SHA-256 del body que QAPI recibió. El request se rechaza antes de procesarse: o el cálculo del hash en tu cliente está mal, o el body fue alterado en tránsito.

Ejemplo

{
  "type": "https://docs.dtevia.com.gt/errors/integrity-check-failed",
  "title": "INTEGRITY_CHECK_FAILED",
  "status": 400,
  "detail": "El hash enviado en X-Content-SHA256 no coincide con el cuerpo de la petición."
}

Cómo resolverlo

Calcula el SHA-256 en hex (minúsculas o mayúsculas, QAPI lo normaliza) sobre el body exacto que envías — los mismos bytes, sin re-serializar:

import crypto from 'crypto';

const body = JSON.stringify(payload);
const hash = crypto.createHash('sha256').update(body).digest('hex');

await fetch('https://api.dtevia.com.gt/v1/invoices', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
    'X-Content-SHA256': hash,
  },
  body, // usa la MISMA string que hasheaste
});

Errores típicos:

  • Serializar dos veces: hashear JSON.stringify(payload) pero enviar el objeto a una librería HTTP que lo serializa de nuevo (orden de claves o espaciado distinto → hash distinto)
  • Codificación: el hash debe calcularse sobre los bytes UTF-8 del body
  • Body modificado por un proxy/middleware de tu lado antes de salir

El header es opcional: si no lo envías, no hay verificación de integridad del request. Ver la guía de Integridad.

On this page