Call handle whose
sid addresses everything else — audio, transfer, hangup, telemetry.
Outbound originate is a control-plane operation: it returns as soon as the
call is
dialing, not when the callee answers. Read the outcome by polling
calls.get (below) or by consuming
call-lifecycle events.Before you start
A configured SIP trunk
Outbound calls route over a trunk you own. Create one and note its
trunkId — see SIP trunking.A caller-id you're allowed to present
The
from number must be one the trunk (or your carrier) permits. Numbers
you’ve allocated live in
number provisioning.Place a call
Callcalls.originate with the destination, caller-id, and trunk. The returned
handle carries the sid — the only identifier you need for everything that
follows.
- TypeScript
- Python
E.164 destination number.
Caller-id, E.164. Must be permitted on the trunk.
The SIP trunk to route the call over.
AI agent id to attach automatically on answer (see below).
Seconds to ring before giving up. Server-clamped to 5..120; default 30.
Attach an AI agent
Passagent and the engine wires the audio bridge for you the moment the callee
answers — the agent starts talking with no AudioBridge code on your side. This
is the whole outbound-AI path in one call.
- TypeScript
- Python
agent and attach an
audio bridge to the sid instead.
Cap the ring time
ringTimeoutSec bounds how long the callee’s phone rings before the call is
abandoned as no_answer. Pass a shorter value for tight retry loops or a longer
one for numbers that are slow to pick up. The engine clamps the value to
5..120 seconds — anything below 5 becomes 5, anything above 120 becomes 120 —
so you never have to validate it yourself.
- TypeScript
- Python
ringTimeoutSec: 3 is accepted but behaves as 5; ringTimeoutSec: 240
behaves as 120. The clamp is silent — the value you read back on the call may
differ from what you sent.Poll for the outcome
Becauseoriginate returns at dialing, you learn whether the call connected by
re-fetching it. calls.get({ sid }) returns a fresh Call with the current
status.
- TypeScript
- Python
| Status | Meaning |
|---|---|
dialing | Originate accepted; the carrier is being reached. |
ringing | The callee’s phone is ringing. |
in_progress | Answered and connected — audio is flowing. |
completed | Ended normally after connecting. |
no_answer | Rang past ringTimeoutSec without an answer. |
failed | Rejected, busy, or unreachable. |
- TypeScript
- Python
Placing many calls
calls.originate places one call. For high-volume outbound — pacing thousands of
numbers with a rate limit and a concurrency cap — use the control-plane bulk
dialer rather than looping originate yourself; it owns the pacing and
back-pressure. See the
PBX & ACD guide for campaign
setup.
Related
SIP trunking
Create and configure the trunks outbound calls route over.
Number provisioning
Allocate the numbers you present as caller-id.
Call lifecycle
The full event stream — a push alternative to polling status.
AI ↔ human handoff
Attach an agent mid-call, or hand between a bot and a person.