Skip to navigation

Transfer Call tool

Route an active phone call to a phone number or SIP URI

The transfer call tool lets an assistant route an active phone call to a phone number or Session Initiation Protocol (SIP) URI. Use it to connect a caller with a person, department, or external phone system based on the conversation. To move a call between assistants, use the handoff tool instead; handoff works with standalone assistants and assistants in a Squad.

Prerequisites

Before you create the tool, prepare:

  • A Vapi assistant that handles phone calls
  • A reachable destination phone number in E.164 format, for example, +14155550100, or a valid SIP URI
  • A private Vapi API key for the curl method

Configure the transfer call tool

Create a reusable transfer call tool, define its destinations, and add it to an assistant.

1

Create the tool

Open Tools in the Vapi Dashboard, click Create Tool, and select Transfer Call.

Vapi Dashboard Create Tool menu with Transfer Call under Phone Call Tools
Select Transfer Call from the Create Tool menu
2

Describe when to transfer

Under Tool Settings, enter a clear Tool Name and Description. Describe the conditions that should trigger a transfer so the assistant can choose the tool reliably.

For example:

System prompt
Transfer the caller to a billing specialist when they ask about an
invoice, refund, or payment. Only transfer after the caller agrees.
3

Add a destination

Under Destinations, click Add Destination, then select Phone Number or SIP. Enter the destination and a specific description of when the assistant should use it.

For a phone number, use E.164 format, including the + prefix and country code. If you add multiple destinations, give each one a distinct description so the assistant can route the caller correctly.

Vapi Dashboard phone-number destination with an E.164 number and customer message
Configure a phone-number destination
4

Configure transfer messages

Optionally configure a message for the assistant to say before the transfer. If neither the destination nor the tool defines a message, the assistant says Transferring the call now by default. Set the destination message to an empty string for a silent transfer. A message can be at most 1,000 characters.

Expand Transfer Plan to choose how this destination receives the call. Leave Blind Transfer selected for an immediate transfer, or follow the mode-specific guides below to configure another behavior.

Vapi Dashboard destination description and Transfer Plan set to Blind Transfer
Describe the route and choose its transfer mode
5

Publish the tool

Select Publish in the tool header. Review the changes, then select Next. Enter a Version Name and, optionally, a Description. Select Publish to make the tool version current.

6

Add the tool to an assistant

Open Assistants and select the assistant. In the assistant’s Tools section, select Add tool and choose the new transfer call tool. Update the system prompt to state exactly when the assistant should transfer the call.

Vapi Dashboard assistant Tools tab with the Add tool button
Open the assistant's Tools tab and click Add tool
7

Publish the assistant

Select Publish in the assistant header. Review the changes, then select Next. Enter a Version Name and, optionally, a Description. Select Publish to make the assistant version current.

Choose a destination

Use the destination type that matches the system receiving the call.

DestinationUse it forRequired value
Phone numberA person, department, or public switched telephone network (PSTN) endpointnumber in E.164 format
SIPA SIP trunk, private branch exchange (PBX), or other SIP endpointsipUri

For a phone-number destination that uses an extension, set extension instead of adding the extension to number. Vapi dials the extension after the destination answers.

A destination’s description tells the assistant when to select it. Keep each description specific to a routing intent, for example, billing, sales, or technical support.

To choose among stored destinations based on an API lookup, follow Transfer calls using API Request and Transfer Call tools. To select or construct a destination at runtime instead of storing it on the tool, follow Dynamic call transfers.

Route to multiple destinations

A single transfer call tool can contain multiple phone-number destinations, SIP destinations, or a mix of both. When the assistant invokes the tool, it uses the conversation and each destination’s description to select one destination; it does not call every destination in the array.

In the Dashboard, click Add Destination for each route. Give every destination a distinct description, then add matching routing rules to the assistant’s system prompt. For example:

System prompt
- Transfer billing questions to the billing phone number.
- Transfer purchase questions to the sales phone number.
- Transfer technical incidents to the support SIP URI.
- If the caller's intent is unclear, ask which team they need before transferring.

