Para cada petición de webhook:
- Lee el cuerpo RAW tal cual lo envía el servidor (ojo a middlewares que lo parsean/modifican).
- Calcula
HMAC_SHA256(secret, rawBody).
- Convierte a hex lowercase y compón
sha256=<hex>.
- Compara de forma tiempo‑constante con el valor de la cabecera
X-Integration-Signature.
Rechaza la petición si el skew de tiempo del header Date (si se envía) supera 5 minutos.
Node.js (Express)
Python (FastAPI / Starlette)
Reintentos e idempotencia
Si tu endpoint responde >=500 o no responde a tiempo, MarIA reintentará la entrega.
Errores frecuentes
Leer req.body ya parseado pierde el RAW. Usa middleware para conservar el buffer antes de cualquier parser.