Skip to content
CallOnline app iconCallOnline Resources
Get API key

Troubleshoot missing or delayed webhooks

Confirm the subscription is active and matches the emitted event, inspect receiver status and signature verification, deduplicate rather than discard repeats, and reconcile the call through GET /v1/calls/{callId}.

Updated Jul 14, 2026v1Reviewed by engineering

A webhook can appear missing because the event was not selected, the endpoint was unreachable, signature verification used a transformed body, the receiver returned a non-success response, or the application discarded a duplicate or out-of-order event incorrectly.

Expected event checked against the call record, webhook receiver, and reconciliation loop

If you know the call ID, read the authoritative stored state:

Terminal window
curl "https://callonline.app/v1/calls/call_opaque_identifier" \
--header "Authorization: Bearer $CALLONLINE_API_KEY"

The ordered events array tells you whether CallOnline recorded the expected event. If it is not present there, the webhook subscription cannot deliver it.

Call GET /v1/webhooks with a key that has callonline.webhooks. Verify:

  • the URL is the intended environment and HTTPS route;
  • the subscription is active;
  • eventTypes contains the exact event string or *;
  • the receiver is using the signing secret for that subscription.

dialed and call.answered are different event strings. Do not filter only on call-status values if you need carrier-oriented events.

Check the receiver’s edge and application logs for the delivery ID and event header. Common causes are:

  • a redirect to a login or trailing-slash URL;
  • a firewall, allowlist, TLS, DNS, or timeout failure;
  • reading parsed JSON before signature verification;
  • comparing uppercase hex or omitting the sha256= prefix;
  • returning 500 after durable acceptance, causing a repeat;
  • returning 200 before durable acceptance, then losing the event.

Redact the secret, bearer keys, and sensitive body fields from logs.

Use x-callonline-delivery as a unique key. A repeated delivery should return success after confirming the original was accepted. Do not require the previous lifecycle event to have arrived before accepting a newer one; network timing can differ.

When business state depends on order, compare the event with the current call record and its timestamps instead of trusting arrival order alone.

Create a new subscription and secret, deploy the new receiver configuration, verify a fixture delivery in a non-billable test, and then delete the old subscription. Do not expose a production secret in a manual replay tool.

CallOnline records failed attempts and a future retry time internally, but the public v1 contract does not promise an exact retry schedule. Build recovery around reconciliation, not a countdown.