Skip to main content
Every delivery carries these headers: The signature is an HMAC-SHA256 over the timestamp and the raw request body, keyed with your endpoint’s secret (whsec_…, shown on the Developers page):
Reject the delivery when the recomputed HMAC differs, or when the timestamp is older than a few minutes (replay guard).
Compute the HMAC over the raw body bytes exactly as received. Parsing and re-serializing the JSON will change key order or whitespace and break the signature.
Rotating the secret (Developers page or POST /admin/api/v1/settings/webhooks/{id}/rotate-secret) invalidates old signatures immediately.