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.