Skip to main content
Webhooks are signed with the Standard Webhooks scheme: HMAC-SHA256 over the message id, timestamp and raw body, using your endpoint’s secret. Use a Standard Webhooks library rather than writing your own; each one checks the signature and rejects timestamps more than five minutes old, which stops replays.
Verify against the raw request body, byte for byte. If your framework parses JSON first and you re-serialize it, the signature won’t match. Parse the body only after verifying it.
Get the secret from the dashboard or GET /v1/webhooks/endpoints/{id}/secret. Pass it with its whsec_ prefix; the libraries accept it as is.

Rotating the secret

POST /v1/webhooks/endpoints/{id}/secret/rotate issues a new secret. For a short while FastCAC signs with both the old and the new secret (the webhook-signature header carries both), so you can deploy the new secret without dropping events.