Skip to main content
POST
Outbound

Authorizations

x-api-key
string
header
required

Body

application/json
from_phone_number_id
string<uuid>
required

Org-scoped phone number id to dial FROM. Must have an outbound_call agent attached so a SIP outbound trunk has been provisioned.

to_phone_number
string
required

E.164 phone number to dial, e.g. +15555550123

Pattern: ^\+[1-9]\d{6,14}$
agent_id
string<uuid> | null

Optional: dial AS this specific agent. Must already be attached to the from-number as an outbound_call binding. Provide this XOR team_id; omit both to let the backend pick a bound dialer at random (load-balanced across the fleet).

team_id
string<uuid> | null

Optional: dial AS this specific team (its default member answers). Must already be attached to the from-number as an outbound_call binding. Provide this XOR agent_id; omit both for random pick.

agent_revision_id
string<uuid> | null

Optional: run THIS call on a specific published revision of agent_id instead of the revision pinned on the number's binding (pin-at-bind). Use to canary a newly published revision on live traffic before re-binding the number. Only valid alongside agent_id; the revision must belong to that agent and be published — drafts stay undialerable on live numbers (use /web-call for draft testing). Omitted → the binding's pinned revision, exactly as before. The call's context_variables are validated against the SAME revision that runs.

context_variables
Context Variables · object | null

Optional seed values for the bound agent's typed context variables, applied once at session bootstrap. Each key must be a variable declared on the agent or one of its bound workflows; values are coerced against the variable's type/enum. An unknown key or an uncoercible value is rejected (422). System vars are frozen on-file; derived seeds satisfy the collection gate. Only honored for single-agent bindings in v1 (ignored for team-bound dialers).

idempotency_key
string | null

Client-supplied dedup key; a retry of a still-queued call returns the same queued envelope (no second dial). Alphanumeric + dash/underscore, 1-120 chars.

Pattern: ^[A-Za-z0-9_\-]{1,120}$
instant
boolean
default:false

Test/instant dispatch: bypass the calling-hours window and dispatch immediately. Rate-limited separately; concurrency limits still apply.

expires_in_seconds
integer | null

Override the org's queued-call expiry for THIS call. Seconds from enqueue after which the call is expired if still waiting in the queue (never dialed). 0 disables expiry for this call even if the org has a default; omit (null) to use the org's call_expiry setting. Max 30 days.

Required range: 0 <= x <= 2592000
override_pause
boolean
default:false

Bypass the outbound pause gate and dispatch inline. Valid ONLY with instant=True (enforced by the schema validator). Requires the communication:manage permission — enforced in the router, not here. No effect on the queued (non-instant) path.

Response

Successful Response

agent_name
string
required
session_id
string<uuid>
required
queued
boolean
default:false
room_name
string | null
dispatch_id
string | null
agent_revision_id
string<uuid> | null
agent_revision_name
string | null
revision_source
enum<string> | null
Available options:
override,
pin,
active_fallback