ElevenLabs
The ElevenLabs action puts your ElevenLabs account in a flow: text to speech, transcription, sound effects, music, voice changing and cleanup, your voices and credits, and outbound calls with your voice agents. It can also be handed to an AI Node as an AI toolkit. For a live conversational agent — a phone line or a widget on your site — use the Voice Agent node instead.
Connect your account
ElevenLabs connects with an API key. Create one at elevenlabs.io/app/developers/api-keys and add it from the node's credential picker, or from Settings → Credentials as an ElevenLabs credential. A key you already use for a Voice Agent works here too.
If you restrict permissions, give the key the ones for what the node does: text to speech, speech to text, sound effects, voice changer, audio isolation, music, voices, models, history and user — and ElevenLabs Agents for calls and conversations. When one is missing the node says which, and the credential is not marked as broken: the key is fine, it just can't do that one thing.
The action node
Fifteen operations, in four groups. ElevenLabs' API has hundreds of routes; these are the ones worth automating. Voice cloning, dubbing and Studio are left out on purpose — they need samples, verification or several asynchronous steps.
| Group | Operation | What it does | Spends |
|---|---|---|---|
| Audio | Text to speech | Your text, read by one of your voices, as an audio file. | credits |
| Audio | Speech to text | A transcript of an audio or video, with the language and, optionally, who says what. | credits |
| Audio | Sound effect | A sound effect from a description, 0.5 to 30 seconds. | credits |
| More audio | Voice changer | The same recording, said by another voice. | credits |
| More audio | Isolate voice | A recording with the background noise and music removed. | credits |
| More audio | Text to dialogue | Several voices talking in turns, in one file. | credits |
| More audio | Compose music | A song or a background track from a description, 3 seconds to 10 minutes. | credits |
| Voices & account | List voices | Your voices and the premade ones, with their ids and labels. | — |
| Voices & account | Get voice | One voice: labels, description, preview and settings. | — |
| Voices & account | List models | The models of the account and what each can do. | — |
| Voices & account | Get credits | The plan, credits used and left, and when they reset. | — |
| Voices & account | List history | Past generations: text, voice, model and date. | — |
| Voice agents | Make an outbound call | One of your agents phones a number. | call minutes |
| Voice agents | List conversations | Your agents' conversations, newest first. | — |
| Voice agents | Get conversation | One conversation: the transcript turn by turn and its analysis. | — |
The voice, the model, the agent and the phone number are picked from your account, not typed. When a flow needs to choose one per event, Type it instead takes a {{payload.voiceId}}. Switching the node to another ElevenLabs account clears them — a cloned voice or an agent only exists in the account that made it.
Audio that comes out
Everything that makes audio saves it as a HostWebhook file and hands it downstream as _file. The next node attaches it with {{payload._file}} — an email, a Slack message, a bucket — or links to it with its downloadUrl:
{
"_file": {
"id": "…",
"originalName": "welcome-42.mp3",
"mimeType": "audio/mpeg",
"size": 48213,
"downloadUrl": "https://…"
},
"format": "mp3_44100_128",
"voiceId": "…",
"modelId": null,
"characters": 118,
"requestId": "…"
}File name sets the name without extension; left empty, one is made from the operation and the time. The format is mp3 at 128 kbps unless you pick another — opus, wav or pcm where ElevenLabs offers them.
Audio that goes in
Speech to text, voice changer and isolate voice take an Audio field: a HostWebhook file from earlier in the flow ({{payload._file}}) or a URL. A HostWebhook file is looked up in your own files, never fetched from whatever link the payload carries.
Text to dialogue
The lines are built one row at a time, each with its voice picked from the account. Up to ten different voices; ElevenLabs recommends keeping the whole dialogue under about 2,000 characters. When the lines come from the payload, switch to Use JSON or a payload value instead:
[
{ "text": "Hi, how can I help?", "voiceId": "…" },
{ "text": "{{payload.question}}", "voiceId": "…" }
]Make an outbound call
Pick an agent and the number it calls from — one imported into ElevenLabs, from Twilio or a SIP trunk, and allowed to call out. To number is who gets called, in international format: +5215512345678. Dynamic variables fill the {{variables}} of the agent's prompt and first message.
The call speaks with the agent's own voice and prompt. To change how it sounds, edit the agent — in Voice Agents, or in ElevenLabs. The voice picked for Text to speech doesn't apply to calls.
The node returns as soon as the call is placed, with its conversationId. The transcript isn't there yet — read it later with Get conversation.
AI toolkit mode
Once the account is connected, the node asks for a Mode. AI toolkit turns it into fifteen tools that an AI Node — or an MCP client, through one of your MCP servers — calls by name.
| Tool | Arguments |
|---|---|
| generate_speech | text · voice_id? · model_id? · language_code? · stability? · similarity_boost? · style? · speed? · output_format? · file_name? |
| transcribe_audio | audio_url · language_code? · diarize? · num_speakers? · tag_audio_events? · timestamps? · keyterms? · model_id? |
| generate_sound_effect | description · duration_seconds? · prompt_influence? · loop? · output_format? · file_name? |
| change_voice | audio_url · voice_id? · remove_background_noise? · model_id? · output_format? · file_name? |
| isolate_voice | audio_url · file_name? |
| generate_dialogue | lines · model_id? · language_code? · output_format? · file_name? |
| compose_music | description · length_seconds? · instrumental? · model_id? · output_format? · file_name? |
| list_voices | search? · category? · page_size? · page_token? |
| get_voice | voice_id? |
| list_voice_models | — |
| get_elevenlabs_credits | — |
| list_speech_history | voice_id? · search? · source? · page_size? · start_after_id? |
| make_outbound_call | to_number · dynamic_variables? |
| list_voice_conversations | agent_id? · result? · page_size? · cursor? |
| get_voice_conversation | conversation_id |
audio_url is a link: a HostWebhook file's downloadUrl — the one another tool just returned — or a public audio or video.
What you control
- Characters read aloud per call. The most text
generate_speechandgenerate_dialogueread in one call: 2,500 by default, anything from 100 to 10,000. Longer text is refused with the number before anything is spent, and the model can't raise it. - Default voice. Used when the model doesn't name one; it can still pick another voice of the account with
list_voices. Without a default, a voice of the account is picked for the call — one that speaks the requested language when there is one — and the result says which. Set a default to always hear the same voice. The gear under it — Voice settings, the same as in the Voice Agent — sets the model (Eleven v3, v4, Multilingual v2, Flash, Turbo…), stability, speed, similarity and style thatgenerate_speechuses when the model doesn't pass its own; whatever it does pass wins. Eleven v4 doesn't use speed or style, so they're hidden with it. - Outbound calls.
make_outbound_callstarts blocked — it phones real people. The agent and the number are yours: set them on the node and the model only says who to call. Without both, the tool refuses. The call speaks with the agent's own voice, not the default voice above. - Characters per call sent to the model. 20,000 by default. Lists and transcripts that don't fit are cut, with a
notesfield saying how much was left out.
What goes back to the model
The same response as the operation, except the audio itself: the model gets the file's name, type, size and downloadUrl, which it can pass on — to a Slack or email tool, or to transcribe_audio. Arguments are used as written: a {{payload.x}} the model writes is not resolved against the flow.
Testing a tool
operation in their payload that names another tool is refused.{ "operation": "get_elevenlabs_credits" }Good to know
Run Test spends credits
The Run test button calls ElevenLabs for real. The lists and lookups are free; everything that makes or transforms audio spends credits, and a call spends minutes. Get credits tells you how many are left before a big job.
Busy or rate limited
When ElevenLabs answers that it is busy or that you are over your concurrency limit, the node waits and retries. Long jobs — music, dialogue, a long transcription — get several minutes before giving up.