Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion fern/calls/call-ended-reason.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Start here if a call failed and you want to quickly understand what happened:
| Phone never rang | `call.start.error-*`, `assistant-not-found`, `*-transport-never-connected` | Account/billing issue, bad configuration, or Vapi infrastructure error |
| Phone rang but no answer | `customer-did-not-answer`, `customer-busy`, SIP 408/480 | Normal behavior — callee was unavailable |
| Call dropped mid-conversation | `*-worker-died`, `phone-call-provider-closed-websocket`, `worker-shutdown` | Network issue or Vapi infrastructure error (usually transient) |
| Assistant went silent or unresponsive | `*-llm-failed`, `*-voice-failed`, `*-transcriber-failed`, `*-429-*`, `*-500-*` | Provider outage or credential/quota issue — configure fallback providers for the 3 core services (TTS, LLM, STT) |
| Assistant went silent or unresponsive | `*-llm-failed`, `*-voice-failed`, `*-transcriber-failed`, `*-429-*`, `*-500-*` | Provider error or credential/quota issue — configure fallback for the affected service, then inspect call logs and test the backup provider |
| Call worked normally, then ended | `assistant-ended-call`, `customer-ended-call`, `silence-timed-out`, `exceeded-max-duration` | Expected behavior — adjust timeout settings if calls end too early |
| Transfer failed | `*-transfer-failed`, `*-warm-transfer-*`, SIP 403/503 | Bad transfer destination or SIP configuration |

Expand Down
8 changes: 5 additions & 3 deletions fern/calls/troubleshoot-call-errors.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,11 @@ If you've configured **fallback providers**, some transcriber and voice errors w
</Accordion>
</AccordionGroup>

<Tip>
To prevent provider outages from killing your calls, configure fallback providers for your transcriber, voice, and model. Non-fatal errors will trigger a provider swap instead of ending the call.
</Tip>
<Note>
Configured fallback providers can keep some provider errors from ending a call. Voice fallback may not activate for every provider failure.
</Note>

