Skip to main content
Every delivery carries:
v1 is the hex HMAC-SHA256 of <t>.<raw body>, keyed by your subscription’s signing secret.
1

Read the raw body

Compute the signature over the exact bytes received, before any JSON parsing.
2

Recompute and compare

HMAC-SHA256 t + "." + body with your secret, and compare it with v1 in constant time.
3

Reject stale deliveries

Reject the request if t is more than five minutes from your clock, so a captured delivery cannot be replayed later.
Frameworks that parse JSON before your handler runs change the bytes. Read the raw body for verification, for example with express.raw({ type: 'application/json' }) in Express.