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. The transfer fields are kept. Writes an audit entry. **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:** Outbound — 20 requests/min per workspace, and also the General API budget (per plan: 120 to 600 requests/min per workspace). See [Rate limits](/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. | Scope | GET / HEAD | POST / PUT / PATCH / DELETE | Admin-only routes | | --- | --- | --- | --- | | `read` | Yes | No | No | | `write` | Yes | Yes | No | | `full` | Yes | Yes | Yes | 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](/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