Skip to main content
Every delivery is an HTTPS POST with a JSON body and these headers:

Verify

  1. Read the raw request body (do not re-serialize JSON)
  2. Read Keette-Timestamp and Keette-Signature
  3. Reject if the timestamp is older than 5 minutes (replay window)
  4. Compute HMAC-SHA256(signing_secret, timestamp + "." + raw_body) as hex
  5. Compare to the value after v1= with a constant-time compare
Use the signing secret from Settings → Developers → Webhooks for that environment.
Regenerate the secret in Settings → Developers → Webhooks if it may be compromised — old signatures stop verifying after rotation.