UserEndedCalls
Fires when a call finishes, scoped to a user. Same shape as
AccountEndedCalls minus the cdrs array — 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…"
}
| Field | Type | Description |
|---|---|---|
callId | string | The call id — matches call history, reports and the recordings endpoint. |
direction | string | inbound or outbound, from this user's perspective. |
status | string | How the call ended. |
callerType / callerName / callerNumber | string | The calling party. |
calledType / calledName / calledNumber | string | The called party. |
dialledNumber | string | What was actually dialled. |
startTime | string | RFC 3339 UTC. |
callDuration | integer | Seconds, including ringing. |
talkDuration | integer | Seconds connected. |
agentOnCall | boolean | Whether an agent was on the call. |
externalCallerId / externalCallerName | string | The external caller ID presented. |
recordingUrl | string | Signed playback link. Absent when nothing was recorded. |
webhookType | string | Always UserEndedCalls. |
Which one should you subscribe to
| Use | Event |
|---|---|
| A company-wide call log, CRM sync, reporting | AccountEndedCalls |
| Per-agent activity, a personal dashboard, "my calls" | UserEndedCalls |
| You need the leg breakdown, transfers, or per-leg recordings | AccountEndedCalls — cdrs is only there |
:::caution 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. Use the account event for the leg breakdown. recordingUrlis absent, not empty, when there is no recording.- Internal calls fire this too, with both parties on your account.