Skip to main content

Headers

Cada entrega incluye estos headers: Si tu suscripción los tiene configurados, también se envían:

Cómo se genera la firma

Pruff firma cada entrega con el secret de tu suscripción usando HMAC-SHA256. El mensaje firmado es el timestamp, un punto y el body exacto de la request:
El resultado se envía en X-Webhook-Signature con el formato t={timestamp},v1={firma}. El timestamp de t es el mismo que el de X-Webhook-Timestamp.
Los reintentos reenvían la entrega original sin volver a firmarla: el timestamp y la firma no cambian entre intentos. El cuarto intento llega unos 21 minutos después del timestamp. Si rechazas entregas antiguas, acepta al menos 30 minutos de antigüedad o perderás los reintentos.

Cómo validar una entrega

1

Lee el body sin parsear

Calcula la firma sobre los bytes que recibiste. Si parseas el JSON y lo vuelves a serializar, el resultado puede cambiar y la firma no coincidirá.
2

Extrae t y v1 de X-Webhook-Signature

Separa el header por comas y cada parte por el primer =.
3

Calcula la firma esperada

HMAC-SHA256 con tu secret sobre {t}.{body}, en hexadecimal.
4

Compara en tiempo constante

Usa una comparación de tiempo constante para no filtrar información por tiempos de respuesta. Si no coinciden, rechaza la entrega.
5

Opcional: valida la antigüedad

Rechaza entregas cuyo t tenga más de 30 minutos, para acotar la reutilización de entregas interceptadas.