curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/hangup \
-H "X-Api-Key: trk_your_api_key_here"
{
"call": {
"id": "665f1e2a9c4b1a0012ab34cd",
"direction": "outbound",
"state": "established",
"legKind": "primary",
"from": "+18005551234",
"to": "+14155551234",
"connectTo": "+14155559876",
"queueId": null,
"conferenceId": "665f1e2a9c4b1a0012ab34ce",
"parentCallId": null,
"bridgedCallId": null,
"monitorRole": null,
"record": true,
"recordingState": "started",
"recordingFileIds": [],
"customData": { "caseId": "abc-123" },
"error": null,
"startedAt": "2026-08-21T18:00:00.000000Z",
"answeredAt": "2026-08-21T18:00:12.000000Z",
"endedAt": null,
"createdAt": "2026-08-21T18:00:00.000000Z"
}
}
Voice Calls (v1)
Hang Up a Call
End an active voice call.
POST
/
v1
/
voice
/
calls
/
{callId}
/
hangup
curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/hangup \
-H "X-Api-Key: trk_your_api_key_here"
{
"call": {
"id": "665f1e2a9c4b1a0012ab34cd",
"direction": "outbound",
"state": "established",
"legKind": "primary",
"from": "+18005551234",
"to": "+14155551234",
"connectTo": "+14155559876",
"queueId": null,
"conferenceId": "665f1e2a9c4b1a0012ab34ce",
"parentCallId": null,
"bridgedCallId": null,
"monitorRole": null,
"record": true,
"recordingState": "started",
"recordingFileIds": [],
"customData": { "caseId": "abc-123" },
"error": null,
"startedAt": "2026-08-21T18:00:00.000000Z",
"answeredAt": "2026-08-21T18:00:12.000000Z",
"endedAt": null,
"createdAt": "2026-08-21T18:00:00.000000Z"
}
}
Requests that an active call be ended. Only a call in a non-terminal state can be hung up. The response returns the call in its current state; the call moves to a terminal state (
finished) asynchronously, once the provider confirms the hangup. Poll Get a Call for the final state.
Requires the voice_calls.write scope and the Voice Calls product entitlement.
Path Parameters
string
required
The id of the active call to hang up.
Response Fields
object
The hung-up call.
Hide Call properties
Hide Call properties
string
The call’s unique identifier.
string
inbound or outbound.string
Lifecycle state at the time of the response — still active; it moves to a terminal state once the provider confirms the hangup. See Call states.
string
primary, bridge, or monitor.string
The calling number.
string
The destination number.
string | null
The resolved bridge target, if any.
string | null
The queue this call is parked in, if any.
string | null
The provider conference id once a bridge or monitor leg is attached.
string | null
For a bridge/monitor leg, the primary call it belongs to.
string | null
For a primary call, the currently bridged agent leg.
string | null
MONITOR or ADVISOR for a monitor leg.boolean
Whether recording was requested.
string | null
requested, started, stopped, ready, failed, or deleted.array
Provider file ids for completed recordings.
object
The metadata attached to the call.
string | null
A machine-readable reason when the call failed.
string | null
ISO 8601 timestamp when the call started.
string | null
ISO 8601 timestamp when the call was answered.
string | null
ISO 8601 timestamp when the call ended.
string | null
ISO 8601 timestamp when the record was created.
Examples
curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/hangup \
-H "X-Api-Key: trk_your_api_key_here"
{
"call": {
"id": "665f1e2a9c4b1a0012ab34cd",
"direction": "outbound",
"state": "established",
"legKind": "primary",
"from": "+18005551234",
"to": "+14155551234",
"connectTo": "+14155559876",
"queueId": null,
"conferenceId": "665f1e2a9c4b1a0012ab34ce",
"parentCallId": null,
"bridgedCallId": null,
"monitorRole": null,
"record": true,
"recordingState": "started",
"recordingFileIds": [],
"customData": { "caseId": "abc-123" },
"error": null,
"startedAt": "2026-08-21T18:00:00.000000Z",
"answeredAt": "2026-08-21T18:00:12.000000Z",
"endedAt": null,
"createdAt": "2026-08-21T18:00:00.000000Z"
}
}
Error Codes
| Status | Code | Meaning |
|---|---|---|
| 409 | call_not_active | The call is already in a terminal state. |
| 409 | call_not_ready | The call has not yet been accepted by the provider. |
| 404 | call_not_found | No call with that id exists for your account. |
| 403 | voice_not_entitled | Voice calling is not enabled for your account. |