Skip to content

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

  1. Use Settings → Developer → Webhooks and run the endpoint's test/ping.
  2. Confirm the URL is public HTTPS and your server returns any 2xx within 10 seconds.
  3. Verify X-CanvasRelay-Signature by HMAC-SHA256 over the exact raw request body using the endpoint's whsec_ secret.
  4. Make the receiver idempotent because failed deliveries retry on backoff.
  5. 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