Home › Free tools › Stripe webhook signature checker

Stripe webhook signature checker

Getting No signatures found matching the expected signature for payload? Paste the raw request body, the Stripe-Signature header and the endpoint's signing secret. This page recomputes Stripe's HMAC-SHA256 signature and shows which v1 signatures match and how old the timestamp is.

Nothing you type leaves this browser. All processing happens in this page's own JavaScript. Your inputs are not sent anywhere and not saved: the page makes no network requests (its Content-Security-Policy blocks them), sets no cookies, uses no analytics and loads no third-party scripts or fonts. Once loaded, it works offline. Even so, use a test-mode secret where you can, and roll a live secret if you think it has been exposed.

Log the raw bytes before any JSON parsing. Spaces, key order, line endings and a trailing newline all change the signature.

One line, like t=1492774577,v1=5257a8…. There may be more than one v1= while a secret is being rolled.

Not your API key.

Stripe's libraries default to 300 seconds (5 minutes).

"Generate sample" fills in a sample invoice.payment_failed event, a random fake secret and a header signed with it, so you can see a pass. Then change one character of the body to see a fail.

How Stripe signs a webhook

  1. Stripe builds signed_payload from the timestamp, a . character and the raw request body.
  2. It computes an HMAC with SHA-256, using the endpoint's signing secret as the key, and sends it as v1= along with t= in the Stripe-Signature header.
  3. Your code recomputes the HMAC and compares it, in constant time, with each v1 value. Ignore other schemes such as v0.
  4. If a signature matches, check that the timestamp is within your tolerance, to stop replayed requests.

Source: Stripe, "Verify webhook signatures manually", docs.stripe.com/webhooks#verify-manually.

Common causes of a failed check

Sources: Stripe, "Resolve signature verification errors", docs.stripe.com/webhooks/signature, and docs.stripe.com/webhooks#verify-manually.

What this checker doesn't do

Fix it in your code, not just here

Webhooks Done Right (for Stripe) (US$19) is an Agent Skill for Claude Code and Cursor. Common Stripe webhook bugs include verifying a parsed body instead of the raw one, using the wrong whsec_ secret, fulfilling an order twice when an event is retried, or returning a 500 for events you don't handle. It includes reference endpoints for Express/TypeScript and Flask/Python. 22 automated tests use locally signed fixtures, not live Stripe deliveries.

See Webhooks Done Right (for Stripe) · Read its test report