curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/answer \
-H "X-Api-Key: trk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"connectTo": "+14155559876",
"record": true
}'
{
"call": {
"id": "665f1e2a9c4b1a0012ab34cd",
"direction": "inbound",
"state": "ringing",
"legKind": "primary",
"from": "+14155551234",
"to": "+18005551234",
"connectTo": "+14155559876",
"queueId": null,
"conferenceId": null,
"parentCallId": null,
"bridgedCallId": null,
"monitorRole": null,
"record": true,
"recordingState": "requested",
"recordingFileIds": [],
"customData": {},
"error": null,
"startedAt": "2026-08-21T18:00:00.000000Z",
"answeredAt": null,
"endedAt": null,
"createdAt": "2026-08-21T18:00:00.000000Z"
}
}
Voice Calls (v1)
Answer a Call
Answer an inbound call, optionally bridging it or parking it in a queue.
POST
/
v1
/
voice
/
calls
/
{callId}
/
answer
curl -X POST https://api.tracklysms.com/api/v1/voice/calls/665f1e2a9c4b1a0012ab34cd/answer \
-H "X-Api-Key: trk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"connectTo": "+14155559876",
"record": true
}'
{
"call": {
"id": "665f1e2a9c4b1a0012ab34cd",
"direction": "inbound",
"state": "ringing",
"legKind": "primary",
"from": "+14155551234",
"to": "+18005551234",
"connectTo": "+14155559876",
"queueId": null,
"conferenceId": null,
"parentCallId": null,
"bridgedCallId": null,
"monitorRole": null,
"record": true,
"recordingState": "requested",
"recordingFileIds": [],
"customData": {},
"error": null,
"startedAt": "2026-08-21T18:00:00.000000Z",
"answeredAt": null,
"endedAt": null,
"createdAt": "2026-08-21T18:00:00.000000Z"
}
}
Answers an inbound call that is still connecting — one in the
calling, ringing, or pre_established state. Optionally bridge the caller to a number or agent on answer, or park them in a queue.
The response reflects the accepted answer request; the call reaches established only once the provider confirms it, so the returned state, answeredAt, and any conferenceId/bridgedCallId are populated asynchronously — poll Get a Call for the live state.
Requires the voice_calls.write scope and the Voice Calls product entitlement.
Path Parameters
string
required
The id of the inbound call to answer.
Body Parameters
string
A target to bridge the caller to once answered. 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
The id of a queue to park the caller in on answer.
boolean
default:false
Whether to record the call from the moment it is answered. Recording may require caller consent — see call recording.
Pass
connectTo or queue, not both.Response Fields
object
The answered call.
Hide Call properties
Hide Call properties
string
The call’s unique identifier.
string
inbound for calls answered through this endpoint.string
Lifecycle state. 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/answer \
-H "X-Api-Key: trk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"connectTo": "+14155559876",
"record": true
}'
{
"call": {
"id": "665f1e2a9c4b1a0012ab34cd",
"direction": "inbound",
"state": "ringing",
"legKind": "primary",
"from": "+14155551234",
"to": "+18005551234",
"connectTo": "+14155559876",
"queueId": null,
"conferenceId": null,
"parentCallId": null,
"bridgedCallId": null,
"monitorRole": null,
"record": true,
"recordingState": "requested",
"recordingFileIds": [],
"customData": {},
"error": null,
"startedAt": "2026-08-21T18:00:00.000000Z",
"answeredAt": null,
"endedAt": null,
"createdAt": "2026-08-21T18:00:00.000000Z"
}
}
Error Codes
| Status | Code | Meaning |
|---|---|---|
| 404 | call_not_found | No call with that id exists on your account. |
| 409 | call_not_answerable | The call is not an inbound call in the calling, ringing, or pre_established state. |
| 422 | answer_target_conflict | Both connectTo and queue were supplied. |
| 409 | answer_in_progress | The call is already being answered. |
| 404 | agent_not_found | connectTo is an agent id that does not exist. |
| 422 | invalid_number | connectTo is not a valid E.164 number. |
| 403 | compliance_dnc / compliance_opted_out / compliance_suppressed / compliance_quiet_hours | The resolved connectTo destination is blocked by a compliance rule. |
| 403 | voice_not_entitled | Voice calling is not enabled for your account. |