Headers
Canonical string
Same algorithm as inbound API signing, but the path is your webhook URL path:
HMAC-SHA256 with your
enc_* encryption key.
Node.js verification
Express handler pattern
Timestamp validation
Reject requests with timestamps outside a reasonable window (e.g. ±5 minutes) to limit replay attacks.Common failures
- Parsing JSON before verification (body must be raw bytes)
- Wrong path (must match registered
webhook_urlpathname exactly) - Using
sk_*instead ofenc_*for HMAC