If a voice error ends the call, follow [Troubleshoot voice fallback](/voice-fallback-plan#troubleshoot-voice-fallback). Test a working backup provider as the primary voice.

## Transfer failed

Expand Down
3 changes: 1 addition & 2 deletions fern/customization/custom-tts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,5 @@ Now that you have custom TTS integration working:
- **Multi-language support:** Add language detection and voice switching

<Tip>
Consider implementing a fallback voice provider in your assistant configuration to ensure call continuity if your custom TTS endpoint experiences issues.
Configure and test a backup voice for your custom TTS endpoint. If the call ends before fallback starts, follow [Troubleshoot voice fallback](/voice-fallback-plan#troubleshoot-voice-fallback) and try the backup as the primary voice.
</Tip>
```
97 changes: 97 additions & 0 deletions fern/customization/model-fallback-plan.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
---
title: Model fallback configuration
subtitle: Configure a backup language model that activates automatically if your primary model fails
description: Configure fallbackModels in Vapi so a backup language model takes over automatically when your primary LLM fails. Covers which providers currently support model fallback and how it differs from voice and transcriber fallback.
slug: customization/model-fallback-plan
---

## Overview

Model fallback lets a backup language model take over automatically if your primary model fails, so the call keeps going instead of ending in an error.

<Note>
Model fallback is currently supported for the [OpenAI](/providers/model/openai) and [Anthropic Bedrock](/providers/model/anthropic-bedrock) providers only. It is not yet a cross-provider fallback like [voice fallback](/voice-fallback-plan) or [transcriber fallback](/customization/transcriber-fallback-plan), which can fall back to a different provider entirely. Without `fallbackModels` configured, your call ends with an error if your chosen model provider fails.
</Note>

## How it works

When a model failure occurs, Vapi will:

1. Detect the failure of the primary model.
2. If `fallbackModels` is configured, switch to the first fallback model in the list.
3. For OpenAI, continue through the rest of your specified list if subsequent failures occur. For Anthropic Bedrock, only one fallback model can be configured, so Vapi tries that single model.
4. Terminate the call only if every configured fallback has also failed.

Fallback models stay on the same provider as your primary model. To protect against a provider-wide outage, pair model fallback with [voice fallback](/voice-fallback-plan) and [transcriber fallback](/customization/transcriber-fallback-plan) on the other two pipeline components, which do support cross-provider fallback.

## Configure via API

Add `fallbackModels` directly to your assistant's `model` object. There is no separate `fallbackPlan` wrapper for models — unlike `voice.fallbackPlan.voices` and `transcriber.fallbackPlan.transcribers`, `fallbackModels` is a sibling property of `model.model` itself.

### OpenAI

Set `model.fallbackModels` to an ordered list of OpenAI model IDs. Vapi tries them in order if the primary model fails.

```json
{
"model": {
"provider": "openai",
"model": "gpt-5.5",
"fallbackModels": ["gpt-5.4", "gpt-4.1"]
}
}
```

<Note>
You shouldn't need to set this unless you have a specific reason to — Vapi automatically finds the fastest fallback models that make sense for your primary model.
</Note>

### Anthropic Bedrock

Set `model.fallbackModels` to at most one same-provider Claude model ID available through Bedrock.

```json
{
"model": {
"provider": "anthropic-bedrock",
"model": "claude-sonnet-4-6",
"fallbackModels": "claude-haiku-4-5-20251001"
}
}
```

<Note>
The fallback model is resolved using the call's Bedrock credential region (or `ANTHROPIC_BEDROCK_AWS_REGION`). A fallback name with no inference profile in that region is skipped and a warning is logged — Vapi never silently remaps it to a US or global profile. On Vapi EU, a fallback name without an EU inference profile is rejected at write time. `fallbackModels` cannot be combined with `thinking` in this release.
</Note>

## Other providers

Vapi's other language model providers — including [Anthropic](/providers/model/anthropic) (non-Bedrock), [Google](/providers/model/gemini), [Groq](/providers/model/groq), [xAI](/providers/model/xai), [Mistral](/providers/model/mistral), [MiniMax](/providers/model/minimax), and [Custom LLM](/customization/custom-llm/fine-tuned-openai-models) — do not currently expose a `fallbackModels` field. If your primary model is on one of these providers and it fails, the call ends with an error unless you handle retries at the application layer.

## FAQ

<AccordionGroup>
<Accordion title="Can I fall back from one provider to a different provider, like voice and transcriber fallback do?">
Not yet. `fallbackModels` only lets you specify backup models from the same provider as your primary model. Cross-provider model fallback isn't currently supported — use [voice fallback](/voice-fallback-plan) and [transcriber fallback](/customization/transcriber-fallback-plan) to protect those two pipeline components against a provider-wide outage.
</Accordion>
<Accordion title="Does fallback affect pricing?">
You're billed normally for whichever model actually generates the response, whether that's your primary model or a fallback.
</Accordion>
<Accordion title="Why am I not seeing a fallbackModels option for my provider?">
`fallbackModels` is currently only available on `OpenAIModel` and `AnthropicBedrockModel`. It isn't exposed for other providers yet.
</Accordion>
</AccordionGroup>

## Related

#### [Voice fallback configuration](/voice-fallback-plan)

Configure fallback voices that activate automatically when your primary voice provider fails.

#### [Transcriber fallback configuration](/customization/transcriber-fallback-plan)

Configure fallback transcribers so calls keep working if your primary speech-to-text provider fails.

#### [Model providers](/providers/model/overview)

Compare every language model provider Vapi supports.
3 changes: 3 additions & 0 deletions fern/docs.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

# yaml-language-server: $schema=https://schema.buildwithfern.dev/docs-yml.json

instances:
Expand Down Expand Up @@ -187,6 +188,8 @@ navigation:
path: voice-fallback-plan.mdx
- page: Transcriber fallback configuration
path: customization/transcriber-fallback-plan.mdx
- page: Model fallback configuration
path: customization/model-fallback-plan.mdx
- page: OpenAI realtime speech-to-speech
path: openai-realtime.mdx
- page: Provider keys
Expand Down
46 changes: 34 additions & 12 deletions fern/voice-fallback-plan.mdx
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
---
title: Voice fallback configuration
subtitle: Configure fallback voices that activate automatically if your primary voice fails
subtitle: Choose backup voices and troubleshoot failed fallback attempts
slug: voice-fallback-plan
description: Configure fallback voices in Vapi that activate automatically when your primary voice provider fails, switching through your ordered list to keep calls live.
description: Configure an ordered voice fallback plan, test backup voices, and troubleshoot calls that end before fallback activates.
---

## Overview

Voice fallback configuration gives you the ability to continue your call in the event that your primary voice fails. Your assistant will sequentially fallback to only the voices you configure within your plan, in the exact order you specify.
Voice fallback lets you configure an ordered list of backup voices. When a voice error triggers fallback, the assistant tries the next voice in your plan so the call can continue.

Built-in fallback behavior without a configured plan depends on the selected voice. Configure `fallbackPlan.voices` to choose the backup voices and their order.

<Note>
Without a fallback plan configured, your call will end with an error in the event that your chosen voice provider fails.
A fallback plan does not guarantee recovery from every voice error or provider outage. Some failures can end a call before a backup voice starts.
</Note>

## How it works

When a voice failure occurs, Vapi will:
1. Detect the failure of the primary voice
2. If a custom fallback plan exists:
- Switch to the first fallback voice in your plan
- Continue through your specified list if subsequent failures occur
- Terminate only if all voices in your plan have failed
When a voice error triggers fallback, the assistant:

1. Tries the first voice in `fallbackPlan.voices`.
2. Tries the next voice if a backup also fails and triggers fallback.
3. May end the call if no voice succeeds.

## Configure via Dashboard

Expand Down Expand Up @@ -76,6 +77,27 @@ Add the `fallbackPlan` property to your assistant's voice configuration, and spe
}
```

## Troubleshoot voice fallback

If a call ends instead of switching to a backup voice:

<Steps>
<Step title="Inspect the call logs">
Open [call logs](/observability/logs/call-logs) and check the `endedReason` and voice errors. If detailed pipeline logs are available, look for a fallback attempt. Some provider connection failures can end the call before fallback starts.
</Step>
<Step title="Check the fallback plan">
Confirm that the assistant or call configuration used for the call includes `voice.fallbackPlan.voices`. Check the order of the backup voices and verify each voice ID, model, and required provider credentials.
</Step>
<Step title="Test the backup as the primary voice">
Make a test call with a known working backup voice as the primary voice. If it produces audio, you can use that provider as the primary voice for new calls while you investigate why the original provider did not switch.
</Step>
<Step title="Share a failing call with support">
If the test call still fails or fallback does not start, share the call ID, `endedReason`, and primary and backup providers with [Vapi support](/support).
</Step>
</Steps>

A test call with an invalid primary voice ID can check whether the plan handles that configuration error. It does not verify fallback during a provider outage.

## Provider-specific settings

Each voice provider supports different configuration options. Expand the accordion below to see available settings for each provider.
Expand Down Expand Up @@ -164,9 +186,9 @@ Each voice provider supports different configuration options. Expand the accordi

## Best practices

- Use **different providers** for your fallback voices to protect against provider-wide outages.
- Use **different providers** for your fallback voices to reduce the impact of a provider outage.
- Select voices with **similar characteristics** (tone, accent, gender) to maintain consistency in the user experience.
- Test your fallback configuration to ensure smooth transitions between voices.
- Test the providers in your fallback configuration together to ensure smooth transitions between voices.

## FAQ

Expand Down
Loading