---
url: /orchestration/reference/operations/InvokeLiveTranscriptionStepTemplate.md
description: 'POST /v2/consumer/recipes/liveTranscription — Live transcription'
---

> Documentation index: https://developer.civitai.com/llms.txt — every page on this site has a markdown version at its URL + `.md`.

# Live transcription

`POST https://orchestration.civitai.com/v2/consumer/recipes/liveTranscription`

Operation `InvokeLiveTranscriptionStepTemplate` · Recipes · Civitai Orchestration API, generated from the published OpenAPI spec ([v2-consumers.json](https://developer.civitai.com/openapi/v2-consumers.json)); the interactive HTML page is this URL without `.md`.

Transcribes speech while it is recorded: append audio to <c>output.inputUrl</c> and read text from
/// <c>output.transcriptUrl</c> as it decodes. Billed per second of audio once the session ends.

## Authentication

Send `Authorization: Bearer <token>` (the spec's `ApiKey` scheme); this operation documents `401 Unauthorized` for a missing or invalid token. See [Authentication](https://developer.civitai.com/orchestration/guide/authentication.md).

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `experimental` | query | boolean | no |  |
| `allowMatureContent` | query | boolean | no |  |
| `whatif` | query | boolean | no |  |
| `ephemeral` | query | boolean | no |  |
| `tier` | query | `WorkflowTier` (one of `paid`, `free`) | no | How a workflow is paid for. |

## Request body

Optional. Content types: `application/json`, `text/json`, `application/*+json`.

Schema `LiveTranscriptionInput`.

| Field | Type | Required | Description |
|---|---|---|---|
| `language` | string, nullable | no | Language of the speech (e.g., "en", "zh"). Send it: without it the model assumes English and invents English text for other languages. |
| `context` | string, nullable | no | Optional context prompt to improve transcription accuracy. |
| `maxDurationSeconds` | integer (int32) | no | The session ends after this many seconds of audio, even if the input is still open. The upfront balance check covers this much audio. (default `120`, minimum `1`, maximum `600`) |
| `idleTimeoutSeconds` | integer (int32) | no | The input is treated as closed when no audio arrives for this many seconds, so a client that disappears does not hold the session open. (default `10`, minimum `2`, maximum `60`) |
| `turnDetection` | boolean | no | Sends a `turn` event shortly after each pause in speech with the probability that the speaker has finished, so a voice agent can answer sooner than a fixed silence timeout. (default `true`) |

## Responses

### 200 OK

Content type: `application/json`.

Schema `LiveTranscriptionOutput`.

| Field | Type | Required | Description |
|---|---|---|---|
| `inputUrl` | string (uri) | yes | POST raw PCM (s16le, 16 kHz, mono) here in chunks numbered `?seq=0,1,…`, with `final=true` on the last. |
| `inputUrlExpiresAt` | string (date-time) | yes |  |
| `transcriptUrl` | string (uri) | yes | NDJSON transcript events: `partial` replaces the open segment's text, `final` commits it, and `done` ends the stream with the whole transcript. |
| `text` | string, nullable | no | The whole transcript, once the session has ended. |
| `audioSeconds` | number (double) | yes | Seconds of audio received so far; the session is billed on this. |
| `socketUrl` | string (uri), nullable | no | One WebSocket in place of `inputUrl` and `transcriptUrl`, avoiding a request per audio chunk. |

### 400 Bad Request

Content type: `application/json`.

Schema `ProblemDetails`.

| Field | Type | Required | Description |
|---|---|---|---|
| `type` | string, nullable | no |  |
| `title` | string, nullable | no |  |
| `status` | integer (int32), nullable | no |  |
| `detail` | string, nullable | no |  |
| `instance` | string, nullable | no |  |

### 401 Unauthorized

Content type: `application/json`.

Schema `ProblemDetails` — fields as listed above.

### 403 Forbidden

Content type: `application/json`.

Schema `ProblemDetails` — fields as listed above.
