Skip to content

Webhook Events

Available events

EventDescription
call.endedFired when an AI call finishes (completed, failed, or cancelled)

More events coming soon

Future events will include appointment.created, appointment.cancelled, sms.received, contact.created, and more.


call.ended

Sent when an AI call finishes, regardless of outcome.

Payload

json
{
  "id": "evt-delivery-uuid",
  "event": "call.ended",
  "timestamp": "2026-04-05T14:04:00Z",
  "data": {
    "callId": "clx-call-001",
    "organizationId": "clx-org-001",
    "agentId": "clx-agent-001",
    "agentName": "Sales Agent",
    "customerName": "John Doe",
    "customerPhone": "+1234567890",
    "fromNumber": "+0987654321",
    "direction": "OUTBOUND",
    "status": "completed",
    "duration": 240,
    "disconnectionReason": "agent_hangup",
    "sentiment": "positive",
    "summary": "Discussed enterprise pricing. Customer interested in annual plan.",
    "transcript": "Agent: Hello John, this is...\nJohn: Hi, yes I was...",
    "callSuccessful": true,
    "tokenCost": 12.50,
    "startedAt": "2026-04-05T14:00:00Z",
    "endedAt": "2026-04-05T14:04:00Z",
    "metadata": {
      "campaign_id": "summer_2026"
    }
  }
}

Fields

FieldTypeDescription
callIdstringUnique call identifier
organizationIdstringYour organization ID
agentIdstringAgent that handled the call
agentNamestringDisplay name of the agent
customerNamestring | nullName of the person called
customerPhonestringDestination phone number
fromNumberstringCaller ID used
directionstringINBOUND or OUTBOUND
statusstringFinal call status
durationintegerCall duration in seconds
disconnectionReasonstring | nullWhy the call ended
sentimentstring | nullAI-detected sentiment
summarystring | nullAI-generated call summary
transcriptstring | nullFull call transcript
callSuccessfulboolean | nullWhether the call achieved its objective
tokenCostnumberCost in tokens/credits
startedAtstring | nullISO 8601 call start time
endedAtstring | nullISO 8601 call end time
metadataobject | nullCustom metadata set at call creation

Example handler (Node.js)

javascript
app.post('/webhook', (req, res) => {
  const { event, data } = req.body

  if (event === 'call.ended') {
    console.log(`Call ${data.callId} ended`)
    console.log(`Status: ${data.status}, Duration: ${data.duration}s`)
    console.log(`Sentiment: ${data.sentiment}`)
    
    // Save to your CRM, notify your team, etc.
    if (data.callSuccessful) {
      notifyTeam(`Successful call with ${data.customerName}`)
    }
  }

  // Always respond 2xx
  res.status(200).json({ received: true })
})

Replicer API Documentation