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

Dieser Artikel liegt noch nicht auf Deutsch vor und wird unten auf Englisch angezeigt.

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-Einstellungen

Sie entscheiden, welche Cookies verwendet werden. Ihre Wahl können Sie jederzeit über „Cookie-Einstellungen“ im Footer ändern. Datenschutzerklärung

Notwendig

Immer aktiv

Für den Betrieb der Website erforderlich: Ihr Hell-/Dunkel-Design und diese Cookie-Auswahl werden in Ihrem Browser gespeichert. Sie dienen nicht dem Tracking.

Analyse

Google Analytics 4 misst über Statistiken, wie Seiten genutzt werden, und hilft uns, die Website zu verbessern. Wenn Sie zustimmen, setzt es Cookies und erfasst Ihren Besuch vollständig. Wenn Sie ablehnen, setzt es keine Cookies, doch Google kann weiterhin technische Daten erhalten, etwa die aufgerufene Seite, Ihren Browsertyp und Ihre IP-Adresse.

_ga, _ga_* · bis zu 2 Jahre · Google