Call webhooks: integration guide
v1.0 · 11 pages · Last updated: 9 October 2026
Receiving your calls in your own system when they start, are answered, end and when the recording is ready: setup, example requests, every field, signature checks and the differences between calling services.
Articles from this document
- Call webhooks: send your calls to your own system Settings › Workspace settings › Integrations › Webhook › “Add new webhook”. Under “Calls”, tick “Call started”, “Call answered”, “Call ended” and “Call recording ready”. Clomni sends each event once per call, with the duration, the outcome, who hung up, the recording, the transcript and the summary.
- Call webhooks: events and when they arrive call_started comes when an incoming call rings or an agent places a call, call_answered when it is picked up, call_ended when it is over (duration, outcome, who hung up), call_recording_ready when the recording, transcript and summary are ready. Each event once per call. An unanswered call has no call_answered. For a WhatsApp (QR) call answered on the phone, call_ended waits up to 10 minutes for the phone's call log.
- Call webhooks: request fields and examples Every request is JSON: event, delivery_id, id, provider_call_id, account, inbox, conversation, message_id, direction, status, contact, agent, started_at, answered_at, ended_at, duration_seconds, duration_known, ended_by, answered_on, recording_url, transcript_available, transcript, summary, language. A field that is not known is null.
- Call webhooks: verifying the signature Every request has the X-ChatX-Delivery, X-ChatX-Timestamp and X-ChatX-Signature headers. The signature is sha256= followed by HMAC-SHA256(secret, "<timestamp>.<raw body>"). The secret is shown when the webhook is created and is in its edit window. Reject a request whose timestamp is older than 5 minutes.
- Call webhooks: delivery, retries and duplicates Your server should answer 2xx within 5 seconds. On a connection error, a timeout, 429 or 5xx Clomni retries: 5 attempts in all, 30 seconds, 1, 2 and 4 minutes apart. A 4xx is final and is not retried. delivery_id stays the same on a retry: if the same delivery_id arrives again, it is a duplicate.
- Call webhooks: WhatsApp QR, WhatsApp Business API and Twilio differences WhatsApp (QR): incoming calls are answered on the phone (answered_on: phone, agent: null), the duration comes from the answer or the phone's call log, recordings only for calls placed from the dashboard and the app. WhatsApp Business API: answered in the dashboard, ended_by agent/contact/system, busy is reported. Twilio: ended_by is the first side to leave the conference, no recording or summary.
- Call webhooks: problems and fixes No event arrives: tick the events under “Calls” on the webhook, the address must be HTTPS and reachable, a 4xx is not retried. The signature does not match: use the raw body and this webhook's secret. The same event twice: it is a retry, drop it by delivery_id. duration_seconds is null: the call was not answered or the phone's call log never came.