POST /v1/calls places a call and returns as soon as it is queued. It does
not wait for the call to be answered. Full schema and playground:
Create an outbound call.
string
required
The agent to place the call with. Find it in the dashboard under Agents:
open the agent and copy the ID shown under its name. Only active, outbound
agents can place calls; others are rejected with
agent_inactive or
agent_not_outbound.string
required
Number to dial. E.164 (
+1...) preferred.string
Caller ID. If sent, it must equal the agent’s configured number or the
request is rejected with
from_number_mismatch.object
Per-call values the agent’s script uses. Some are required per agent; a
missing one is a
422 listing the keys.object
Any JSON object. Stored untouched and echoed back on every webhook and on
GET /v1/calls/{call_id}.Retell-compatible aliases
A client written for Retell’s create-call endpoint works with only a URL change.override_agent_id maps to agent_id and
retell_llm_dynamic_variables maps to variables. override_agent_version
and any unknown fields are ignored.
Response
call_id is stable for the life of the call. It is the same id on every
webhook and on GET /v1/calls/{call_id}.
Errors
Errors come wrapped in adetail key. For validation and dispatch failures
detail is an object with error, error_code, and where applicable extra
fields. For auth and not-found errors it is a plain string.
Reading a call
GET /v1/calls/{call_id} returns the call object as of
now.
GET /v1/calls/{call_id}/recording returns { "url": "...", "expires_at": "..." },
a fresh link to the recording valid for about an hour. It is 404 until a
recording exists.