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

Este artículo aún no está disponible en español; se muestra a continuación en inglés.

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.

Preferencias de cookies

Tú decides qué cookies se usan. Puedes cambiar tu elección en cualquier momento desde «Configuración de cookies» en el pie de página. Política de privacidad

Necesarias

Siempre activas

Imprescindibles para que el sitio funcione: tu tema claro/oscuro y esta elección de cookies se guardan en tu navegador. No sirven para rastrearte.

Analítica

Google Analytics 4 mide cómo se usan las páginas mediante estadísticas, lo que nos ayuda a mejorar el sitio. Si aceptas, instala cookies y mide tu visita por completo. Si rechazas, no instala cookies, pero Google aún puede recibir datos técnicos como la página vista, el tipo de navegador y la dirección IP.

_ga, _ga_* · hasta 2 años · Google