curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/monitor \
-H "X-Api-Key: trk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155550100",
"role": "advisor"
}'
{
"call": {
"id": "665f1e2a9c4b1a0012ab99ff",
"direction": "outbound",
"state": "calling",
"legKind": "monitor",
"from": "+18005551234",
"to": "+14155550100",
"connectTo": null,
"queueId": null,
"conferenceId": null,
"parentCallId": "665f1e2a9c4b1a0012ab34cd",
"bridgedCallId": null,
"monitorRole": "ADVISOR",
"record": false,
"recordingState": null,
"recordingFileIds": [],
"customData": {},
"error": null,
"startedAt": "2026-08-21T18:05:00.000000Z",
"answeredAt": null,
"endedAt": null,
"createdAt": "2026-08-21T18:05:00.000000Z"
}
}
Voice Calls (v1)
Monitor a Call
Dial a supervisor into an established call’s conference to listen in or coach the agent.
POST
/
v1
/
voice
/
calls
/
{callId}
/
monitor
curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/monitor \
-H "X-Api-Key: trk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155550100",
"role": "advisor"
}'
{
"call": {
"id": "665f1e2a9c4b1a0012ab99ff",
"direction": "outbound",
"state": "calling",
"legKind": "monitor",
"from": "+18005551234",
"to": "+14155550100",
"connectTo": null,
"queueId": null,
"conferenceId": null,
"parentCallId": "665f1e2a9c4b1a0012ab34cd",
"bridgedCallId": null,
"monitorRole": "ADVISOR",
"record": false,
"recordingState": null,
"recordingFileIds": [],
"customData": {},
"error": null,
"startedAt": "2026-08-21T18:05:00.000000Z",
"answeredAt": null,
"endedAt": null,
"createdAt": "2026-08-21T18:05:00.000000Z"
}
}
Dials a supervisor into the conference behind an established call. Only a
primary call in the established state can be monitored. The supervisor joins as a new monitor leg — either listening silently or whispering coaching audio to the agent, depending on role.
Requires the voice_calls.write scope and the Voice Calls product entitlement.
Path Parameters
string
required
The id of the
primary call to monitor.Body Parameters
string
required
The supervisor to dial in. Accepts either an E.164 number or the
id of a voice agent. The resolved destination is screened against your account’s compliance suppression (DNC, opt-out, quiet hours) before dialing.string
default:"monitor"
monitor to listen only, or advisor to whisper/coach the agent (audible to the agent, not the far end).Response Fields
object
The created monitor leg.
Hide Call properties
Hide Call properties
string
The monitor leg’s unique identifier.
string
Always
outbound — a monitor leg is dialed out to the supervisor.string
Lifecycle state. See Call states.
string
monitor for a leg created here.string
The calling number.
string
The supervisor’s 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 the monitor leg is attached to. Always
null in this response — it is populated only once the supervisor answers and the monitor leg joins the conference, so read it with a later Get a Call. The parent call already carries the conference id by the time this monitor leg is dialed.string | null
The primary call this monitor leg belongs to.
string | null
For a primary call, the currently bridged agent leg.
string | null
MONITOR or ADVISOR for this monitor leg.boolean
Whether recording was requested.
string | null
requested, started, stopped, ready, failed, or deleted.array
Provider file ids for completed recordings.
object
Metadata carried on the call object.
string | null
A machine-readable reason when the call failed.
string | null
ISO 8601 timestamp when the leg was placed.
string | null
ISO 8601 timestamp when the leg was answered.
string | null
ISO 8601 timestamp when the leg ended.
string | null
ISO 8601 timestamp when the record was created.
Examples
curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/monitor \
-H "X-Api-Key: trk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155550100",
"role": "advisor"
}'
{
"call": {
"id": "665f1e2a9c4b1a0012ab99ff",
"direction": "outbound",
"state": "calling",
"legKind": "monitor",
"from": "+18005551234",
"to": "+14155550100",
"connectTo": null,
"queueId": null,
"conferenceId": null,
"parentCallId": "665f1e2a9c4b1a0012ab34cd",
"bridgedCallId": null,
"monitorRole": "ADVISOR",
"record": false,
"recordingState": null,
"recordingFileIds": [],
"customData": {},
"error": null,
"startedAt": "2026-08-21T18:05:00.000000Z",
"answeredAt": null,
"endedAt": null,
"createdAt": "2026-08-21T18:05:00.000000Z"
}
}
Error Codes
| Status | Code | Meaning |
|---|---|---|
| 403 | voice_not_entitled | Voice calling is not enabled for your account. |
| 404 | call_not_found / agent_not_found | The referenced call or agent does not exist in your account. |
| 409 | call_not_established | The call is not in the established state and cannot be monitored. |
| 422 | not_a_primary_call | The target call is not a primary leg. |
| 422 | invalid_role | role must be monitor or advisor. |
| 422 | invalid_number | The supervisor to is not a valid E.164 number. |
| 403 | compliance_dnc / compliance_opted_out / compliance_suppressed / compliance_quiet_hours | The resolved supervisor destination is blocked by a compliance rule. |
| 429 | concurrency_limit | Your account has too many concurrent calls in progress. |
| 502 | provider_error | The upstream telephony provider rejected the request. |