TryVox

Make a Call

Place an outbound voice call.

Make a Call

Initiate an outbound voice call. The call dials asynchronously; the response returns as soon as TryVox queues the request.

Endpoint

POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/calls

Prerequisite

The from number must belong to the account identified by {auth_id}.

Request body

FieldTypeRequiredDescription
fromstringyesAccount-owned caller ID in E.164 format (e.g. +14155551234).
tostringyesDestination number in E.164 format.
answer_urlstringyesURL TryVox POSTs when the call answers. Must return VoxML.
answer_methodstringnoHTTP method for answer_url. Default: POST.
fallback_urlstringnoURL used if answer_url cannot be fetched successfully, such as a timeout or HTTP error.
fallback_methodstringnoHTTP method for fallback_url. Default: POST.
ring_urlstringnoURL called once the destination starts ringing.
ring_methodstringnoHTTP method for ring_url. Default: POST.
hangup_urlstringnoURL called once the call ends, with the final CDR.
hangup_methodstringnoHTTP method for hangup_url. Default: POST.
status_callback_urlstringnoURL called for ringing, answered, and hangup transitions.
status_callback_methodstringnoHTTP method for status_callback_url. Default: POST.
webhook_secretstringnoYour per-account secret used to sign this call's POST requests to Answer, Fallback, Ring, Hangup, and Status URLs. It is write-only.
caller_namestringnoDisplay name to send as caller-name where the carrier supports CNAM. Free-form text.
ring_timeoutintegernoRing timeout in seconds. Default: 60.
time_limitintegernoHard maximum call duration in seconds. Default: 14400 (4 hours).
machine_detectionstringnoEnable or Disable answering-machine detection. Default: Disable.

Bulk calls

The same endpoint also accepts a bulk request — pass an array of single-call bodies:

{
  "calls": [
    {"from": "+14155551234", "to": "+14155556789", "answer_url": "https://your-app.com/answer"},
    {"from": "+14155551234", "to": "+14155556790", "answer_url": "https://your-app.com/answer"}
  ]
}

The response wraps each created call in a calls array, omitting any that failed validation. Per-tenant bulk size is capped (contact support to raise).

Example request

curl -X POST https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/calls \
  -u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+14155551234",
    "to": "+14155556789",
    "answer_url": "https://example.com/answer",
    "ring_url": "https://example.com/ringing",
    "hangup_url": "https://example.com/hangup",
    "status_callback_url": "https://example.com/status",
    "webhook_secret": "replace-with-your-account-webhook-secret",
    "ring_timeout": 30,
    "time_limit": 3600,
    "machine_detection": "Enable"
  }'

Response

201 Created:

{
  "data": {
    "request_uuid": "550e8400-e29b-41d4-a716-446655440000",
    "account_id": "TJab12cd34",
    "auth_id": "TJab12cd34",
    "from": "+14155551234",
    "to": "+14155556789",
    "direction": "outbound",
    "status": "queued",
    "start_time": "2026-04-09T10:30:00Z",
    "duration": 0,
    "billsec": 0
  }
}

request_uuid is the stable identifier for the call. Use it on Get Call, Hangup, and Call Actions. Webhook payloads identify the call with CallUUID; lifecycle status payloads also include RequestID.

Webhooks

WebhookWhen
ring_urlDestination starts ringing.
answer_urlCall connects. Must return VoxML to control the call.
fallback_urlanswer_url timed out or returned an HTTP error.
hangup_urlCall ends. Receives final timing, billing, and media-quality fields when available.

For account-level subscriptions to all call.* events, see Webhook Subscriptions.

Errors

StatusCodeReason
400VALIDATION_FAILEDMissing required field, to/from not E.164
401INVALID_CREDENTIALSAuth ID / Auth Token bad
403FORBIDDENfrom does not belong to the account, or URL auth_id doesn't match the authenticated account.
502NO_CARRIER_AVAILABLENo active carrier covers the destination

Notes

  • Phone numbers must be in E.164 format (e.g. +14155551234).
  • The answer_url must be publicly reachable and respond with valid VoxML within 15 seconds.
  • Machine detection adds 1–3 seconds to call connection time and may be charged at a premium rate depending on plan.
  • The response field is request_uuid, not call_uuid — there is no separate call UUID today.

On this page