With the API, add one object for each route to destinations. Each object can have its own message and transfer plan. When updating a tool, include every destination that should remain because the new destinations array replaces the existing array.

To move the conversation to another Vapi assistant, use the handoff tool instead of a phone or SIP transfer. Handoff works between standalone assistants and between assistants in a Squad, and can carry conversation context into the destination assistant.

Choose a transfer mode

The transfer mode controls what happens on the destination call leg before the customer is connected. The Dashboard displays a readable label; API requests use the corresponding transferPlan.mode value.

Dashboard modeAPI valueWhat it does
Blind Transferblind-transferConnects the customer without speaking to the destination. This is the default. See Blind transfer.
Blind Transfer with Summary in SIP Headerblind-transfer-add-summary-to-sip-headerAdds a generated summary to the X-Transfer-Summary SIP header, then transfers immediately. See Blind transfer. Vapi numbers and bring-your-own SIP trunks only. Other providers transfer without the header.
Warm Transfer with Messagewarm-transfer-say-messageSpeaks a fixed message to the destination before connecting the customer. See Warm transfer. Twilio only. Other providers transfer without the message.
Warm Transfer with Summarywarm-transfer-say-summarySpeaks a generated conversation summary to the destination before connecting. See Warm transfer. Twilio only. Other providers transfer without the summary.
Warm Transfer with TwiMLwarm-transfer-twimlExecutes TwiML on the destination call leg before connecting. See Warm transfer. Twilio only.
Warm Transfer - Wait for Operator, Then Say Messagewarm-transfer-wait-for-operator-to-speak-first-and-then-say-messageWaits for destination speech, then delivers a fixed message. See Warm transfer. Twilio only. Other providers transfer without the message.
Warm Transfer - Wait for Operator, Then Say Summarywarm-transfer-wait-for-operator-to-speak-first-and-then-say-summaryWaits for destination speech, then delivers a generated summary. See Warm transfer. Twilio only. Other providers transfer without the summary.
Warm Transfer - Experimentalwarm-transfer-experimentalPlaces the customer on hold and supports fallback, summaries, custom audio, or a transfer-assistant conversation. See Assistant-based warm transfer. Works on Twilio (phone-number destinations), Vapi numbers, and bring-your-own SIP trunks.

Use Dynamic call transfers when the destination is selected at runtime. Dynamic destination selection is separate from the transfer mode.

Understand transfer outcomes and fallback

The assistant-forwarded-call ended reason means Vapi initiated a transfer or delegated call control to your server. By itself, it does not confirm that the destination answered or that the caller and destination spoke. Check the provider’s call record to confirm the downstream result.

Transfer modeCaller state before connectionIf the transfer fails
blind-transferThe transfer starts without an operator introduction.Doesn’t wait for an answer. On Twilio, a busy or unanswered call ends. On Vapi numbers and bring-your-own SIP trunks, the caller can return to the assistant only if SIP transfer fallback is enabled and fallbackPlan is configured.
blind-transfer-add-summary-to-sip-headerThe transfer starts with a generated summary in the X-Transfer-Summary SIP header.The summary is not spoken. The transfer call tool does not wait for operator acceptance.
warm-transfer-say-messageThe destination hears a fixed message before the caller is connected.This mode does not run an assistant that can accept or cancel the transfer.
warm-transfer-say-summaryThe destination hears a generated summary before the caller is connected.This mode does not run an assistant that can accept or cancel the transfer.
warm-transfer-twimlThe destination call leg executes the configured TwiML before the caller is connected.The TwiML controls the introduction; this mode does not run a transfer assistant.
warm-transfer-wait-for-operator-to-speak-first-and-then-say-messageThe destination speaks before hearing the fixed message.transferPlan.timeout limits the wait for destination speech. It is not a failed-transfer fallback.
warm-transfer-wait-for-operator-to-speak-first-and-then-say-summaryThe destination speaks before hearing the generated summary.transferPlan.timeout limits the wait for destination speech. It is not a failed-transfer fallback.
warm-transfer-experimentalThe caller waits on hold while the destination call leg runs.The transfer assistant can connect or cancel. After a failed attempt, the original assistant says the fallback message, then continues or ends the call. See Assistant-based warm transfer.

