Developers · Tools

Webhook signature tester

Verify a DPP-Signature header against a body and secret, find out exactly why one fails, or sign a test delivery — in your browser, nothing is sent anywhere.

Version
v1.0.0
Base URL
https://dppapi-production.up.railway.app/v1
Format
JSON · OpenAPI 3.1
FeedbackLast updated
On this pageTester

Paste a delivery your receiver rejected — the secret, the DPP-Signature header and the raw body — and the tester recomputes the signature exactly as the API does, then tells you which part is wrong. Or sign a test delivery and get the cURL command to post it to your own endpoint. The HMAC runs in your browser with WebCrypto; nothing you type leaves this page.

Tester

Runs in your browser. Nothing is sent.

Try it with a sample:

The endpoint’s secret, whsec_ prefix included — the API signs with the whole string.

t=<unix seconds>,v1=<hex>. Pasting the whole “DPP-Signature: …” line works too.

Exactly as received, byte for byte. The API sends compact JSON with no trailing newline.

What is checked

The same three steps as the verification samples in the webhooks guide, in this order:

StepRuleOn failure
HeaderSplit on ,, each part on the first =; t is Unix seconds, v1 is 64 hex characters.Names the missing or malformed part.
Signaturehex(HMAC-SHA256(secret, t + "." + body)), compared in constant time. The key is the whole secret, whsec_ included.Tries the usual alterations — re-formatted JSON, a trailing newline, CRLF, whitespace, the secret with or without its prefix — and reports the one that matches.
Time|now − t| ≤ 300 seconds.Gives the actual age, and whether the signature itself was right.

Common failures

SymptomCauseFix
Mismatch; matches when minifiedThe framework parsed the JSON and you re-serialised it.Read the raw body before any JSON middleware (e.g. express.raw, request.get_data()).
Mismatch; matches without the trailing newlineA copy, a log line or a test fixture added one.Use the bytes as received.
Mismatch; matches with the prefix addedThe secret was stored without whsec_.Store and use the full string.
Mismatch; nothing explains itAnother endpoint’s secret, or one that was rotated.Copy the current secret, or rotate it with POST /webhooks/{id}/rotate-secret.
Too old, signature correctA replayed or stored delivery, or a slow queue before verification.Verify on receipt; resend old deliveries — each attempt is signed with a fresh timestamp.
In the futureYour server clock is behind.Synchronise it with NTP.

Cookie preferences

You choose which cookies are used. You can change your choice at any time with “Cookie settings” in the footer. Privacy policy

Necessary

Always on

Needed for the site to work: your light/dark theme and this cookie choice are stored in your browser. They do not track you.

Analytics

Google Analytics 4 measures how pages are used through statistics, which helps us improve the site. If you accept, it sets cookies and measures your visit in full. If you decline, it sets no cookies, but Google may still receive technical data such as the page viewed, your browser type and IP address.

_ga, _ga_* · up to 2 years · Google