---
title: "Transfer a live call to another destination"
method: POST
path: "/api/v1/calls/{callId}/transfer"
tags: ["Outbound Calls"]
---

# Transfer a live call to another destination

`POST /api/v1/calls/{callId}/transfer`

## Request

- Base URL: `https://api.callnode.io`
- URL: `https://api.callnode.io/api/v1/calls/{callId}/transfer`
- Auth: API key in header `X-Api-Key` and API key in header `X-Timestamp` and API key in header `X-Signature`

Moves the caller on an in-progress call to another destination, and
hangs up whatever they were connected to.

Built for calls delivered to your own SIP endpoint via a number's
`voice.sipUri`: those bridge straight to you without running the
conversational webhook, so returning `transfer: true` from a webhook is
not available on them. It also works on calls answered by a CallNode AI
agent.

Every transfer originates a new leg on your behalf, so it clears the
same gates as placing an outbound call: KYC, DNC/suppression, and the
destination-class guard. A CallLog and UsageRecord are written for the
transferred leg, so it is attributed and billable.

A transfer blocked by a gate returns the caller to the agent rather
than hanging up, so the agent can take a message.

`202` means accepted, not yet connected; the bridge follows
immediately.

## Request body

- object
  - `destination` string, required: E.164 number, or a `sip:` URI to your own endpoint. SIP hosts must be public — private and infrastructure ranges are rejected.

## Response `202`

Transfer accepted; the caller is being bridged.

- object
  - `callId` string
  - `destination` string
  - `status` string

## Other responses

- `400`: `invalid_destination` — not E.164 and not a `sip:` URI. `blocked_destination` — the SIP host is private or not allowed.
- `401`: Missing, unknown, or badly signed credentials — check the HMAC and the timestamp skew.
- `403`: `destination_not_enabled` — the destination's class (premium-rate or high-cost international) is not enabled on this account; contact support. `account_not_verified` — KYC gate.
- `404`: `call_not_found` — no active call with that id **on your account**. Deliberately does not distinguish "does not exist" from "not yours".
- `409`: `call_already_bridged` — the caller is connected elsewhere and re-routing is currently disabled. Not returned in normal operation.
- `422`: `dnc_blocked` — the destination is on a suppression list.
- `502`: `transfer_unavailable` — transient; safe to retry.

---

[API](https://skmtc.dev/callnode/apis/callnode-outbound-api.md) · [All operations](https://skmtc.dev/callnode/apis/callnode-outbound-api/llms.txt) · [OpenAPI document](https://skmtc.dev/callnode/apis/callnode-outbound-api/revisions/c7da6ad06509?raw)
