First-party app
ElevenLabs

ElevenLabs

Generate speech, sound effects and transcripts with ElevenLabs: text-to-speech with character timestamps, speech-to-text, the voice library, models, generation history and plan usage.

stable AI & Machine Learning

About

ElevenLabs ships in the w6w first-party pack. It declares 22 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.elevenlabs
Version
0.1.3
Author
w6w
Licence
MIT
Categories
AI & Machine Learning

Overview

ElevenLabs turns text into speech and audio into text, and this app covers the generative-audio surface a workflow reaches for: text-to-speech with optional per-character timestamps for captioning or lip-sync, speech-to-text from a hosted audio or video URL, and one-shot sound-effect generation.

Beyond generation, it manages the voice catalogue and public library — listing, reading and editing voice settings, and adding a shared voice to your own account — plus generation history, including re-downloading past audio without spending new credits, and ElevenLabs Studio project listings.

It also surfaces account and plan visibility: current subscription tier, character usage against your limit, and remaining voice slots, so a workflow can check headroom before an expensive batch of generations. Health checks track ElevenLabs’ own status page and that same plan headroom, and audio responses come back as portable base64 so a workflow step can pass generated speech straight to whatever comes next.

Build with ElevenLabs

Three routes to the same 22 actions. The Workflow tab is generated from ElevenLabs's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Get History Audio

history-audio-get

Re-download the audio of a past generation as base64. Costs no characters — it is not regenerated.

Delete History Item

history-delete

Delete one past generation, removing its stored text and audio.

Get History Item

history-get

Fetch one past generation's metadata, including its request_id and cost.

List Generation History

history-list

List past generations, filtered by voice, model, source, text or date.

List Models

model-list

List the models available to this account, with their capabilities, limits and cost factors.

Generate Sound Effect

sound-generation

Generate a sound effect from a text prompt. Returns base64-encoded audio.

Speech to Text

speech-to-text

Transcribe an audio or video file addressed by URL, with optional diarization.

Get Studio Project

studio-project-get

Fetch one Studio project in full, including its chapters and default settings.

List Studio Projects

studio-project-list

List every Studio (long-form) project in this workspace.

Get Subscription

subscription-get

Read the plan tier, character allowance, voice slots and overage state.

Text to Speech

text-to-speech

Synthesise speech from text with a chosen voice. Returns base64-encoded audio.

Text to Speech with Timestamps

text-to-speech-with-timestamps

Synthesise speech and get per-character start/end times alongside the base64 audio.

Get Usage Stats

usage-character-stats-get

Read usage over a time window as a series, optionally broken down by voice, model, API key or user.

Get User

user-get

Fetch the connected account's profile. The account's own API key is removed from the response; the vendor's masked preview of it is kept.

Add Voice from Library

voice-add-from-library

Copy a public Voice Library voice into this account under a name you choose.

Delete Voice

voice-delete

Delete a voice from this account, freeing one voice slot.

Get Voice

voice-get

Fetch one voice's full definition, including its labels and stored settings.

Search Voice Library

voice-library-search

Search the public Voice Library for voices you can add to this account.

List Voices

voice-list

List the voices available to this account, with search, filters and paging.

Get Default Voice Settings

voice-settings-default-get

Read the platform-wide default voice settings.

Edit Voice Settings

voice-settings-edit

Replace a voice's stored settings. Send every field you want to keep — omitted fields are not preserved.

Get Voice Settings

voice-settings-get

Read the settings stored against one voice.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying ElevenLabs's real ids.

{
  "manifestVersion": "2",
  "name": "elevenlabs-example",
  "steps": [
    {
      "id": "history-audio-get",
      "uses": {
        "app": "io.w6w.elevenlabs",
        "action": "history-audio-get",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "historyItemId": "<historyItemId>"
      }
    }
  ]
}

Here are some of the things you can do

  • Get History Audio

    read
    history-audio-get
  • Get History Item

    read
    history-get
  • List Generation History

    read
    history-list
  • List Models

    read
    model-list
  • Generate Sound Effect

    perform
    sound-generation

+17 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for ElevenLabs, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to ElevenLabs. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "text-to-speech",
  payload: {
    voiceId: "<value>",
    text: "<value>",
    // modelId: "<value>",
    // outputFormat: "<value>",
    // languageCode: "<value>",
    // voiceSettings: "<value>",
    // seed: "<value>",
    // applyTextNormalization: "<value>",
    // previousText: "<value>",
    // nextText: "<value>",
    // previousRequestIds: "<value>",
    // nextRequestIds: "<value>",
    // enableLogging: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action text-to-speech --payload '{"voiceId":"<value>","text":"<value>"}'

Give an AI agent ElevenLabs — without giving it ElevenLabs's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.elevenlabs#history-audio-get",
    "input": {
      "historyItemId": "<historyItemId>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's ElevenLabs connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

ElevenLabs's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. ElevenLabs itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

ElevenLabs declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

ElevenLabs platform status

Component status from status.elevenlabs.io. Covers Text to Speech, Speech to Text, Conversations, Telephony, RAG, Quality, UI, Integrations, ElevenCreative and the catch-all API endpoint components.

quota

Plan headroom

Character/credit allowance for the current billing period, plus voice slots and voice add/edit allowance, read from GET /v1/user/subscription.

quota

API request-rate and concurrency headroom