---
title: "Start real-time speech-to-text on a leg"
method: POST
path: "/legs/{id}/stt"
tags: ["Legs"]
---

# Start real-time speech-to-text on a leg

`POST /legs/{id}/stt`

## Request body

- STTRequest
  - `language` string, required — Language code (e.g. "en", "es")
  - `partial` boolean, required — Emit partial (non-final) transcripts
  - `provider` 'elevenlabs' | 'deepgram' | 'deepgram_flux' | 'azure' | 'speechmatics' — STT provider: "elevenlabs" (default), "deepgram" (/v1/listen), "deepgram_flux" (/v2/listen, conversational turn detection), "azure" or "speechmatics"
  - `api_key` string — API key override (falls back to ELEVENLABS_API_KEY, DEEPGRAM_API_KEY, AZURE_SPEECH_KEY or SPEECHMATICS_API_KEY env var depending on provider)
  - `model` string — Provider-specific model. Deepgram: default "nova-3". Deepgram Flux: "flux-general-en" (default) or "flux-general-multi". Speechmatics: "standard" (default) or "enhanced".
  - `keyterms` string[] — Terms to boost recognition of (Deepgram, Deepgram Flux, and Speechmatics — where they become additional_vocab).
  - `endpointing` integer — Deepgram: milliseconds of silence before a segment is finalized; 0 disables endpointing. Speechmatics: maps to max_delay, clamped to 700-4000 ms; 0 leaves the provider default.
  - `utterance_end_ms` integer — Deepgram: milliseconds of silence after which an stt.turn event with event=utterance_end is emitted. Deepgram requires interim results for this, which are requested automatically and still suppressed unless partial is true. Speechmatics: milliseconds of silence that close a turn and emit an stt.turn event with event=end_of_turn — default 600, capped at 2000, and 0 disables turn detection.
  - `eager_eot_threshold` number — Deepgram Flux only: end-of-turn confidence that fires an eager_end_of_turn stt.turn event, enabling speculative generation. Must be between 0.3 and 0.9. When unset, no eager_end_of_turn or turn_resumed events are emitted at all.
  - `eot_threshold` number — Deepgram Flux only: end-of-turn confidence required to close a turn. Deepgram default 0.7.
  - `eot_timeout_ms` integer — Deepgram Flux only: milliseconds of silence after which a turn is closed regardless of confidence. Deepgram default 5000.
  - `language_hints` string[] — Deepgram Flux only: candidate language codes for the "flux-general-multi" model.

## Response `200`

STT started

- StatusResponse
  - `instance_id` string — Instance identifier
  - `status` string, required

## Other responses

- `404` — Leg not found
- `409` — Leg not connected, STT already running, no audio reader, or the leg's audio is per-stream (transcribe its room instead)
- `503` — No ElevenLabs API key provided

## Changes

- **2026-08-24** `bed02e8b8886` — 1 info
  - added the new `speechmatics` enum value to the request property `provider`
- **2026-08-10** `c951ca5dcd08` — 10 info
  - added the new optional request property `eager_eot_threshold`
  - added the new optional request property `endpointing`
  - added the new optional request property `eot_threshold`
  - added the new optional request property `eot_timeout_ms`
  - …6 more
- **2026-04-13** `8fca8ce718d0` — 1 breaking
  - removed the enum value `azure` of the request property `provider`
- **2026-04-06** `3eeffdee9d4f` — 1 info
  - added the new `azure` enum value to the request property `provider`
- **2026-03-26** `7856459e2b72` — 1 info
  - added the new optional request property `provider`

[Full history](https://skmtc.dev/voiceblender/apis/voiceblender-api/changes/legs/:id/stt/post.md)

---

[API](https://skmtc.dev/voiceblender/apis/voiceblender-api.md) · [All operations](https://skmtc.dev/voiceblender/apis/voiceblender-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/voiceblender/voiceblender-api/revisions/89ff267f0958/schema)
