Cognigy is an enterprise platform for conversational AI agents, and its Voice Gateway connects those agents to the phone network. Speech output comes from one of the preinstalled vendors, such as Microsoft Azure, Google or ElevenLabs. When a team needs a specific German voice, a brand voice, or a different processing location for speech output, the question becomes how a text-to-speech vendor outside that list gets into Voice Gateway. This guide walks through the two documented routes using KugelAudio as the example, explains why Cognigy's built-in ElevenLabs provider is not one of them, and lists what to test before German callers hear the new voice.
Key takeaways
- Cognigy Voice Gateway supports custom speech vendors next to its preinstalled ones. You register them under Speech in the Self-Service Portal and select them by name in the flow.
- The built-in ElevenLabs provider exposes a model, a region and an API key, with no custom base URL field. An ElevenLabs-compatible API from another vendor cannot be connected through it.
- KugelAudio can be registered in two interchangeable ways: as a custom speech vendor at
https://api.kugelaudio.com/v1/cognigy, or through the built-in Microsoft Azure vendor in container mode athttps://api.kugelaudio.com/v1/azure. - Registration alone changes nothing. The flow only uses the new voice once the vendor name is set in its nodes.
- Before going live, check TTS streaming, the 8 kHz telephony format, how numbers and amounts are read, and your concurrent generation limit.
How does Cognigy Voice Gateway choose a TTS voice?
Speech output is configured in two places. In the Voice Gateway Self-Service Portal you register speech services with their credentials. In the flow, nodes such as Set Session Config, Say, Question and Optional Question decide the vendor, language and voice for each output. Cognigy lists AWS, Deepgram, ElevenLabs, Google, Microsoft Azure, Nuance and Speechmatics among its TTS vendors, plus custom vendors.
For a vendor that is not in the dropdown, the nodes provide a Custom field. According to Cognigy, custom providers are selected there by the name you gave them on the Speech Service page. The Custom (Voice) field takes a voice that is not in the list, in whatever format the vendor defines.
TTS streaming decides how long callers wait. With streaming, playback starts while the sentence is still being generated; without it, only after synthesis finishes. Cognigy states that AWS, Google, Nuance, Speechmatics and Deepgram Flux do not support TTS streaming. For a custom vendor you enable it in the registration.
Why can't you point Cognigy's ElevenLabs provider at another TTS?
Because it has no field for it. Cognigy's built-in ElevenLabs vendor asks for a model from a fixed list, a region (Global or Europe) and an API key. There is no custom base URL, so requests always go to ElevenLabs.
This matters because several TTS vendors, KugelAudio among them, offer an ElevenLabs-compatible API. In tools with a configurable base URL, changing that URL is enough, as our guide to migrating off the ElevenLabs API with a compatible endpoint explains. In Cognigy Voice Gateway that route is closed, and you register the vendor as a custom vendor or as an Azure container instead.
If you want to stay with ElevenLabs and mainly need a European processing location, the provider offers a Europe region. Cognigy notes that data residency is an ElevenLabs Enterprise feature.
Custom speech vendor or Azure Speech container: which route fits?
Both routes end in the same place, a KugelAudio voice in your flow. They differ in which Cognigy feature you use and how you specify the voice. The custom speech vendor is the default. The Azure container route is the alternative when your Cognigy plan has no custom vendor option or your deployment is standardized on the Microsoft Azure Speech Services vendor.
How do you register KugelAudio as a custom speech vendor?
You need a KugelAudio API key and the ID of a German voice, both from the KugelAudio dashboard. Then open Speech in the Voice Gateway Self-Service Portal, add a speech service, and choose the custom vendor.
- Name the vendor, for example
kugelaudio. You will use this name to select it in flows. - Set the TTS HTTP URL to
https://api.kugelaudio.com/v1/cognigy, with no path after it. Cognigy appends/synthesize/<vendor-name>itself. - Paste the KugelAudio API key as the Authentication Token. Cognigy sends it as a bearer token on every request.
- Enter the voice ID and turn on Use for text-to-speech. Leave Use for speech-to-text off, because this endpoint provides TTS only.
- Turn on Enable text-to-speech streaming so playback starts before the whole utterance is generated.
- Choose which Cognigy accounts may use the vendor, then save.
The step that people miss happens in the flow. Put the vendor name into the Custom field of the relevant nodes: Set Session Config, Say, Question, Optional Question or Session Speech Parameters Config. Skip it and the flow keeps using its previous vendor, so nothing appears to change.
If synthesis fails, check the key on its own before changing anything in Cognigy:
curl "https://api.kugelaudio.com/v1/voices?limit=1" \
-H "X-API-Key: YOUR_KUGELAUDIO_API_KEY"
A 200 confirms the key. A 401 Invalid API key usually means the long key was truncated when it was copied.
How do you control voice style and normalization from a flow?
Through the Custom (Voice) field. Cognigy does not forward arbitrary option objects to custom TTS vendors, so KugelAudio reads its settings from that single field. A plain voice ID works. You can add a style and the text normalization switch, separated by semicolons:
voice=1887;style=expressive;normalize=false
style accepts consistent, natural and expressive, with natural as the default. normalize defaults to true. Unknown, duplicated or malformed options return a 400 VALIDATION_ERROR instead of silently falling back to defaults, so a typo shows up in testing rather than on a live call.
Normalization matters for German calls. It turns numbers, dates, times and currency amounts into spoken words before synthesis. KugelAudio takes the language from Cognigy's request, which carries a BCP-47 tag such as de-DE. Only the language part is used, so de-DE and de-AT both select German. Turn normalization off only when your flow already writes numbers out in words. For reference numbers and IBANs, our guide to voice AI for finance and insurance covers how to confirm critical values with callers.
What changes on the Azure Speech container route?
Microsoft offers Speech services as containers that run in your own environment, including neural text to speech. Cognigy's Azure vendor can therefore call a container URL instead of the hosted Azure service. KugelAudio answers the same contract, and nothing runs at Microsoft: the URL points straight at KugelAudio.
Under Speech, choose the Microsoft Azure Speech Services vendor, leave Use hosted Azure service off, and turn on Use Azure Docker container (on-prem). Enter https://api.kugelaudio.com/v1/azure in both Container URL for TTS and Container URL for STT. Cognigy requires both fields even when speech-to-text is off, and KugelAudio's STT side at that URL is a stub that always returns NoMatch, so leave Use for speech-to-text off. Paste the KugelAudio key as the Subscription key and turn on text-to-speech and TTS streaming.
The voice needs care. Cognigy's Azure voice list only knows Microsoft voices, so you enter the KugelAudio voice yourself: directly as 1887, with the same option grammar as the custom vendor, or in Microsoft's naming shape as de-DE-1887Neural. If a genuine Microsoft voice such as de-DE-KatjaNeural stays selected, every call is answered by a default KugelAudio voice because there is no equivalent. That keeps a live call from failing, but it will not sound like the voice you chose.
One security detail belongs in your acceptance checklist. With streaming on, the Microsoft Speech SDK cannot set headers on the WebSocket upgrade and sends the key in the query string. KugelAudio redacts it from its own logs, but a proxy or load balancer in front of it may log the full URL. Check its access-log configuration before going live.
What should you test before the first live call?
Test over the phone line with your real prompts, not in a browser with demo sentences. With streaming, Voice Gateway requests 8 kHz audio, and KugelAudio returns a WAV header followed by 16-bit linear PCM at that rate. Without streaming it returns a complete WAV file. Listen to the voice at 8 kHz: a voice that impresses in wideband can sound different on a call.
Then check four things deliberately. First, how customer numbers, amounts, dates and addresses sound in the phrasing your flow actually produces. Second, the audible pause after the caller's last word with streaming on, measured across many calls rather than as one demo value. Third, the error paths: a 400 mentioning type means SSML is being sent instead of plain text, and 404 Voice not found means a wrong voice ID or one your organization cannot access. Fourth, load. Each KugelAudio organization has a rate limit and a cap on concurrent generations. When the cap is exceeded, synthesis is rejected with 429 RATE_LIMITED and the caller hears nothing. Check your limit in the dashboard and have it raised to match your concurrent calls before launch.
Where is the data processed?
That depends on both platforms, and you should assess each side separately. On the KugelAudio side, the host decides: to keep traffic and data inside the EU, the documentation points you to https://api.eu.kugelaudio.com/v1/cognigy or https://api.eu.kugelaudio.com/v1/azure. We do not promise zero retention in the cloud.
On the Cognigy side, the documentation states that on-premises installations are no longer offered to new customers, while existing ones keep running. New projects therefore usually run on Cognigy SaaS. If speech synthesis itself has to run in your infrastructure, KugelAudio offers a self-hosted Kubernetes and Helm deployment as an Enterprise option. Synthesis then runs on your hardware, but the deployment still calls the hosted KugelAudio API for licensing, API-key authentication, usage reporting and voice lookups. Agree with KugelAudio how such a deployment is connected to Voice Gateway. Our guide to on-premise voice AI infrastructure describes the options and their prerequisites.
What are the limitations of this guide?
The author works for KugelAudio, and the statements about KugelAudio are first-party product documentation, not independent test results. The description of Cognigy's interface follows Cognigy's public documentation as checked on 29 September 2026; field names and available options can differ by version and contract. The guide does not assess voice quality and does not replace a review of the data processing by your privacy and security owners.
FAQ
Can I use my own TTS voice in Cognigy?
Yes. Voice Gateway supports custom TTS vendors. Register the vendor under Speech in the Self-Service Portal and put its name into the Custom field of your flow nodes.
Why can't I point the Cognigy ElevenLabs provider at KugelAudio?
Cognigy's built-in ElevenLabs provider has no custom base URL field, only a model, a region and an API key, so it always calls ElevenLabs. Connect KugelAudio as a custom vendor or through the Azure container route instead.
Should I use the custom vendor or the Azure container route?
Use the custom vendor if your Cognigy plan offers it. It is the standard route and supports every voice option. Use the Azure container route when no custom vendor option is available or your deployment is standardized on the Azure vendor.
Why does nothing change after I save the vendor?
The flow still uses its previous vendor. Set the new vendor name in the Custom field of the nodes, for example Set Session Config, Say or Question.
Which audio format does Cognigy Voice Gateway expect?
With TTS streaming, Voice Gateway requests 16-bit linear PCM at 8 kHz, delivered as a WAV stream with a header. Without streaming, KugelAudio returns a complete WAV file, at 24 kHz by default.
Does KugelAudio handle speech recognition in Cognigy?
No. Both KugelAudio routes into Cognigy provide speech output only. The STT address on the Azure container route is a stub that always answers NoMatch. Keep using one of Cognigy's speech-to-text vendors.
Why do callers hear silence when many calls run at once?
Most likely your organization's concurrent generation cap was reached, and KugelAudio rejects the request with 429 RATE_LIMITED. Check the limit in the dashboard and have it raised before going live.
Does speech output stay in the EU?
The KugelAudio documentation points to the regional host api.eu.kugelaudio.com to keep traffic and data inside the EU. Where Cognigy itself processes audio, transcripts and logs depends on your Cognigy environment and needs its own review.
Sources
- Cognigy documentation, Speech Services (Voice Gateway): https://docs.cognigy.com/voice-gateway/webapp/speech-services
- Cognigy documentation, TTS and STT Vendors: https://docs.cognigy.com/voice-gateway/references/tts-and-stt-vendors
- Cognigy documentation, TTS Streaming: https://docs.cognigy.com/voice-gateway/streaming
- Cognigy documentation, Voice Gateway Parameter Details: https://docs.cognigy.com/ai/build/node-reference/voice/voice-gateway/parameter-details/
- Cognigy documentation, Installation: https://docs.cognigy.com/ai/administer/installation/about
- Cognigy, custom-speech-example on GitHub: https://github.com/Cognigy/custom-speech-example
- Microsoft Learn, Speech containers overview: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-container-overview
- KugelAudio documentation, Cognigy Integration: https://docs.kugelaudio.com/integrations/cognigy
- KugelAudio documentation, Text normalization: https://docs.kugelaudio.com/features/text-processing
- KugelAudio documentation, Regions: https://docs.kugelaudio.com/guides/regions
- KugelAudio documentation, On-Premise Deployment: https://docs.kugelaudio.com/guides/self-hosted
Build with KugelAudio
Put European voice infrastructure into production.
Use the EU endpoint or discuss a customer-operated Kubernetes deployment.