Skip to main content

UserEndedCalls

Fires when a call finishes, limited to one user. Same shape as AccountEndedCalls minus the cdrs array (the per-leg breakdown) — the call's summary, from one person's point of view.

Payload​

{
"callId": "1754489201.884213",
"direction": "inbound",
"status": "answered",
"callerType": "external",
"callerName": "ACME ROOFING",
"callerNumber": "13475550123",
"calledType": "user",
"calledName": "Dana Spencer",
"calledNumber": "204",
"dialledNumber": "12125550188",
"startTime": "2026-08-11T13:20:01Z",
"callDuration": 238,
"talkDuration": 220,
"agentOnCall": true,
"webhookType": "UserEndedCalls",
"externalCallerId": "12125550188",
"externalCallerName": "Acme Inc",
"recordingUrl": "https://api.account.telebroad.com/recordings/play/9f2c…"
}
FieldTypeDescription
callIdstringThe call id — matches call history, reports and the recordings endpoint.
directionstringinbound or outbound, from this user's perspective.
statusstringHow the call ended.
callerType / callerName / callerNumberstringThe calling party.
calledType / calledName / calledNumberstringThe called party.
dialledNumberstringWhat was actually dialled.
startTimestringRFC 3339 UTC.
callDurationintegerSeconds, including ringing.
talkDurationintegerSeconds connected.
agentOnCallbooleanWhether an agent was on the call.
externalCallerId / externalCallerNamestringThe external caller ID presented.
recordingUrlstringA ready-to-play link (no login needed). Absent when nothing was recorded.
webhookTypestringAlways UserEndedCalls.

Which one should you subscribe to​

UseEvent
A company-wide call log, CRM sync, reportingAccountEndedCalls
Per-agent activity, a personal dashboard, "my calls"UserEndedCalls
You need the leg breakdown, transfers, or per-leg recordingsAccountEndedCalls — cdrs is only there
Do not subscribe to both and merge them

The same call produces both events. A receiver that writes both to one table double-counts every call. Pick one as your source of record.

Direction is relative​

direction is from this user's perspective. A call transferred from a colleague can read inbound here while the account-level event calls the same call outbound. If you compare against AccountEndedCalls data, compare on callId, not on direction.

Gotchas​

  • No cdrs (per-leg breakdown). Use AccountEndedCalls for that.
  • recordingUrl is absent, not empty, when there is no recording.
  • Internal calls fire this too, with both parties on your account.