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.

ℹThere is no “Sign in with ElevenLabs”. ElevenLabs doesn't offer OAuth for other apps to reach your account — an API key is the only way in. What it does offer is restricting the key: by permission, by a monthly credit quota and by IP. Setting a credit quota on the key is the simplest way to put a ceiling on what a flow can spend.

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.

GroupOperationWhat it doesSpends
AudioText to speechYour text, read by one of your voices, as an audio file.credits
AudioSpeech to textA transcript of an audio or video, with the language and, optionally, who says what.credits
AudioSound effectA sound effect from a description, 0.5 to 30 seconds.credits
More audioVoice changerThe same recording, said by another voice.credits
More audioIsolate voiceA recording with the background noise and music removed.credits
More audioText to dialogueSeveral voices talking in turns, in one file.credits
More audioCompose musicA song or a background track from a description, 3 seconds to 10 minutes.credits
Voices & accountList voicesYour voices and the premade ones, with their ids and labels.—
Voices & accountGet voiceOne voice: labels, description, preview and settings.—
Voices & accountList modelsThe models of the account and what each can do.—
Voices & accountGet creditsThe plan, credits used and left, and when they reset.—
Voices & accountList historyPast generations: text, voice, model and date.—
Voice agentsMake an outbound callOne of your agents phones a number.call minutes
Voice agentsList conversationsYour agents' conversations, newest first.—
Voice agentsGet conversationOne 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:

jsonText to speech output
{
  "_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.

ℹTranscription hands ElevenLabs the link and downloads nothing, so it takes long recordings and video — YouTube and TikTok links included. The voice changer and isolation need the bytes: they download the audio first, up to 50 MB.

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:

jsonLines as JSON
[
  { "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.

⚠Every run phones a real person, Run Test included, and uses call minutes. Test with your own number.

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.

ToolArguments
generate_speechtext · voice_id? · model_id? · language_code? · stability? · similarity_boost? · style? · speed? · output_format? · file_name?
transcribe_audioaudio_url · language_code? · diarize? · num_speakers? · tag_audio_events? · timestamps? · keyterms? · model_id?
generate_sound_effectdescription · duration_seconds? · prompt_influence? · loop? · output_format? · file_name?
change_voiceaudio_url · voice_id? · remove_background_noise? · model_id? · output_format? · file_name?
isolate_voiceaudio_url · file_name?
generate_dialoguelines · model_id? · language_code? · output_format? · file_name?
compose_musicdescription · length_seconds? · instrumental? · model_id? · output_format? · file_name?
list_voicessearch? · category? · page_size? · page_token?
get_voicevoice_id?
list_voice_models—
get_elevenlabs_credits—
list_speech_historyvoice_id? · search? · source? · page_size? · start_after_id?
make_outbound_callto_number · dynamic_variables?
list_voice_conversationsagent_id? · result? · page_size? · cursor?
get_voice_conversationconversation_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_speech and generate_dialogue read 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 that generate_speech uses 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_call starts 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 notes field 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

⚠Only a tool call picks the tool. In AI toolkit mode, only an AI Node, an MCP client or a voice agent chooses which tool the node runs. Run Test, a flow or a webhook run the operation saved on the node: an operation in their payload that names another tool is refused.
✦To try a tool, call it from an AI Node or from an MCP client. Its arguments look like this:
jsonA tool call
{ "operation": "get_elevenlabs_credits" }
⚠A node in toolkit mode is not part of the pipeline. Events arriving through connections made before you switched are refused — the node only runs the tool it is asked for.

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.