Webhook test/delivery is failing
Webhook endpoints must be public HTTPS, verify the raw-body HMAC signature, return 2xx within 10 seconds, and tolerate retries.
What you may be seeing
- A webhook test or real event has a failed delivery status, or the receiver rejects the signature.
What usually causes it
- Endpoint is not reachable public HTTPS or resolves to a private/local target.
- Receiver computes HMAC over parsed/re-serialized JSON instead of the exact raw body.
- Receiver takes longer than the delivery timeout or returns non-2xx.
- The signing secret was lost; it is only shown at creation.
Do this
- Use Settings → Developer → Webhooks and run the endpoint's test/ping.
- Confirm the URL is public HTTPS and your server returns any 2xx within 10 seconds.
- Verify X-CanvasRelay-Signature by HMAC-SHA256 over the exact raw request body using the endpoint's whsec_ secret.
- Make the receiver idempotent because failed deliveries retry on backoff.
- If the secret was lost, create a replacement webhook endpoint configuration and store the new shown-once secret.
You know it is fixed when
- The dashboard's last delivery status succeeds and the receiver validates/processes both ping and subscribed real events.
Search phrases this guide covers
webhook not firing · webhook signature · whsec secret · ping webhook · delivery failed
