AI Evy
02/04/2026, 9:45 PMDom4o
02/04/2026, 9:46 PMAI Evy
02/04/2026, 9:46 PMAI Evy
02/04/2026, 9:47 PM+12137771234) or a valid SIP URI in the format sip:username@domain. [(1) ]() [(2) ]()
2. Transfer Type Setup
- For **cold transfer**: The call is transferred to the destination and ends there.
- For **warm transfer**: The AI agent can detect if the other side is human, leave private messages, etc.
*3. SIP Trunk Configuration (if using custom telephony) *
If you're using Elastic SIP Trunking, verify your termination settings in your SIP trunking provider. [(3) ]()
For cold transfers, SIP REFER is used. You need to configure your SIP trunking provider to allow SIP REFER and PSTN transfer.
4. Required Fields
A recent Discord thread revealed that missing the transfer_option field when creating the transfer call tool via API can cause issues—the API may not reject the request but the transfer won't work correctly. Make sure you're using the latest SDK and including all required fields. [(4) ]()
## Troubleshooting Steps
- Check the logs in your telephony provider for any errors. [(3) ]()
- Verify your termination SIP URI is correct and has no extra spaces. [(5) ]()
- If using caller ID override (showing user's number to transfer destination) , confirm your telephony provider supports this—if not supported, the transfer may fail. [(1) ](https://AI Evy
02/04/2026, 9:47 PMAI Evy
02/04/2026, 9:47 PMAI Evy
02/04/2026, 9:47 PMDom4o
02/04/2026, 9:50 PMDom4o
02/04/2026, 9:50 PMAI Evy
02/04/2026, 9:50 PMAI Evy
02/04/2026, 9:51 PM+12137771234) or SIP URI
- Choose cold or warm transfer
For Conversation Flow Agents:
- Add a Call Transfer Node to your flow [(2) ]()
- Configure the transfer destination and settings in the node
## Option 2: Using the API (Programmatic Setup)
If you're creating agents programmatically, you would use the API when creating the LLM with general tools. Here's an example from the documentation: [(3) ]()
python
general_tools = [
{
"type": "transfer_call",
"name": "transfer_to_maddie",
"description": "Transfer the call to Maddie, our consultant.",
"transfer_destination": {
"type": "predefined",
"number": settings.HUMAN_TRANSFER_PHONE_NUMBER,
},
},
]
llm_response = self.client.llm.create(
model="gpt-4o",
general_prompt=system_prompt,
general_tools=general_tools,
)
Important: Make sure to include the transfer_option field and use the latest SDK—missing required fields can cause transfers to silently fail.
If you're just getting started, the dashboard approach is simpler. Which method are you currently using?AI Evy
02/04/2026, 9:51 PMAI Evy
02/04/2026, 9:51 PMDom4o
02/04/2026, 9:57 PMAI Evy
02/04/2026, 9:57 PMAI Evy
02/04/2026, 9:57 PMAI Evy
02/04/2026, 9:57 PMAI Evy
02/04/2026, 9:57 PMAI Evy
02/04/2026, 9:57 PMDom4o
02/04/2026, 10:02 PMAI Evy
02/04/2026, 10:02 PMAI Evy
02/04/2026, 10:02 PM.pstn.twilio.com. [(2) ]() [(3) ]()
The format is:
someuri.pstn.twilio.com
[(2) ]()
## Where to Find It
You get this URI from your Twilio console when you create your elastic SIP trunk. It's set up in the Termination section of your SIP trunk configuration. [(3) ]()
## When Importing to Retell
When you import your phone number to Retell, you provide this termination URI:
javascript
const phoneNumberResponse = await client.phoneNumber.import({
phone_number: '+14157774444',
termination_uri: 'someuri.pstn.twilio.com',
}) ;
[(2) ]()
The termination_uri field is required when importing a phone number for custom telephony.
If you haven't set up a termination SIP URI in Twilio yet, you'll need to create one in your Twilio elastic SIP trunk settings first, then use that URI when importing the number to Retell.AI Evy
02/04/2026, 10:02 PMAI Evy
02/04/2026, 10:02 PM