Why verification usually fails
- The body was parsed and re-serialized before hashing. Hash the raw bytes exactly as received.
- Wrong secret: test mode and live mode, or the app secret versus the verify token.
- Comparing with == instead of a constant-time comparison, or comparing hex against base64.
- For timestamped schemes, a clock skew or a replayed request older than five minutes.
Discord interactions use Ed25519 public-key signatures rather than HMAC; verify them with your application's public key.
Related: Webhook payload tester, APIs and webhooks guide.