> For clean Markdown of any page, append `.md` to the page URL.
> For a complete documentation index, see https://docs.sarvam.ai/llms.txt.
> For full documentation content in one file, see https://docs.sarvam.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server.

# Call transfer

Call transfer lets a voice agent hand a live phone call to a human, another number, or your own SIP trunk when the conversation needs it - an escalation, a specialist, or an explicit request to speak to someone.

It is a [core tool](/conversations/build/tools/core-tools). You configure the destination under **Settings → In Call Actions**; the model decides *when* to transfer from the conversation.

Call transfer is available on **phone calls**. It is not available in chat or the browser voice tester.

## When the agent should transfer

Write a clear instruction so the model transfers at the right moment. Typical triggers:

* The caller asks to speak to a human, an agent, or a named team (sales, billing, collections)
* The request needs human judgment the agent cannot complete
* An escalation rule fires (for example, a dispute, a cancellation, or a complaint)

Be specific in the [instruction](/conversations/build/system-prompt). Type `@` and insert the **`call_transfer`** tool so the agent knows exactly what to call. "When the caller asks for a refund, confirm they want a human, then transfer using `call_transfer`" works better than "transfer the call".

![The Instructions editor with a refund-handoff prompt that ends in the call\_transfer tool chip.](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/sarvam-api-docs.docs.buildwithfern.com/1dd2186771cf94a3924b16aa06c3516ee02416b0f849dcd14b7f76eebdfec749/voice-agents/images/call-transfer-instruction.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260904%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260904T073406Z&X-Amz-Expires=604800&X-Amz-Signature=746747df19cb73e869bea502844ee7586b386cc466e243372153053a6e87ef98&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

## Supported telephony

| Provider                                                                                                                                      | Call transfer                                               |
| --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| **[Vobiz](/conversations/deploy/telephony/vobiz)** (your own account or [Rent from Sarvam](/conversations/deploy/telephony/rent-from-sarvam)) | Supported end to end. No extra setup on the Vobiz platform. |

Call transfer is not self-serve on other telephony providers.

Prefer Vobiz if you want to configure and test transfers yourself. Numbers rented through **Rent from Sarvam** use Vobiz underneath, so they support call transfer the same way.

## Destination types

Choose one destination type per agent. The value can be fixed, or read from an [agent variable](/conversations/build/variables-personalization) at runtime.

| Type                    | Format      | Example                   |
| ----------------------- | ----------- | ------------------------- |
| **Phone number (PSTN)** | E.164       | `+919876543210`           |
| **SIP URI**             | SIP address | `sip:support@example.com` |

Use a **variable** when the destination depends on the caller - for example a campaign column, an on-start CRM lookup, or a language-specific queue. The variable's value is resolved when the transfer runs.

The destination must answer. A number that rings out, goes to voicemail, or rejects the call looks like a failed transfer even when the agent invoked the tool correctly. Test with a phone you control.

## How to configure

Call transfer is configured as **Call forwarding** under **Settings → In Call Actions**.

![Call forwarding settings with the toggle on, Destination type set to Phone number, Value type set to Static value, and Forward to set to +919876543210.](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/sarvam-api-docs.docs.buildwithfern.com/a77d63216ef1ba4bbf222c8f589c2f5e3acba59f51434aabf76b1934706775bf/voice-agents/images/call-forwarding.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260904%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260904T073406Z&X-Amz-Expires=604800&X-Amz-Signature=dc165708c9cfc14afb7ff956c7c729c5b19ab5c90343295c94859c1a70df3573&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

#### Open the agent

In Voice Agents, open the agent you want to transfer from.

#### Go to Settings → In Call Actions

On the Canvas, open **Settings**, then **In Call Actions**.

#### Turn on Call forwarding

Enable **Call forwarding**, then set **Destination type** to **Phone number** or **SIP URI**.

#### Set the destination

Set **Value type** to **Static value** and enter the number or SIP URI in **Forward to**. Or bind an [agent variable](/conversations/build/variables-personalization) so the value is filled at runtime.

#### Tell the agent when to transfer

In the [instruction](/conversations/build/system-prompt), state the conditions and insert **`call_transfer`** with `@`. For example: "When the user requests a refund, acknowledge the request, confirm they want a human support agent, and, upon confirmation, transfer the call using `call_transfer`."

#### Commit and test on a phone

[Commit](/conversations/build/agent/versioning) the agent, then place a real [phone](/conversations/build/navigating-workspace#testing-the-agent) call. Browser voice and chat cannot exercise a transfer.

## Example

**Caller:** "Can I talk to someone on your sales team?"

**Agent:** "Sure, I'll connect you now."

The agent calls `call_transfer`. The live call is bridged to the configured sales number or SIP URI.

## After a transfer

Transferred calls are visible in [Call Logs](/conversations/monitor/agent-analytics/call-logs) like any other conversation.

* **End Reason** is `CALL_TRANSFER` when the agent handed the call off.
* Transfer **status** and the **recording of the transferred leg** are captured, so you can see whether the destination answered and what happened after the handoff.

Filter Call Logs by agent, campaign, or date, then look for `CALL_TRANSFER` in **End Reason**.

## Best practices

* **Be specific in the prompt.** Name the situations that should transfer (human request, billing dispute, cancellation) instead of a generic "escalate if needed".
* **Confirm the destination is reachable** before you go live - a wrong number or an unmanned queue fails the caller, not just the metric.
* **Use a variable for routing.** When sales and support should land on different numbers, set the destination from a campaign column or an [on-start hook](/conversations/build/on-start-on-end-hooks), rather than hard-coding one number for every caller.
* **Plan for a failed transfer.** Tell the agent what to say and do if the destination does not answer - offer a callback, take a message, or continue the conversation.
* **Test on the same telephony you will use in production.** A transfer that works on Vobiz is not a test of an Exotel number.

## Troubleshooting

| Symptom                                              | What to check                                                                                                          |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| The agent says it cannot transfer                    | Call transfer is not enabled on the agent, or the call is not on a [supported provider](#supported-telephony).         |
| The agent says it will transfer, but nothing happens | The model announced the intent and did not call the tool. Tighten the instruction so the transfer step is unambiguous. |
| The transfer fires, but nobody picks up              | The destination did not answer. Confirm the number or SIP URI, and that a person or queue is staffed.                  |
| You are on Exotel and transfers do not complete      | Call transfer on Exotel is not self-serve. [Contact the Sarvam team](mailto:developer@sarvam.ai).                      |
| Browser or chat tests never transfer                 | Expected. Use **test agent → Phone**, or a live inbound / campaign call.                                               |

## Next

#### [Core tools](/conversations/build/tools/core-tools)

Other built-in tools the harness provides.

#### [Variables](/conversations/build/variables-personalization)

Pass a dynamic transfer destination at runtime.

#### [Vobiz](/conversations/deploy/telephony/vobiz)

Connect Vobiz - the provider with end-to-end transfer support.

#### [Call Logs](/conversations/monitor/agent-analytics/call-logs)

Find transferred calls by End Reason.