Webhook Debugging
Step-by-step debugging for webhook issues.
Signature Mismatch (401)
- Verify shared secret matches between Console and your application (max 24 characters)
- Compute HMAC-SHA256 on the raw request body (not parsed/re-serialized JSON)
- Use constant-time comparison (
crypto.timingSafeEqualin Node.js) - Check that
X-ECD-Signatureheader is being read correctly
IP Blocked (403)
- Get the webhook IP addresses from Console
- Add them to your firewall allowlist
- If behind a reverse proxy, check
X-Forwarded-Forheader for the real client IP
No Events Received
- Verify webhook is enabled and not paused in Console
- Check webhook URL is correct and publicly accessible (not localhost)
- Verify agency is assigned to the webhook
- Test with Console's "Test Request" button
- Check your server logs for incoming requests
Timeout Issues
- Return HTTP 200 immediately upon receiving the webhook
- Process the payload asynchronously (queue, background job)
- Do not perform long-running operations in the request handler
Testing
- Use the Console "Test Request" button to send test payloads
- Staging environments only support inbound channels
- Use tools like ngrok to expose local development servers for testing
See also: Webhook Security, Webhook Examples