Call resource
A Call represents a single phone call. It is outbound when you create it with a request, or inbound when a number assigned to your application receives one. Outbound calls are placed with a single POST /v1/calls; inbound calls reach your answer_url, which returns a JSON call-control document telling Connect what to do next. While a call is live you can fetch its state, list past calls with filters, or update it to redirect or hang up.
IllustrativeThe capabilities here are real and shipping in TelVox Dial: placing and receiving calls, answering-machine detection, alternate-number failover and caller-ID/DID rotation. The public REST shapes, field names and enums are v0.x and may change before GA. Base URL: https://api.telvox.dev.
Properties
Fields marked PII carry personal data and are subject to your retention and masking policy.
| Property | Type | Description |
|---|---|---|
| sid | string | Unique identifier for the call, prefixed CA. |
| object | string | Always "call". |
| from | string | Caller ID in E.164, the number presented to the far end. May rotate when DID rotation is enabled. |
| to | string | Destination in E.164, a SIP URI, or a client identifier for a WebRTC endpoint. PII. |
| direction | enum | outbound-api, outbound-dial, or inbound. |
| status | enum | Current lifecycle state. See the status enum below. |
| answer_url | string | Your endpoint that returns a JSON call-control document when the call is answered. |
| status_callback | string | Your endpoint that receives lifecycle event callbacks. |
| duration | integer | Billable call duration in seconds. Null until the call completes. |
| answered_by | enum | When answering-machine detection runs: human, machine_start, machine_end, fax, or unknown. |
| price | string | Usage cost for the call. Null until rated; reported in your account currency. |
| created_at | string | ISO 8601 timestamp the call resource was created. |
Status enum
The status field moves through these states. Terminal states (completed, busy, no-answer, failed, canceled) end the call.
| Value | Type | Description |
|---|---|---|
| queued | status | The call is accepted and waiting to be placed. |
| initiated | status | The call is being placed to the carrier. |
| ringing | status | The destination is ringing. |
| in-progress | status | The call was answered and is connected. |
| completed | status | The call ended normally after being answered. |
| busy | status | The destination returned busy. |
| no-answer | status | The call rang but was never answered. |
| failed | status | The call could not be completed (network or carrier error). |
| canceled | status | The call was canceled before it was answered. |
Create a call
Place an outbound call. On answer, Connect fetches your answer_url and runs the returned call-control document.
/v1/callsPlace an outbound call from your number to a destination.
| Parameter | Type | Description |
|---|---|---|
| fromrequired | string | Caller ID to present, in E.164. Must be a number assigned to your account or a verified caller ID. |
| torequired | string | Destination in E.164, a SIP URI (sip:…), or a WebRTC client identifier (client:…). |
| answer_urlrequired | string | HTTPS endpoint that returns a JSON call-control document when the call is answered. Required unless answer_document is supplied. |
| answer_document | object | Inline JSON call-control document to run on answer, in place of answer_url. |
| status_callback | string | HTTPS endpoint to receive lifecycle event callbacks. |
| status_callback_events | array | Which events to deliver: initiated, ringing, answered, completed. Defaults to completed. |
| machine_detection | enum | Enable answering-machine detection: none, detect, or detect_message_end. |
| timeout | integer | Seconds to let the destination ring before giving up. Defaults to 60. |
| record | boolean | Record the call from answer. See the Recording resource for retrieval. |
# illustrative, shape may differ at GA
curl https://api.telvox.dev/v1/calls \
-H "Authorization: Bearer $TELVOX_API_KEY" \
-d from="+14155550100" \
-d to="+14155550199" \
-d answer_url="https://your.app/voice/answer" \
-d status_callback="https://your.app/voice/status" \
-d status_callback_events="ringing" \
-d status_callback_events="answered" \
-d status_callback_events="completed"// illustrative, shape may differ at GA
{
"object": "call",
"sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"from": "+14155550100",
"to": "+14155550199",
"direction": "outbound-api",
"status": "queued",
"answer_url": "https://your.app/voice/answer",
"status_callback": "https://your.app/voice/status",
"duration": null,
"answered_by": null,
"price": null,
"created_at": "2026-06-22T17:04:11Z"
}Fetch a call
Retrieve a single call by its SID, including live status while it is in progress.
/v1/calls/{sid}Fetch one call by its SID.
# illustrative, shape may differ at GA
curl https://api.telvox.dev/v1/calls/CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4 \
-H "Authorization: Bearer $TELVOX_API_KEY"// illustrative, shape may differ at GA
{
"object": "call",
"sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"from": "+14155550100",
"to": "+14155550199",
"direction": "outbound-api",
"status": "completed",
"duration": 47,
"answered_by": "human",
"price": "0.0094",
"created_at": "2026-06-22T17:04:11Z"
}List calls
Return a paginated list of calls, newest first, narrowed by the filters below. See pagination for cursoring.
/v1/callsList calls with optional filters and pagination.
| Query | Type | Description |
|---|---|---|
| to | string | Return only calls to this number (E.164). |
| from | string | Return only calls from this caller ID (E.164). |
| status | enum | Filter by call status, e.g. completed or in-progress. |
| start_time_after | string | Return calls that started on or after this ISO 8601 timestamp. |
| start_time_before | string | Return calls that started on or before this ISO 8601 timestamp. |
| limit | integer | Page size, 1–100. Defaults to 50. |
| starting_after | string | Cursor: a call SID to page forward from. |
# illustrative, shape may differ at GA
curl "https://api.telvox.dev/v1/calls?status=completed&limit=25" \
-H "Authorization: Bearer $TELVOX_API_KEY"// illustrative, shape may differ at GA
{
"object": "list",
"url": "/v1/calls",
"has_more": true,
"next_cursor": "CA7d2c…",
"data": [
{
"object": "call",
"sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"to": "+14155550199",
"status": "completed",
"duration": 47
}
]
}Update a call
Modify a call that is in progress: redirect it to a new call-control document, or end it.
/v1/calls/{sid}Redirect a live call to a new document, or hang it up.
| Parameter | Type | Description |
|---|---|---|
| status | enum | Set to "completed" to hang up an in-progress call immediately, or "canceled" to cancel a call that has not yet been answered. |
| redirect_url | string | HTTPS endpoint returning a new call-control document. The live call is redirected to run it, interrupting the current instruction. |
# illustrative: redirect a live call to a new document
curl https://api.telvox.dev/v1/calls/CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4 \
-H "Authorization: Bearer $TELVOX_API_KEY" \
-d redirect_url="https://your.app/voice/transfer"// illustrative, shape may differ at GA
{
"object": "call",
"sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"status": "in-progress",
"direction": "outbound-api"
}StatusCallback events
If you set status_callback when creating a call, Connect POSTs to that URL as the call moves through its lifecycle. Subscribe to specific events with status_callback_events; respond 2xx promptly. Delivery is over the same signed, SSRF-safe egress that powers Dial. See webhooks & callbacks for signature verification.
| Event | Fires when |
|---|---|
| initiated | The call leaves the queue and is being placed to the carrier. |
| ringing | The destination starts ringing. |
| answered | The call is answered and connected. |
| completed | The call ends. Includes final duration and price. |
Callback payload
// illustrative: POST body delivered to your status_callback
{
"call_sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"event": "answered",
"status": "in-progress",
"from": "+14155550100",
"to": "+14155550199",
"answered_by": "human",
"timestamp": "2026-06-22T17:04:19Z"
}| Field | Type | Description |
|---|---|---|
| call_sid | string | The SID of the call this event is about. |
| event | enum | The lifecycle event: initiated, ringing, answered, or completed. |
| status | enum | The call status at the moment of the event. |
| from | string | Caller ID presented on the call (E.164). |
| to | string | Destination of the call (E.164 / SIP / client). PII. |
| timestamp | string | ISO 8601 time the event fired. |
| duration | integer | Present on completed. Billable seconds. |
| answered_by | enum | Present when machine detection ran: human, machine_start, etc. |