> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runflow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# ElevenLabs TTS v3

> Generate text-to-speech audio using Eleven-v3 from ElevenLabs.

<Info>
  Pricing: **\$100/1m-tokens**. Endpoint: `POST /v1/models/elevenlabs/tts/eleven-v3/runs`.
</Info>

Generate text-to-speech audio using Eleven-v3 from ElevenLabs.

## Overview

* **Endpoint**: [https://api.runflow.io/v1/models/elevenlabs/tts/eleven-v3/runs](https://api.runflow.io/v1/models/elevenlabs/tts/eleven-v3/runs)
* **Model ID**: elevenlabs/tts/eleven-v3
* **Provider**: ElevenLabs
* **License**: commercial
* **Last Updated**: 2026-04-06

## Pricing

* **Base price**: \$100/1m-tokens
* **Note**: Usage-based, per 1000 characters

# ElevenLabs TTS v3 API

**Endpoint:** `POST /v1/models/elevenlabs/tts/eleven-v3/runs`

## Run the model

### Python

```python theme={"dark"}
import requests

response = requests.post(
    "https://api.runflow.io/v1/models/elevenlabs/tts/eleven-v3/runs",
    headers={"Authorization": "Bearer RUNFLOW_API_KEY"},
    json={
        "input": {
            "text": "Welcome to the Runflow Lab! This week we shipped five new models and honestly, the hardest part was naming them. Turns out, all the good AI names are taken."
        },
        "callback_url": "https://your-server.com/webhook"
    },
)

data = response.json()
print(data)
```

### Node.js

```javascript theme={"dark"}
const response = await fetch(
  "https://api.runflow.io/v1/models/elevenlabs/tts/eleven-v3/runs",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer RUNFLOW_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
        "input": {
            "text": "Welcome to the Runflow Lab! This week we shipped five new models and honestly, the hardest part was naming them. Turns out, all the good AI names are taken."
        },
        "callback_url": "https://your-server.com/webhook"
    }),
  }
);

const data = await response.json();
console.log(data);
```

### cURL

```bash theme={"dark"}
curl -X POST https://api.runflow.io/v1/models/elevenlabs/tts/eleven-v3/runs \
  -H "Authorization: Bearer $RUNFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
    "input": {
        "text": "Welcome to the Runflow Lab! This week we shipped five new models and honestly, the hardest part was naming them. Turns out, all the good AI names are taken."
    },
    "callback_url": "https://your-server.com/webhook"
}
JSON
```

## Request parameters

| Parameter      | Type           | Required | Description                                                 |
| -------------- | -------------- | -------- | ----------------------------------------------------------- |
| `input`        | object         | required | Model input parameters. See "Input schema" below.           |
| `callback_url` | string \| null | optional | Webhook URL - POSTed when the run reaches a terminal state. |
| `metadata`     | object \| null | optional | Arbitrary key-value pairs attached to the run.              |

## Input schema

| Field                      | Type    | Required | Allowed values      | Description                                                                                                                                                                                                                                                                                                  |
| -------------------------- | ------- | -------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `text`                     | string  | required | Any                 | The text to convert to speech                                                                                                                                                                                                                                                                                |
| `voice`                    | string  | optional | Any                 | The voice to use for speech generation                                                                                                                                                                                                                                                                       |
| `language_code`            | string  | optional | Any                 | Language code (ISO 639-1) used to enforce a language for the model.                                                                                                                                                                                                                                          |
| `stability`                | float   | optional | Any                 | Voice stability (0-1)                                                                                                                                                                                                                                                                                        |
| `apply_text_normalization` | string  | optional | `auto`, `on`, `off` | This parameter controls text normalization with three modes: 'auto', 'on', and 'off'. When set to 'auto', the system will automatically decide whether to apply text normalization (e.g., spelling out numbers). With 'on', text normalization will always be applied, while with 'off', it will be skipped. |
| `timestamps`               | boolean | optional | Any                 | Whether to return timestamps for each word in the generated speech                                                                                                                                                                                                                                           |

## Output schema

| Field           | Type | Description                                                                                         |
| --------------- | ---- | --------------------------------------------------------------------------------------------------- |
| `outputs`       | json | Unified output array - one entry per generated artifact with url/type/width/height/duration/etc.    |
| `model_data`    | json | Model-specific extra fields (prompt, description, actual\_prompt, masks, etc.) keyed by field name. |
| `nsfw_detected` | json | true if the provider flagged output as NSFW, false if cleared, null if not checked.                 |
| `seed`          | json | Deterministic seed used for generation, or null if the provider doesn't return one.                 |
| `timing`        | json | Provider timing info (inference\_ms etc.), or null.                                                 |

## Callback payload

When you provide a `callback_url`, Runflow POSTs to it once the run reaches a terminal state.

| Field          | Type           | Description                                                    |
| -------------- | -------------- | -------------------------------------------------------------- |
| `event`        | string         | Event type: "run.completed", "run.failed", or "run.cancelled". |
| `run_id`       | string         | The unique identifier of the run.                              |
| `status`       | string         | Terminal status: "succeeded", "failed", or "cancelled".        |
| `output`       | object \| null | The run output. Null if the run failed or was cancelled.       |
| `duration_ms`  | number \| null | Total run duration in milliseconds.                            |
| `created_at`   | string \| null | ISO 8601 timestamp when the run was created.                   |
| `completed_at` | string \| null | ISO 8601 timestamp when the run reached terminal state.        |
| `metadata`     | object \| null | The metadata object passed at run creation, if any.            |

* **Retries:** 3 attempts with exponential backoff (1s, 2s). Retries on 5xx / network errors only.
* **Headers:** `Runflow-Request-Id` is always sent. `Runflow-Signature` is sent if a signing secret is configured.

## Additional Resources

* [Playground](https://app.runflow.io/models/elevenlabs/tts/eleven-v3)
* [API Reference](https://app.runflow.io/models/elevenlabs/tts/eleven-v3?tab=api)
* [Documentation](https://docs.runflow.io)
* [OpenAPI](https://docs.runflow.io/api/openapi.public.json)

## Related

<CardGroup cols={2}>
  <Card title="Browse all models" icon="grid" href="/models">Browse the catalog.</Card>
  <Card title="Run lifecycle" icon="play" href="/concepts/runs">Callbacks, polling, statuses.</Card>
  <Card title="Callbacks" icon="webhook" href="/concepts/callbacks">Handle async results.</Card>
  <Card title="Pricing" icon="coin" href="/concepts/pricing">How requests bill out.</Card>
</CardGroup>
