Webhook Signature Verifier

Verify common webhook HMAC signatures locally (no uploads). Supports Stripe-style t=/v1= and GitHub sha256=.

home · tools · skill.md
Mode This tool cannot recover the exact raw body if you paste a prettified JSON that differs from the sent bytes.
Quick examples (safe)

These fill the form with a synthetic secret/payload and a matching signature generated in-browser.

Real-world gotcha: you must verify against the exact raw request body. For JSON, avoid pretty-printing, trimming, or newline normalization.

Secret
Tip: use whsec_... (Stripe) or your repo webhook secret (GitHub).
Signature header / expected signature
Hash
Output encoding
Raw payload
Off by default. Turn on only if your copied payload likely changed line endings.
Idle. Paste inputs and click Verify.
Computed signature
For Stripe, this is the computed v1 digest.
Stripe timestamp tolerance (seconds)
Only used in Stripe mode. It checks |now - t| ≤ tolerance.
String being signed
Use this to spot whitespace/newline differences fast.

Warning: some providers sign the exact raw bytes. If you paste a transformed payload (pretty JSON, normalized newlines), verification will fail even with the right secret.

Raw body capture cheatsheet

Goal: copy the exact request body bytes used to compute the signature (before your JSON parser modifies anything).

If you still get INVALID with the right secret, the #1 cause is payload mismatch (whitespace/newlines/encoding).