# Speech understanding

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

Speech understanding enables you to configure recognition, choose a model, and check language support.

Put recognition settings in the `config` object for Fast and Batch requests or in `config` within a Live `session.update` event.

## Recognition configuration

| Field                | Type    | Default   | Fast | Batch | Live            | Description                                                                                                                                                                  |
| -------------------- | ------- | --------- | ---- | ----- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `language`           | string  | `en-US`   | Yes  | Yes   | Yes             | Recognition language. With `language_detection`, the preferred initial language; when `language_detection` is set and `language` is omitted, there is no preferred language. |
| `model`              | string  | Automatic | Yes  | Yes   | Yes             | Recognition model. Omit when `language_detection.mode` is `once`; Scribe chooses the model from the detected language.                                                       |
| `language_detection` | object  | —         | Yes  | Yes   | Continuous only | Detects a language once or continuously. Live supports only `continuous`.                                                                                                    |
| `interim_results`    | boolean | —         | No   | No    | Yes             | Enables Captions: partial transcription results before a transcript item is completed.                                                                                       |
| `segmentation_mode`  | string  | `auto`    | Yes  | Yes   | No              | Use `auto` to split audio into segments at pauses in speech (voice activity detection), or `none` to disable segmentation.                                                   |
| `word_time_offsets`  | boolean | `false`   | Yes  | Yes   | No              | Includes word-level start and end offsets.                                                                                                                                   |
| `channel_separation` | boolean | `false`   | Yes  | Yes   | No              | Processes stereo channels independently.                                                                                                                                     |
| `diarization`        | boolean | `false`   | Yes  | Yes   | Yes             | Identifies speakers. When `false`, `speaker` is an empty string.                                                                                                             |
| `profanity_filter`   | boolean | `false`   | Yes  | Yes   | Yes             | Filters profanity when the selected model supports it.                                                                                                                       |
| `output_format`      | string  | `json`    | Yes  | Yes   | No              | Output format. Defaults to `json`.                                                                                                                                           |
| `vocabulary`         | object  | —         | Yes  | Yes   | Yes             | Inline vocabulary for the current request, job, or session.                                                                                                                  |
| `vocabulary_id`      | string  | —         | Yes  | Yes   | Yes             | Persistent Vocabulary Asset to apply.                                                                                                                                        |

Unsupported combinations of language, model, execution mode, and settings return a validation error.

## Select a model

Set `config.model` to explicitly select a recognition model. When it is omitted, Scribe selects a compatible standard model from the language, detection mode, and execution mode.

When `config.language_detection.mode` is `once`, omit `config.model`. Combining an explicit model with `once` returns HTTP `400` because Scribe must select the model after detecting the language.

