How to Use This Tool
Webhook signatures prove that a payload was produced by someone holding the shared secret and that the bytes did not change in transit. Enter the secret and the exact raw request body. The tool imports the secret into the browser's Web Crypto API and signs the UTF-8 payload with HMAC-SHA-256.
Verify before parsing
The most common production bug is parsing JSON and then re-serializing it before verification. Whitespace, key order and line endings can change while the JSON meaning stays identical, producing different bytes and a different HMAC. Capture the raw request body, verify its signature, and only then parse or process the event.
Do not copy browser comparison into production
This page can compare text for debugging, but production verification must use a constant-time comparison such as the secure function provided by your runtime. Also reject missing signatures, use the provider's documented header and algorithm, store secrets outside source control, and consider replay protection when the provider supplies delivery IDs or timestamps.
Sources & assumptions
Tool Spec v2 · verified 2026-08-18. Platform rules and fees can change; the editable inputs remain authoritative for your account.
Official references
- GitHub Docs — Validating webhook deliveries (checked 2026-08-18)
- MDN — SubtleCrypto verify (checked 2026-08-18)
Model assumptions
- Secret and payload are interpreted as UTF-8 text; providers that decode hexadecimal or base64 secrets need a different input mode.
- Browser comparison helps debugging but production code still needs a constant-time comparison and verification of the raw request bytes.
