Fish Audio integration: the built-in voice, or your own key
Fish Audio is ZenMode's built-in text-to-speech provider, and you can also point it at your own Fish Audio API key instead.
Verified against the product on September 3, 2026 · Updated · Set up in /dashboard/settings
What this integration is
Fish Audio is the one voice provider that works with nothing to connect. It is ZenMode's built-in
option: ZenMode calls Fish Audio with its own key, so there is no signup, no OAuth and no API key to
paste on your side. If you would rather run it on your own Fish Audio account, you can — paste your
own key in Settings and ZenMode uses that instead. Your key is stored AES-256-GCM encrypted in the
fish_audio_api_key field.
ZenMode's voice layer recognises three provider values: builtin_fish (Fish Audio on ZenMode's
key), user_fish (Fish Audio on yours) and user_elevenlabs
(ElevenLabs, which is bring-your-own-key only). Voice is available on
every plan except Novice, the no-AI entry tier — see pricing.
What it sends
| Provider setting | Whose key | Direction | Endpoint |
|---|---|---|---|
builtin_fish — built in, nothing to connect | ZenMode's | ZenMode → Fish Audio | https://api.fish.audio/v1/tts |
user_fish — bring your own | Yours, stored encrypted as fish_audio_api_key | ZenMode → Fish Audio | https://api.fish.audio/v1/tts |
That text-to-speech endpoint is the Fish Audio call in ZenMode's voice provider, and the direction is outbound only. Fish Audio never writes back into ZenMode: no inbound webhook, no callback, no pull. Which of the two settings you are on changes whose account the request bills to, not what is sent.
How to set it up
- To use the built-in provider, do nothing. Fish Audio on ZenMode's key is already the option that needs no setup.
- To use your own account instead, create an API key at Fish Audio.
- In ZenMode, open Settings and go to the voice provider section.
- Select Fish Audio as your own provider and paste the key. It is encrypted before it is stored.
- Generating audio then calls
https://api.fish.audio/v1/ttswith whichever key applies.
When it runs
On demand, and only then. The text-to-speech call happens at the moment audio is generated. There is no schedule, no polling, no nightly job and no inbound webhook, so nothing runs on this connection in the background and nothing runs at all if you never generate audio.
What it's useful for
It is the shortest path to having a voice at all: on the built-in setting there is no third-party account to open, no key to store and no separate bill, which matters if you want to try voice before committing to a vendor. Bringing your own key is the other end of that — usage, quota and invoice sit on your own Fish Audio account, which is what procurement usually wants. And since the provider is a stored setting, moving between built-in Fish Audio, your own Fish Audio key and an ElevenLabs key is a settings change rather than a rebuild.
What it doesn't do (yet)
- No OAuth and no app to install on the Fish Audio side. On the bring-your-own-key setting, the key is the whole connection: rotate it at Fish Audio and you have to paste the new one into Settings.
- One-way only. Fish Audio cannot push anything into ZenMode, and there is no signed callback on this rail — unlike ZenMode's REST API webhooks.
- The audit behind this page records one Fish Audio endpoint, text-to-speech, and no voice-cloning or model-creation call, so this page does not promise cloning on the Fish Audio path.
- Not available on Novice, the $15 no-AI tier — including the built-in provider.
- No claim is made here about how the audio sounds or how quickly it arrives. This page is written from a code audit, which records which endpoints are called, not output quality or timing.
FAQ
Do I need a Fish Audio account?
Not for the built-in provider — that runs on ZenMode's key and needs nothing from you. You only need your own account and API key if you want the usage on your own Fish Audio bill.
Does it need my LinkedIn password?
No. ZenMode integrations never take LinkedIn credentials, and this one never touches LinkedIn at all — it is a call from ZenMode to Fish Audio and back with an audio file.
Is it two-way?
No. It is outbound only: ZenMode calls Fish Audio, Fish Audio answers. Nothing is synced back, and Fish Audio has no way to trigger anything inside ZenMode.