| Model                      | Coverage                                                                         | Language detection |
| -------------------------- | -------------------------------------------------------------------------------- | ------------------ |
| `zoom-scribe-en`           | English                                                                          | No                 |
| `zoom-scribe-en-pro`       | English                                                                          | No                 |
| `zoom-scribe-multilingual` | Ten languages; see [Multilingual model languages](#multilingual-model-languages) | Continuous         |
| `zoom-scribe-<language>`   | A supported language-specific model                                              | No                 |
| `whisper`                  | 36 languages, including 26 locales not covered by `zoom-scribe-multilingual`     | Continuous         |

The multilingual model IDs are the same in Fast and Live. Set `config.model` to the identifier below. You do not need a Live-specific prefix.

| Model             | Fast `config.model`        | Live `config.model`        |
| ----------------- | -------------------------- | -------------------------- |
| Zoom multilingual | `zoom-scribe-multilingual` | `zoom-scribe-multilingual` |
| Whisper           | `whisper`                  | `whisper`                  |

Models ending in `-pro` require premium-model access. Automatic selection does not choose a premium model unless you enable premium usage for the account.

`zoom-scribe-en-pro` is the Pro option for English, **Scribe API 3B Pro High-Accuracy**, for applications that need higher accuracy. Use the model ID, not the product name, in `config.model`.

The response's top-level `model` field identifies the model that processed the input.

```json
{
    "file": "https://example.com/audio.wav",
    "config": {
        "language": "en-US",
        "model": "zoom-scribe-en",
        "word_time_offsets": true,
        "diarization": true
    }
}
```

## Detect languages

Use `config.language_detection` to detect the input language.

| Mode         | Behavior                                                                                         |
| ------------ | ------------------------------------------------------------------------------------------------ |
| `once`       | Detects one language, then recognizes the rest of the input with that language.                  |
| `continuous` | Detects language changes as the input is processed. Each segment contains one detected language. |

Live supports only `continuous`.

For `once`, omit `model` so Scribe can select it based on the detected language:

```json
{
    "config": {
        "language_detection": {
            "mode": "once",
            "candidate_languages": ["en-US", "fr-FR"]
        }
    }
}
```

Use `candidate_languages` to restrict detection. When both `language` and `candidate_languages` are present, the preferred `language` must be included in the candidate list.

For `continuous`, you can explicitly select a model that supports continuous detection:

```json
{
    "config": {
        "language": "en-US",
        "model": "zoom-scribe-multilingual",
        "language_detection": {
            "mode": "continuous",
            "candidate_languages": ["en-US", "es-ES", "fr-FR"]
        }
    }
}
```

For Fast and Batch continuous detection, `result.language` and `result.segments[].language` are omitted because the input can contain multiple languages. Do not expect per-segment language labels. With `once`, `result.language` may also be absent; clients should handle its omission.

Live continuous detection returns the detected language in `transcription.completed.language`, such as `fr` for French.

## Multilingual model languages

The `zoom-scribe-multilingual` model supports these languages and locales:

| Language             | Locale codes     |
| -------------------- | ---------------- |
| English              | `en-US`          |
| Arabic               | `ar-SA`, `ar-AE` |
| Chinese (Simplified) | `zh-CN`          |
| French               | `fr-FR`          |
| German               | `de-DE`          |
| Italian              | `it-IT`          |
| Japanese             | `ja-JP`          |
| Korean               | `ko-KR`          |
| Portuguese           | `pt-BR`, `pt-PT` |
| Spanish              | `es-ES`          |

## Broader language coverage

The `whisper` model recognizes 36 languages, with integrated language detection. These include the ten languages of the multilingual model and the following 26 locales:

| Language   | Locale code | Language           | Locale code |
| ---------- | ----------- | ------------------ | ----------- |
| Bengali    | `bn-IN`     | Malay              | `ms-MY`     |
| Cantonese  | `zh-HK`     | Persian (Farsi)    | `fa-IR`     |
| Catalan    | `ca-ES`     | Polish             | `pl-PL`     |
| Czech      | `cs-CZ`     | Romanian           | `ro-RO`     |
| Danish     | `da-DK`     | Russian            | `ru-RU`     |
| Dutch      | `nl-NL`     | Swedish            | `sv-SE`     |
| Estonian   | `et-EE`     | Tagalog (Filipino) | `tl-PH`     |
| Finnish    | `fi-FI`     | Tamil              | `ta-IN`     |
| Greek      | `el-GR`     | Telugu             | `te-IN`     |
| Hebrew     | `he-IL`     | Thai               | `th-TH`     |
| Hindi      | `hi-IN`     | Turkish            | `tr-TR`     |
| Hungarian  | `hu-HU`     | Ukrainian          | `uk-UA`     |
| Indonesian | `id-ID`     | Vietnamese         | `vi-VN`     |

## Transcript response

Fast returns the result inline. Batch writes the same result schema to the configured storage destination.

```json
{
    "request_id": "3f2b8c1e-7a4d-4e9b-b6f0-1c5d8a2e9b47",
    "duration_sec": 10.99,
    "result": {
        "text_display": "Welcome everyone. Let's get started.",
        "segments": [
            {
                "id": "utt_0000",
                "start": 0.0,
                "end": 2.4,
                "channel": 0,
                "speaker": "Speaker 1",
                "text": "Welcome everyone.",
                "words": [{ "word": "Welcome", "start": 0.0, "end": 0.4 }]
            }
        ]
    },
    "model": "zoom-scribe-en",
    "usage": {
        "input_units": 10.99,
        "output_units": 0,
        "unit_type": "seconds"
    }
}
```

## Process multiple channels

Fast and Batch accept mono and stereo media. Set `channel_separation` to `true` to recognize each stereo channel independently.

```json
{
    "config": {
        "language": "en-US",
        "channel_separation": true,
        "diarization": false
    }
}
```

Every segment includes `channel`. Channel `0` is the left channel and channel `1` is the right channel. When separation is disabled or the input is mono, the value is `0`.
