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

Cet article n'est pas encore disponible en français ; il est affiché ci-dessous en anglais.

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.

Préférences en matière de cookies

Vous choisissez les cookies utilisés. Vous pouvez modifier votre choix à tout moment via « Paramètres des cookies » en bas de page. Politique de confidentialité

Nécessaires

Toujours actifs

Indispensables au fonctionnement du site : votre thème clair/sombre et ce choix de cookies sont enregistrés dans votre navigateur. Ils ne servent pas à vous suivre.

Analyse

Google Analytics 4 mesure l’utilisation des pages au moyen de statistiques, ce qui nous aide à améliorer le site. Si vous acceptez, il dépose des cookies et mesure votre visite en détail. Si vous refusez, il ne dépose aucun cookie, mais Google peut tout de même recevoir des données techniques, comme la page consultée, le type de navigateur et l’adresse IP.

_ga, _ga_* · jusqu’à 2 ans · Google