Alex QS
10/30/2025, 11:18 PMVercel
10/31/2025, 3:49 PMAlex QS
10/31/2025, 9:05 PMAlex QS
10/31/2025, 9:24 PMVercel
10/31/2025, 10:21 PMChiranjeet Mishra
11/03/2025, 8:24 PMsilenceTimeoutSeconds parameter in your Transfer Assistant. By default, this timeout is 30 seconds, but you can adjust it to a value between 10 and 3600 seconds. This feature is part of the experimental warm transfer mode, which utilizes AI assistants to manage the transfer process. You can find more details on this in the [August 28, 2025 changelog](https://docs.vapi.ai/changelog/2025/8/28).
To implement this, you can follow these steps:
1. Define a transferAssistant object within your transferPlan.
2. Set the silenceTimeoutSeconds to your preferred duration.
3. Ensure that the mode is set to "warm-transfer-experimental".
Here's a basic configuration example:
json
{
"type": "transferCall",
"function": {
"name": "yourTransferFunctionName"
},
"destinations": [
{
"type": "number",
"number": "+14155551234",
"transferPlan": {
"mode": "warm-transfer-experimental",
"transferAssistant": {
"silenceTimeoutSeconds": 45,
"firstMessage": "Hi, I have a customer on the line.",
"maxDurationSeconds": 120,
"model": {
"provider": "openai",
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "Facilitate the transfer process by using transferSuccessful or transferCancel tools."
}
]
}
}
}
}
]
}
For detailed steps and configurations, refer to the [Assistant-based warm transfer documentation](https://docs.vapi.ai/calls/assistant-based-warm-transfer).Alex QS
11/03/2025, 9:47 PMAlex QS
11/03/2025, 9:48 PMChiranjeet Mishra
11/05/2025, 8:22 PMassistant object, like this:
json
{
"assistant": {
"firstMessage": "Transferring your call.",
"model": {
"provider": "openai",
"model": "gpt-3.5-turbo"
},
"voice": {
"provider": "11labs",
"voiceId": "minimal-voice"
},
"endCallFunctionEnabled": false,
"backgroundSound": "off"
},
"destination": {
"type": "number",
"number": "+14156756020"
}
}
If the destination object is present in the assistant-request, the assistant object should still be ignored — this setup just ensures the structure is valid.
If that still doesn’t work, please double-check that your assistant-request-response looks like this:
json
{
"destination": {
"type": "number",
"number": "+14156756020",
"message": ""
}
}
That will help confirm whether the issue is related to how the event payload is structured.
Best,
Kyle
---Alex QS
11/08/2025, 1:16 AMChiranjeet Mishra
11/12/2025, 1:33 AMassistant-request itself is generated and controlled by Vapi — however, the response is what comes from your ngrok endpoint, and that’s the part you can modify.
As noted in the documentation,
> “If the destination object is in the assistant-request-response, the AI will get skipped entirely.”
So ensuring that your response includes a properly formatted destination object is crucial for this behavior to work.
If you’re already returning it, please share an example payload (with any sensitive data redacted) so we can verify the structure matches what Vapi expects.
Best,
Kyle
---