vapi-tts-failureVapicritical

TTS Generation Failure

Voice synthesis failed during an active call — the caller experienced silence where assistant speech was expected.

What this error means

This error indicates that Vapi's text-to-speech pipeline failed to generate audio for a specific assistant utterance during a live call. TTS generation failures are critical because they manifest as unexpected silence from the assistant's side — the caller hears nothing and may hang up, repeat themselves, or conclude the system is broken. The failure can occur at multiple points in the TTS pipeline: the configured TTS provider (ElevenLabs, Deepgram, Azure Speech, OpenAI TTS, etc.) may have returned an error, the audio synthesis may have timed out before completing, or an internal Vapi orchestration error may have prevented the audio from being delivered to the media stream. These failures can occur mid-conversation, during greetings, or at any point where the assistant speaks.

Root causes

critical

Upstream TTS provider (ElevenLabs, Azure, OpenAI TTS) returned an error or timed out

Common

critical

TTS provider API key is invalid, expired, or has exceeded its quota

Common

high

Configured voice_id or voice name does not exist or has been deprecated in the TTS provider

Occasional

high

Text content to be synthesized is empty, null, or contains only invalid characters

Occasional

high

TTS synthesis request timed out due to an excessively long text passage being synthesized in a single request

Occasional

medium

Transient network disruption between Vapi's TTS orchestration layer and the TTS provider's API

Rare

How to fix it

  1. 1

    Verify TTS provider credentials in the Vapi dashboard

    Open the Vapi dashboard at https://dashboard.vapi.ai and navigate to Providers or your Assistant configuration. Verify that the TTS provider API key is current, valid, and has not expired. For ElevenLabs, check that the key has an active subscription with available character quota. For Azure Speech, confirm the region, subscription key, and endpoint are all correct.

  2. 2

    Test the TTS provider directly outside of Vapi

    Isolate whether the failure is in Vapi or in the TTS provider by making a direct API call to the TTS provider using your credentials. If the direct call also fails, the issue is with the provider or credentials. If the direct call succeeds, the issue is specific to Vapi's integration.

    // Test ElevenLabs TTS directly — outside of Vapi
    const testElevenLabsTTS = async () => {
      const voiceId = 'your-voice-id-here';
      const response = await fetch(
        `https://api.elevenlabs.io/v1/text-to-speech/${voiceId}`,
        {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'xi-api-key': process.env.ELEVENLABS_API_KEY
          },
          body: JSON.stringify({
            text: 'Hello, this is a connectivity test.',
            model_id: 'eleven_multilingual_v2',
            voice_settings: { stability: 0.5, similarity_boost: 0.75 }
          })
        }
      );
      
      if (!response.ok) {
        const err = await response.json();
        console.error('ElevenLabs TTS direct test failed:', response.status, err);
      } else {
        console.log('ElevenLabs TTS direct test: OK');
      }
    };
    testElevenLabsTTS();
  3. 3

    Verify the voice ID exists in your TTS provider account

    If using ElevenLabs or a provider with custom voices, confirm the voice_id configured in Vapi still exists in your TTS provider account. Voices can be deleted from the provider dashboard, instantly breaking any assistants that reference them. List available voices via the provider's API and validate the configured ID.

  4. 4

    Configure a fallback TTS provider in Vapi

    Vapi supports configuring a fallback TTS provider on your assistant. Add a secondary provider (e.g., if your primary is ElevenLabs, configure Deepgram or Azure TTS as fallback). This ensures calls continue with a different voice rather than going silent when the primary provider fails.

    // Vapi API — create assistant with TTS fallback configuration
    const assistant = await vapiClient.assistants.create({
      name: 'Sales Assistant',
      voice: {
        provider: 'elevenlabs',
        voiceId: 'your-elevenlabs-voice-id',
        model: 'eleven_multilingual_v2',
        fallbackPlan: {
          voices: [
            {
              provider: 'azure',
              voiceId: 'en-US-JennyNeural'
            },
            {
              provider: 'openai',
              voiceId: 'alloy'
            }
          ]
        }
      },
      // ... other assistant config
    });
  5. 5

    Monitor TTS provider quota and set up alerts

    ElevenLabs and other TTS providers have character quotas per billing period. When the quota is exhausted, all synthesis requests fail. Monitor your remaining quota via the provider's dashboard or API, and set up automated alerts when you reach 80% of quota so you can upgrade your plan before hitting the limit.

  6. 6

    Review Vapi call logs for the specific error details

    In the Vapi dashboard, navigate to Calls and find the affected call by its call ID. Expand the call timeline to see the exact point where TTS failed, the error message returned by the TTS provider, and any retry attempts. The call log provides the raw error from the upstream provider which is essential for diagnosis.

  7. 7

    Configure Vapi end-of-call-report webhooks to track TTS failures

    Set up a webhook for Vapi's end-of-call-report event, which includes structured data about call quality, errors, and provider failures. Parse TTS-related errors from the report and store them for trend analysis. Alert when TTS failure rate exceeds a threshold across your call volume.

    // Handle Vapi end-of-call-report webhook
    app.post('/vapi/webhook', (req, res) => {
      const { message } = req.body;
      
      if (message.type === 'end-of-call-report') {
        const { call, analysis } = message;
        
        // Check for TTS-related errors in call artifacts
        const ttsErrors = call.artifact?.messages?.filter(
          m => m.role === 'error' && m.content?.includes('tts')
        ) || [];
        
        if (ttsErrors.length > 0) {
          logger.error('vapi_tts_failure', {
            callId: call.id,
            assistantId: call.assistantId,
            ttsProvider: call.assistant?.voice?.provider,
            errorCount: ttsErrors.length,
            duration: call.endedAt - call.startedAt
          });
        }
      }
      
      res.sendStatus(200);
    });
  8. 8

    Test your assistant's voice configuration before go-live

    Before deploying an assistant to production, make a test call and verify that TTS generates correctly for the greeting and all common response patterns. Use Vapi's test call feature in the dashboard to validate the voice configuration without impacting real users.

Prevention

Prevent TTS failures by maintaining a multi-provider TTS fallback chain so that no single provider failure results in silent calls. Monitor TTS provider quota usage continuously and set automated billing alerts to upgrade plans before quota exhaustion. Validate TTS provider credentials as part of your deployment pipeline — fail the deployment if the credential check fails rather than discovering the problem on the first live call. Run synthetic monitoring calls at regular intervals (e.g., every 5 minutes) to verify end-to-end TTS functionality and alert on failures before real users are affected. Keep voice IDs in version control or a configuration store and validate their existence against the provider API during deployment.

Debugging this right now?

Sherlock diagnoses vapi-tts-failure automatically. Just ask in Slack and get an instant root-cause analysis.

Add to Slack — Free