Transfer Call tool
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.
To create the tool and add it to an assistant, see Set up the Transfer Call tool. If a transfer doesn’t start, connect, or return the caller to the assistant, see Troubleshoot call transfers.
What happens during a transfer
Every transfer follows the same steps until the destination call leg starts:
- The model calls the transfer call tool.
- If the tool has no stored destination, Vapi sends a
transfer-destination-requestto your server and waits for the response. Nothing plays to the caller while Vapi waits, so a slow response is silence on the call. - The assistant says one transfer message. See Configure transfer messages.
- Vapi sends a
status-updatemessage withstatusset toforwarding. This message is sent before the transfer is attempted, so you receive it even when the transfer fails. - The transfer starts. The transfer mode decides what the caller and destination hear next.
For every mode except assistant-based warm transfer, the original assistant leaves the call when the transfer starts and the call ends with assistant-forwarded-call.
Choose a transfer mode
The transfer mode controls what happens on the destination call leg before the caller is connected. The Dashboard displays a readable label; API requests use the corresponding transferPlan.mode value.
Use Dynamic call transfers when the destination is selected at runtime. Dynamic destination selection is separate from the transfer mode.
What the destination receives
A phone or SIP destination receives the call audio and, depending on the mode and phone provider, an introduction. It doesn’t receive the transcript, variables, or assistant context. To move a conversation to another assistant with its context, use the handoff tool.
Caller ID
Set callerId on a destination to choose the number the destination sees. It accepts an E.164 number, {{customer.number}} for the caller’s number, or {{phoneNumber.number}} for the phone number that received the call. Without callerId, the default depends on the phone provider:
Assistant-based warm transfer presents the caller’s number where the phone provider allows it. On Twilio, it presents the caller’s number only when Twilio verified the incoming call. Otherwise, it presents the phone number that received the call.
Introductions and headers
- Spoken introduction: Twilio warm transfer modes speak a message or summary to the destination before the caller joins. Twilio speaks it, so it doesn’t use the assistant’s voice. See Warm transfer.
- Summary header: On Vapi numbers and bring-your-own SIP trunks,
blind-transfer-add-summary-to-sip-headersends a generated summary in theX-Transfer-SummarySIP header. It’s never spoken. - Custom SIP headers: On Vapi numbers, bring-your-own SIP trunks, and Telnyx,
sipHeaderson the destination are sent with the transfer. Twilio doesn’t send custom SIP headers.
You can include variables in a destination’s message, summary prompt, and sipHeaders to pass caller details.
Summaries
Vapi generates summaries from the conversation transcript using transferPlan.summaryPlan. Who hears the summary depends on the 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.
Find out what happened to a transfer
No server message reports a failed phone or SIP transfer. After the call, check:
endedReason: On Vapi numbers and bring-your-own SIP trunks, a busy destination ends the call withcall.forwarding.operator-busy, an unanswered one withcall.forwarding.no-answer, and a rejected or failed transfer withcall.in-progress.error-transfer-failed. See Call end reasons.- Call logs: Open the call in Calls under Logs, select its Logs tab, and search for
transfer. The Transfer Completed entry has aresultofconnected,busy,no-answer, orunconfirmed.
If Vapi doesn’t receive a final outcome, it reports the transfer as assistant-forwarded-call and the log result is unconfirmed. That doesn’t confirm the destination answered or even received the call. To trace a transfer step by step, see Troubleshoot call transfers.
Return the caller to the assistant after a failed transfer
On Vapi numbers and bring-your-own SIP trunks, add a fallbackPlan to the destination’s transferPlan so a failed blind transfer returns the caller to the assistant. The assistant says fallbackPlan.message, which defaults to Could not transfer the call. Then:
- With
endCallEnabledset tofalse, the assistant keeps helping the caller. - With
endCallEnabledset totrueor not set, the call ends.
In assistant-based warm transfer, the default is the opposite: if endCallEnabled isn’t set, the caller stays with the assistant.
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.