FlowiseAI/Flowise · error · Error
Unsupported TTS provider: ${provider}
Error message
Unsupported TTS provider: ${provider} What it means
Thrown by the default case of a switch on provider inside getVoices(). It fires when the provider string does not match any known TextToSpeechType enum member (e.g. PLAYHT_TTS, OPENAI_TTS, ELEVEN_LABS_TTS). It indicates an unknown or unsupported TTS provider value reached voice enumeration.
Source
Thrown at packages/components/src/textToSpeech.ts:238
const client = new ElevenLabsClient({
apiKey: credentialData.elevenLabsApiKey
})
const voices = await client.voices.search({
pageSize: 100,
voiceType: 'default',
category: 'premade'
})
return voices.voices.map((voice) => ({
id: voice.voiceId,
name: voice.name,
category: voice.category
}))
}
default:
throw new Error(`Unsupported TTS provider: ${provider}`)
}
}
View on GitHub (pinned to abe4a8601a)
Solutions
- Inspect textToSpeechConfig / the chatflow node data to see the actual provider string being passed.
- Compare the value against the TextToSpeechType enum values in the codebase and correct the config to a supported provider.
- Add the missing provider as a new case if you are extending TTS support.
- If the value is empty/undefined, reconfigure the TTS node in the chatflow editor.
Example fix
// before — only known providers, default throws
switch (provider) {
case TextToSpeechType.OPENAI_TTS: { ... }
case TextToSpeechType.ELEVEN_LABS_TTS: { ... }
default: throw new Error(`Unsupported TTS provider: ${provider}`)
}
// after — validate upstream and surface allowed values
const ALLOWED = Object.values(TextToSpeechType)
if (!ALLOWED.includes(provider)) {
throw new Error(`Unsupported TTS provider: "${provider}". Supported: ${ALLOWED.join(', ')}`)
} Defensive patterns
Strategy: validation
Validate before calling
import { TextToSpeechType } from './textToSpeech'
const ALLOWED_PROVIDERS = new Set(Object.values(TextToSpeechType))
function isValidTtsProvider(p: unknown): p is string {
return typeof p === 'string' && ALLOWED_PROVIDERS.has(p as any)
} Type guard
function isSupportedTtsProvider(provider: unknown): provider is (typeof TextToSpeechType)[keyof typeof TextToSpeechType] {
return typeof provider === 'string' && provider in TextToSpeechType
} Try / catch
if (!isSupportedTtsProvider(provider)) {
throw new Error(`Unsupported TTS provider: "${String(provider)}". Supported: ${[...ALLOWED_PROVIDERS].join(', ')}`)
} Prevention
- Validate the provider against the enum before the switch.
- Re-validate stored chatflow provider values after Flowise upgrades (provider may have been removed).
- Expose the list of supported providers to the UI so users can't type free-text values.
When it happens
Trigger: The chatflow TTS config holds a provider string that isn't in the TextToSpeechType enum (typo, stale value from an older Flowise version, or a provider whose support was removed); an empty/undefined provider passed because the config was only partially saved; a custom provider string injected via API without enum validation.
Common situations: Migrating a chatflow from an older Flowise version that supported a provider since removed; manually editing the chatflow JSON with a misspelled provider; third-party plugin registering a provider name that this build doesn't recognise.
Related errors
- Model is required
- Invalid Flow State
- Tool not selected
- Firecrawl: Query is required for search mode
- Firecrawl: URL is required for scrape mode
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/00cbd927ad741f4a.
Report an issue: GitHub.