Skip to main content
Esc
Browse docs

Calling webhooks

Set up Slovio calling webhooks to receive call.started, call.answered, call.ended, call.missed and call.failed events, with payloads, signatures and retries.

4 min readUpdated

Calling webhooks send AI Calling events to your server as they happen: a call started, was answered, ended, was missed or failed. Set them up in Calling → Webhooks → Add endpoint. They are separate from messaging webhooks, and each account can have up to 10 calling endpoints.

Add an endpoint

  1. Open Calling → Webhooks.
  2. Select Add endpoint.
  3. Enter a Name, for example CRM sync.
  4. Enter the Endpoint URL. It must be HTTPS.
  5. Tick the Events you want.
  6. Leave Enabled on.
  7. Select Add endpoint.
  8. Copy the signing secret that appears. It is shown only once. Select Done.
  9. Select Send test event to check your endpoint receives it.

Only the account owner can manage calling webhooks.

Events

Event Label on screen When
call.started Call started A call begins.
call.answered Call answered The call is answered.
call.ended Call ended The call ends, with duration, outcome and cost.
call.missed Call missed An inbound call was not answered.
call.failed Call failed The call could not connect.

Payload

Every delivery is a POST with a JSON body:

json
{
  "id": "evt_4b1f0c9e2d7a6b5c8e3f1a0d9c8b7a6e",
  "type": "call.ended",
  "apiVersion": "2026-09-29",
  "createdAt": "2026-10-03T05:31:40.000Z",
  "test": false,
  "data": {
    "callId": "api-3f9c0b1e7d2a4c58b6e1f0a9d8c7b6a5e4d3c2b1",
    "direction": "outbound",
    "from": "+911414567890",
    "to": "+919876543210",
    "agentId": "66f2a9c4e1b7d30012ab45cd",
    "endedAt": "2026-10-03T05:31:40.000Z",
    "durationSeconds": 74,
    "status": "completed",
    "outcome": "completed",
    "cost": { "amount": 4.2, "currency": "INR", "settled": true },
    "recordingAvailable": true,
    "extractedVariables": { "confirmed": "yes" }
  }
}

data always has callId, and whichever of direction, from, to, agentId, campaignId and contactId apply. The rest depends on the event:

Event Extra fields in data
call.started startedAt
call.answered answeredAt
call.ended endedAt, durationSeconds, status, outcome, cost, recordingAvailable, transcriptAvailable, extractedVariables
call.failed failedAt, failureReason
call.missed missedAt, missReason

About call.ended:

  • Slovio waits up to 3 minutes for the call's cost to settle. If it is not settled by then, the event is sent with "settled": false and "amount": null.
  • extractedVariables holds what the agent captured. If it is larger than 32 KB, it is left out and "extractedVariablesOmitted": true is sent instead.

A test event is a realistic call.ended with "test": true.

Headers

Header Value
X-Slovio-Event The event type, for example call.ended.
X-Slovio-Event-Id The event id. The same on every retry.
X-Slovio-Delivery-Attempt 1 for the first try, 2 for the first retry, and so on.
X-Slovio-Timestamp Unix seconds.
X-Slovio-Signature t=<unix seconds>,v1=<hex>

v1 is the HMAC-SHA256 of <t>.<raw body>, keyed with your signing secret. Reject a timestamp more than 5 minutes old. See Verify webhook signatures for code.

Responding and retries

  • Answer with any 2xx within 10 seconds.
  • Timeouts, network errors, 408, 425, 429 and 5xx are retried. The wait starts at 30 seconds and doubles each time, up to 1 hour, for 10 attempts in total (about 3 hours).
  • Any other 4xx fails at once and is not retried. Redirects are not followed.
  • While an endpoint is switched off, its events are held, not dropped. Switch it back on within 24 hours and they are delivered.
  • Deliveries opens the Delivery log for an endpoint, with each attempt and its status: Delivered, Retrying or Failed. Use Retry now to send a delivery that has not been delivered yet. Test events can't be retried.

Rotate the signing secret

Select Rotate secret on the endpoint. The old secret stops working at once, and every delivery after that, including queued retries, is signed with the new one. Update your server straight away.

Common questions

How is this different from the webhooks under Developer?

Messaging webhooks (More → Developer → APIs → Webhooks) carry message, contact and chatbot events. Calling webhooks carry call events only and are set up under Calling → Webhooks. See Webhooks.

Why does call.ended show settled false?

The cost was not final within 3 minutes of the call ending. Read the final cost with the Calls API, or check Call Logs.

Can I get the recording in the webhook?

No. recordingAvailable tells you a recording exists. Play or download it in Calling → Call Logs.

What happens if my server is down for an hour?

Slovio keeps retrying for about 3 hours, so the events arrive once your server is back. After 10 failed attempts the delivery is marked Failed. You can send it again with Retry now.

How many endpoints can I add?

Up to 10 calling webhook endpoints per account.

Stuck, or is something here out of date? Tell the team — we reply within a working day.