Start a warm transfer
Authentication
Path parameters
The live call’s id. Must be a UUID (400 Invalid call ID otherwise).
The live call’s id. Must be a UUID (400 Invalid call ID otherwise).
Moves a live call into a conference and dials transfer_to, so a human joins the caller. Finish with POST /api/calls/{callId}/transfer/complete (the human keeps the caller) or POST /api/calls/{callId}/transfer/cancel (hang up the human and hand the caller back to the AI).
Checks, in order: the destination must pass the workspace’s destination policy (premium-rate / toll-fraud prefixes, workspace blocklist, allowed countries; refused with 403 even before the call is looked up, and the refusal is written to the audit log with the masked number); the call must exist; it must have a carrier leg, so calls on a SIP-trunk number cannot be transferred (400); and the carrier must confirm the leg is in-progress (400 when not, 409 when the carrier cannot be reached).
Side effects. Redirects the caller’s leg into a conference (the AI stops speaking at that moment) and places a second, billable outbound call to transfer_to from the workspace’s own voice number. Stores transfer_call_sid, transferred_at and transferred_to on the call. Writes an audit entry.
Idempotency. Not idempotent: each successful request dials transfer_to again into a new conference.
Access
full. Signed-in users need the admin or owner role.Workspace API key: jl_ followed by 64 lowercase hex characters, created by the workspace owner in the
dashboard (Settings → API Keys) and sent as Authorization: Bearer jl_.... The plaintext is shown once,
at creation; Jelliu stores only a SHA-256 hash. A workspace can hold up to 25 active keys.
Operations restricted to admins or owners reject keys without the full scope with 403, and say so in
their description. No key, whatever its scope, can mint or revoke API keys or rotate a webhook secret —
that requires a signed-in owner session. A revoked key stops authenticating within about 10 seconds.
See Authentication.