LiveKit docs › Models › STT › ElevenLabs

---

# ElevenLabs STT

> How to use ElevenLabs STT with LiveKit Agents.

- **[Use in Agent Builder](https://cloud.livekit.io/projects/p_/agents/builder/new?stt=elevenlabs%2Fscribe_v2_realtime)**: Create a new agent in your browser using elevenlabs/scribe_v2_realtime

## Overview

ElevenLabs speech-to-text is available in LiveKit Agents through [LiveKit Inference](https://docs.livekit.io/agents/models/inference.md) and the [ElevenLabs plugin](#plugin). With LiveKit Inference, your agent runs on LiveKit's infrastructure to minimize latency. No separate provider API key is required, and usage and rate limits are managed through LiveKit Cloud. Use the plugin instead if you want to manage your own billing and rate limits. Pricing for LiveKit Inference is available on the [pricing page](https://livekit.com/pricing/inference#stt).

## LiveKit Inference

Use [LiveKit Inference](https://docs.livekit.io/agents/models/inference.md) to access ElevenLabs STT without a separate ElevenLabs API key.

| Model name | Model ID | Languages |
| -------- | -------- | --------- |
| Scribe v2 Realtime | `elevenlabs/scribe_v2_realtime` | `af`, `afr`, `am`, `amh`, `ar`, `ara`, `as`, `asm`, `az`, `azj`, `be`, `bel`, `bg`, `bul`, `bn`, `ben`, `bs`, `bos`, `my`, `mya`, `ca`, `cat`, `cs`, `ces`, `ny`, `nya`, `cy`, `cym`, `da`, `dan`, `de`, `deu`, `el`, `ell`, `en`, `eng`, `es`, `spa`, `et`, `est`, `fa`, `fas`, `ff`, `ful`, `fi`, `fin`, `fr`, `fra`, `ga`, `gle`, `gl`, `glg`, `lg`, `lug`, `ka`, `kat`, `gu`, `guj`, `ha`, `hau`, `he`, `heb`, `hi`, `hin`, `hr`, `hrv`, `hu`, `hun`, `hy`, `hye`, `id`, `ind`, `ig`, `ibo`, `is`, `isl`, `it`, `ita`, `ja`, `jpn`, `jv`, `jav`, `kk`, `kaz`, `km`, `khm`, `kn`, `kan`, `ko`, `kor`, `ku`, `kur`, `ky`, `kir`, `lb`, `ltz`, `ln`, `lin`, `lo`, `lao`, `lt`, `lit`, `lv`, `lav`, `mi`, `mri`, `mk`, `mkd`, `ml`, `mal`, `mn`, `mon`, `mr`, `mar`, `ms`, `msa`, `mt`, `mlt`, `ne`, `nep`, `nl`, `nld`, `no`, `nor`, `oc`, `oci`, `or`, `ori`, `pa`, `pan`, `pl`, `pol`, `ps`, `pus`, `pt`, `por`, `ro`, `ron`, `ru`, `rus`, `sr`, `srp`, `sd`, `snd`, `sk`, `slk`, `sl`, `slv`, `sn`, `sna`, `so`, `som`, `sv`, `swe`, `sw`, `swa`, `ta`, `tam`, `te`, `tel`, `tg`, `tgk`, `th`, `tha`, `tr`, `tur`, `uk`, `ukr`, `ur`, `urd`, `uz`, `uzb`, `vi`, `vie`, `wo`, `wol`, `xh`, `xho`, `zh`, `zho`, `zu`, `zul`, `ast`, `ceb`, `fil`, `kea`, `luo`, `nso`, `umb`, `yue` |

### Usage

To use ElevenLabs, use the `STT` class from the `inference` module:

**Python**:

```python
from livekit.agents import AgentSession, inference

session = AgentSession(
    stt=inference.STT(
        model="elevenlabs/scribe_v2_realtime",
        language="en"
    ),
    # ... llm, tts, vad, turn_handling, etc.
)

```

---

**Node.js**:

```typescript
import { AgentSession, inference } from '@livekit/agents';

session = new AgentSession({
    stt: new inference.STT({
        model: "elevenlabs/scribe_v2_realtime",
        language: "en"
    }),
    // ... llm, tts, vad, turnHandling, etc.
});

```

### Parameters

- **`model`** _(string)_: The model to use for the STT.

- **`language`** _(LanguageCode)_ (optional): [Language code](https://docs.livekit.io/agents/models/stt.md#language-codes) for the transcription.

- **`extra_kwargs`** _(dict)_ (optional): Additional parameters to pass to the ElevenLabs STT API. See [model parameters](#model-parameters) for supported fields.

In Node.js this parameter is called `modelOptions`.

#### Model parameters

Pass the following parameters inside `extra_kwargs` (Python) or `modelOptions` (Node.js):

| Parameter | Type | Default | Notes |
| commit_strategy | `"manual" | "vad"` |  | Controls when audio chunks are committed for transcription. |
| include_timestamps | `bool` |  | Whether to include word-level timestamps in transcription results. |
| vad_silence_threshold_secs | `float` |  | Duration of silence in seconds that triggers end-of-speech detection. |
| vad_threshold | `float` |  | Sensitivity threshold for voice activity detection. |
| min_speech_duration_ms | `int` |  | Minimum duration of speech in milliseconds required to start a transcription segment. |
| min_silence_duration_ms | `int` |  | Minimum duration of silence in milliseconds required to end a transcription segment. |
| language_code | `str` |  | BCP-47 language code for transcription. When set, disables automatic language detection. |

### Multilingual transcription

ElevenLabs Scribe 2 Realtime supports multilingual transcription for over 90 languages with automatic language detection.

### String descriptors

As a shortcut, you can also pass a [model ID](#inference) string directly to the `stt` argument in your `AgentSession`:

**Python**:

```python
from livekit.agents import AgentSession

session = AgentSession(
    stt="elevenlabs/scribe_v2_realtime:en",
    # ... tts, stt, vad, turn_handling, etc.
)

```

---

**Node.js**:

```typescript
import { AgentSession } from '@livekit/agents';

session = new AgentSession({
    stt: "elevenlabs/scribe_v2_realtime:en",
    // ... tts, stt, vad, turnHandling, etc.
});

```

## Plugin

LiveKit's plugin support for ElevenLabs lets you connect directly to ElevenLabs' STT API with your own API key. For Node.js, use [LiveKit Inference](#inference) instead.

Available in:
- [ ] Node.js
- [x] Python

### Installation

Install the plugin from PyPI:

```shell
uv add "livekit-agents[elevenlabs]~=1.5"

```

### Authentication

The ElevenLabs plugin requires an [ElevenLabs API key](https://elevenlabs.io/app/settings/api-keys).

Set `ELEVEN_API_KEY` in your `.env` file.

### Usage

Use ElevenLabs STT in an `AgentSession` or as a standalone transcription service. For example, you can use this STT in the [Voice AI quickstart](https://docs.livekit.io/agents/start/voice-ai.md).

```python
from livekit.plugins import elevenlabs

session = AgentSession(
   stt=elevenlabs.STT(
      model_id="scribe_v2_realtime",
   ),
   # ... llm, tts, etc.
)

```

### Parameters

This section describes some of the available parameters. See the plugin reference links in the [Additional resources](#additional-resources) section for more details.

- **`model_id`** _(string)_ (optional) - Default: `scribe_v2_realtime`: The ElevenLabs model to use for speech recognition.

- **`keyterms`** _(list[str])_ (optional): A list of keywords or phrases to bias transcription toward, such as product names, technical terms, or other domain-specific vocabulary. Use this to improve recognition accuracy.

Each keyterm can contain at most 5 words and must be fewer than 50 characters. A maximum of 100 keyterms is supported. Only supported with Scribe v2 batch recognition — not compatible with `scribe_v2_realtime`. Usage incurs additional costs from ElevenLabs. For details, see [keyterms](https://elevenlabs.io/docs/api-reference/speech-to-text/convert#request.body.keyterms.keyterms).

You can also set this at runtime with `update_options(keyterms=[...])`.

## Additional resources

The following resources provide more information about using ElevenLabs with LiveKit Agents.

- **[ElevenLabs docs](https://elevenlabs.io/docs)**: ElevenLabs' full docs site.

- **[Voice AI quickstart](https://docs.livekit.io/agents/start/voice-ai.md)**: Get started with LiveKit Agents and ElevenLabs.

- **[ElevenLabs TTS](https://docs.livekit.io/agents/models/tts/elevenlabs.md)**: Guide to the ElevenLabs TTS plugin with LiveKit Agents.

---

This document was rendered at 2026-06-07T11:36:31.950Z.
For the latest version of this document, see [https://docs.livekit.io/agents/models/stt/elevenlabs.md](https://docs.livekit.io/agents/models/stt/elevenlabs.md).

To explore all LiveKit documentation, see [llms.txt](https://docs.livekit.io/llms.txt).