x-signature-ed25519 header. Register the credential on your endpoint and webhook.co verifies every captured request against the exact bytes it received, then records the outcome — with a named reason when it fails.
Get the public key
Your public key is shown on your application in the Discord Developer Portal — Discord generates it, you never supply one. See Discord’s own webhook documentation for the current steps. Discord validates an endpoint by deliberately sending invalid signatures, and expects a 401 back, so an endpoint that doesn’t verify will fail registration.Register it on your endpoint
How the signature is checked
- Signed message —
{timestamp}{rawBody}— the timestamp header concatenated to the raw body, no separator. - Algorithm — Ed25519, hex-encoded.
- Key — registered secret is the app’s hex-encoded 32-byte Ed25519 public key, used verbatim.
- Signature format — hex-encoded 64-byte Ed25519 signature.
- Timestamp — read from the
x-signature-timestampheader.
What makes this one different
- The registered “secret” is Discord’s hex-encoded 32-byte Ed25519 PUBLIC key, not a shared secret.
- Timestamp and body are concatenated with NO separator (
{timestamp}{body}). - The signed timestamp is bound into the message but no replay-age window is enforced — the signature is the authenticity guarantee; downstream dedupe handles replay.
Confirm
verified; one that does not shows failed, with the reason named.