Skip to navigation

Complete a warm transfer

View as Markdown

Makes the handoff final: the caller stays in the conference with the human. No carrier leg is touched (the AI already left the line when the transfer started) and the call row is closed by the carrier when the caller eventually hangs up.

Requires a transfer started with POST /api/calls/{callId}/transfer; otherwise 400.

Side effects. Sets the call’s outcome to escalated_to_human unless post-call analysis already wrote one, and sends a call.escalated trigger to Zapier subscribers with transferredTo set to the destination number and no escalatedBy key (absent means this admin path). The transfer fields are kept. Writes an audit entry.

This is no longer the only producer of escalated_to_human: since 2026-09-15 the agent handing the call to a person during the call records the same outcome and fires the same trigger, with escalatedBy: "agent" and transferredTo: null.

Idempotency. Safe to retry: repeating it re-applies the same outcome (never overwriting an existing one).

Access

  • Required scope: full. Signed-in users need the admin or owner role.
  • Rate limit: General API — 120 (Starter), 200 (Growth), 300 (Business) or 600 (Enterprise) requests/min per workspace. The 20/min outbound limit applies only to starting the transfer. See Rate limits.
  • Plan: Available on every plan.

Authentication

AuthorizationBearer

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.

ScopeGET / HEADPOST / PUT / PATCH / DELETEAdmin-only routes
readYesNoNo
writeYesYesNo
fullYesYesYes

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.

Path parameters

callIdstringRequiredformat: "uuid"

The transferred call’s id. Must be a UUID (400 Invalid call ID otherwise).

Response

Transfer completed. Note this body has no data wrapper.

successtrue

Always true.

messagestring
Fixed confirmation text.

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
404
Not Found Error
429
Too Many Requests Error
502
Bad Gateway Error