POST /v1/calls/outbound places one live phone call: it dials to from one of your workspace’s numbers and puts a published voice agent on it. For a list of people, use batch calling.
This places a real, billable call to a real person. There is no test mode; the dashboard’s test-call button on a phone number calls this same endpoint. The request returns when the call has been placed, not when it is answered.

Request

uuid
required
The number to dial from. It must be active, have can_outbound on, and belong to a carrier account that is ready. Its E.164 is the caller ID the person sees; caller ID cannot be set per call. The call is hosted in the number’s region.
string
required
The number to dial, in any format. Normalized as described below.
uuid
A published voice agent. A video or text agent is refused.
object
What the call starts knowing about the person, read as {{userdata.field}}. Merged onto their contact record, so it is there on their next call. Keys starting with _talqing are reserved. See userdata.
object
String values for the agent’s declared variables, read as {{vars.name}}. They last for this call only and are never written to a contact record. A required variable with no default must be supplied. See variables.
agent_version (including "draft"), agent_override, an inline agent and agent_team work here as on every session-starting endpoint; see per-call configuration. The resolved agent is validated at request time, so a bad override is a 400, not a failed call.

How to is normalized

to is normalized to E.164 against the country of the number you dial from. A national-format number is read as national to that country. The result must be a valid, assignable number or the request is refused. Send full international format when in doubt.

Response

GET /v1/calls/{session_id} answers on this id immediately and carries status, transcript, latency and cost (null until the call is priced); see calls. warnings lists what resolving the agent plan flagged but did not refuse (for example an unreachable team member). It is not stored anywhere — log it from this response. The session.queued webhook fires as the call is placed and session.completed after it ends and its recording, analysis and billing have landed; see webhooks.

Credit

A workspace with no credit gets a 402 and nothing is written or dialled. See pricing and credits.
Voicemail is only detected if the agent has voicemail_detection on. Off (the default), a call that reaches voicemail is answered, billed, and recorded as a normal completion with the agent talking to nobody.

Limits on a call

Errors

Next

Batch calling

The same call, to a list, on a schedule.

Close reasons

Every way a call can end.