Test the selected mode with the same phone provider and destination used in production. For a transfer that requires an operator to accept the caller, configure assistant-based warm transfer and an explicit fallbackPlan.

Common transfer scenarios

Each scenario pairs a common reason for handing a caller to a person with the destination, transfer mode, and fallback settings that fit it. The scenarios differ in how much control you keep. A blind transfer connects the caller fastest but can’t bring them back if no one answers. Assistant-based warm transfer confirms that a person accepted before connecting the caller. Start from the scenario that matches why the caller needs a person, then check that your phone provider supports the transfer mode it uses.

NeedConfigureExpected result and recovery
Escalate when the caller asks or the assistant reaches a capability boundaryAdd a transfer destination and describe the trigger in the tool description and assistant prompt. Require caller agreement when appropriate.The model must invoke transferCall; speech alone does not start a transfer. Use call logs to confirm invocation.
Route to a specialistGive each stored destination a distinct description, or use a lookup-based transfer.The selected destination receives the transfer attempt. Confirm the selected route in the tool call and provider record.
Give an operator context before connectingUse a supported warm transfer mode with a message or summary.The destination hears the introduction before connection. These modes do not ask an assistant to confirm acceptance.
Require a person to accept a high-stakes escalationUse assistant-based warm transfer. Prompt the transfer assistant to call transferSuccessful only after acceptance and transferCancel when it should decline. Set fallbackPlan.endCallEnabled explicitly.The caller waits on hold during the operator conversation. A canceled attempt or handled operator-leg failure follows the configured fallback; test busy, no-answer, and voicemail outcomes with the production provider.

Verify the transfer

Place a test call and ask for the destination described in the tool. Confirm that the call log contains a transferCall tool invocation and that the destination rings or answers.

The assistant-forwarded-call ended reason confirms that Vapi initiated or delegated the transfer. It does not confirm that the downstream telephony provider completed it, so check the provider’s call logs when the destination does not receive the call.

Troubleshooting

SymptomLikely causeResolution
The assistant says it will transfer, but the call remains activeThe model generated speech without invoking the toolRequire the acknowledgment and tool invocation in the same response. Check the call log for a transferCall invocation.
The assistant selects the wrong destinationDestination descriptions overlap or do not state a clear routing intentGive every destination a distinct description and add matching routing rules to the system prompt.
The tool returns a validation or configuration errorThe destination is missing or malformedConfirm that destinations is an array and that each item has a valid type and required value. Use E.164 format for PSTN phone numbers.
The call has assistant-forwarded-call, but the destination never ringsVapi initiated the transfer, but the downstream route did not complete itOpen the affected call in Calls under Logs and check its Logs tab for transfer errors, then check the provider call detail record and transfer compatibility. For SIP calls, inspect the provider’s REFER or dial behavior.
The assistant transfers when it should continue helpingThe prompt permits broad invocationNarrow the prompt conditions. For tools configured through the API, you can also add a tool rejection plan.
The same request is transferred on some calls and refused on othersThe prompt asks the model to apply several rules before it transfers, such as office hours, eligibility flags, or building the destination numberMove the rules to your server. Leave the destination off the tool so Vapi sends a transfer-destination-request, then respond with a destination or an error.
An assistant-to-assistant transfer stalls or behaves like an external callThe transfer call tool is being used for assistant routingUse the handoff tool for transfers between standalone assistants or assistants in a Squad.

For dropped calls, provider diagnostics, and SIP packet checks, follow Troubleshoot call transfers. The call ended reasons reference lists transfer-specific outcomes such as call.in-progress.error-transfer-failed.

API reference

The Create Tool API reference documents the public transfer call fields, destination types, transfer plans, messages, and rejection settings. The Update Assistant API reference documents how to assign reusable tools with model.toolIds.