Quick Use
- Have at least 2 Vapi assistants created (greeter + specialist)
- POST a squad definition to
/squadwith assistantDestinations between members - Start a call with
squadIdin the call request — Vapi handles transfers automatically
Intro
Vapi Squads connect multiple voice agents into a single coordinated stack — caller starts with a Greeter, who hands off mid-call to a Specialist, who routes back to a Closer. Each agent has its own system prompt, tools, and voice. Best for: voice products where a single mega-prompt becomes brittle (e.g. medical intake → triage → scheduling). Works with: Vapi platform; Squads can include Workflows or free-form assistants. Setup time: 5 minutes (define agents → wire transfers).
Why split into a squad
A single prompt that says "Be a hotel concierge AND handle bookings AND transfer to maintenance AND…" produces an agent that's mediocre at everything. Squads let you write three small focused prompts:
- Greeter (warm, redirects fast)
- BookingSpecialist (knows pricing, calendar, upgrades)
- MaintenanceTriage (categorizes issues, transfers to humans)
Each has its own toolset and voice. The squad routes between them based on intent.
Define a squad
curl -X POST https://api.vapi.ai/squad \
-H "Authorization: Bearer $VAPI_API_KEY" \
-d '{
"name": "Acme Concierge Squad",
"members": [
{
"assistantId": "greeter-id",
"assistantDestinations": [
{ "type": "assistant", "assistantName": "BookingSpecialist", "message": "Let me transfer you to our booking specialist." },
{ "type": "assistant", "assistantName": "MaintenanceTriage", "message": "Connecting you to maintenance." }
]
},
{
"assistantId": "booking-specialist-id",
"assistantDestinations": [
{ "type": "assistant", "assistantName": "Greeter", "message": "Anything else I can help with?" }
]
},
{
"assistantId": "maintenance-triage-id",
"assistantDestinations": [
{ "type": "assistant", "assistantName": "Greeter" }
]
}
]
}'How transfers happen
Inside the Greeter's system prompt, you give the LLM tool access to a transferCall function with destinations declared in the squad. When the LLM detects intent, it calls the function and Vapi swaps in the next assistant — keeping the audio session alive, no re-dial.
Greeter: "Hi, Acme Hotels. How can I help?"
User: "I'd like to book a room for next weekend."
Greeter: [calls transferCall(destination: "BookingSpecialist")]
"Let me transfer you to our booking specialist."
[BookingSpecialist takes over with full conversation context]
BookingSpecialist: "Hi! I see you're looking to book for next weekend. What city?"The user perceives one continuous call.
Squad vs single assistant with tools
| Squad | Single + Tools |
|---|---|
| Each agent has independent voice / language / model | One voice for everything |
| Easy to A/B test specialists individually | Have to A/B the whole stack |
| Smaller, focused prompts | One mega-prompt |
| Best for >2-3 distinct personas | Fine for 1-2 |
FAQ
Q: Does the next assistant get the conversation history?
A: Yes — Squad transfers preserve the full conversation context so the receiving agent doesn't ask the same questions twice. You can also pass an explicit transferContext if you want to summarize state in custom format.
Q: Can a Squad include a Workflow? A: Yes — a Squad member can be either a free-form assistant OR a Workflow. Useful pattern: Greeter is free-form (handles small talk), BookingSpecialist is a Workflow (script-driven booking flow).
Q: How is this different from Workflow's transfer node? A: Workflow's transfer is one-way (pass the call to a human or another assistant and don't come back). Squad transfers are bidirectional — the BookingSpecialist can hand back to Greeter when the booking is done. Squads are state-aware; Workflow transfers are exits.
Source & Thanks
Built by Vapi. Commercial product with free trial.
docs.vapi.ai/squads — Official docs