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

# Transcription enrichment features

> Optional metadata and request options for transcription — speaker diarization, emotion, accent, PII/PHI tagging, deepfake scoring, language hints, and custom vocabulary.

The Transcription APIs support several optional features that add metadata to transcription output. This article explains what each feature does, when to enable it, and what values to expect. Feature availability varies by endpoint — see the summary table below.

## Feature availability

| Feature                   | Multilingual Transcription (batch) | Multilingual Transcription (streaming) | English Fast Transcription (batch) | Multilingual Fast Transcription (batch) |
| ------------------------- | ---------------------------------- | -------------------------------------- | ---------------------------------- | --------------------------------------- |
| Speaker diarization       | ✓                                  | ✓                                      | —                                  | —                                       |
| Emotion detection         | ✓                                  | ✓                                      | —                                  | —                                       |
| Accent detection          | ✓                                  | ✓                                      | —                                  | —                                       |
| PII/PHI tagging           | ✓                                  | ✓                                      | —                                  | —                                       |
| Deepfake scoring          | ✓                                  | ✓                                      | —                                  | —                                       |
| Language hint             | ✓                                  | ✓                                      | —                                  | ✓                                       |
| Custom vocabulary         | ✓                                  | ✓                                      | —                                  | —                                       |
| Partial (interim) results | —                                  | ✓                                      | —                                  | —                                       |

<Note>
  All features are disabled by default except speaker diarization, which defaults to `true` in both the batch and streaming endpoints.
</Note>

## Speaker diarization

**Request field:** `speaker_diarization` (boolean, default `true`)

Speaker diarization identifies distinct speakers in the audio and assigns each utterance a `speaker` integer, starting from 1. Speaker numbers are consistent within a single file — speaker 1 in one utterance is the same speaker as speaker 1 in any other utterance from the same request. Speaker numbers are not consistent across separate requests or files.

The feature works independently of language detection. In a multilingual conversation, each speaker still receives a consistent label even if they switch languages mid-call.

Disable diarization if you are processing single-speaker audio and want to reduce processing overhead, or if the `speaker` field is not useful to your application.

## Emotion detection

**Request field:** `emotion_signal` (boolean, default `false`)

Emotion detection classifies the emotional tone of each utterance from the speaker's voice signal. The result appears in the `emotion` field on each utterance object. When disabled, `emotion` is `null`.

Detection is per-utterance and based on acoustic features, not on the words spoken. Two utterances with the same text may receive different emotion labels if the delivery differs.

### Possible values

`Neutral`, `Calm`, `Happy`, `Amused`, `Excited`, `Proud`, `Affectionate`, `Interested`, `Hopeful`, `Frustrated`, `Angry`, `Contemptuous`, `Concerned`, `Afraid`, `Sad`, `Ashamed`, `Bored`, `Tired`, `Surprised`, `Anxious`, `Stressed`, `Disgusted`, `Disappointed`, `Confused`, `Relieved`, `Confident`

For dedicated emotion classification without a transcript — a whole-file label plus a windowed time series — use the standalone [Emotion Detection](/api-reference/emotion/overview) API instead.

## Accent detection

**Request field:** `accent_signal` (boolean, default `false`)

Accent detection classifies the regional or national accent of each utterance's speaker. The result appears in the `accent` field on each utterance object. When disabled, `accent` is `null`.

Like emotion detection, accent classification is per-utterance. For a speaker with a consistent accent across the file, results will typically be consistent but may vary on short or acoustically challenging segments.

### Possible values

`American`, `British`, `Australian`, `Southern`, `Indian`, `Irish`, `Scottish`, `Eastern_European`, `African`, `Asian`, `Latin_American`, `Middle_Eastern`, `Unknown`

For dedicated accent classification without a transcript — a whole-file label plus a windowed time series — use the standalone [Accent Detection](/api-reference/accent/overview) API instead.

## PII/PHI tagging

**Request field:** `pii_phi_tagging` (boolean, default `false`)

PII/PHI tagging identifies personally identifiable information (PII) and personal health information (PHI) in the transcribed text and wraps those spans in tags within the `text` field of each utterance. The transcript content is preserved — only the tag markup is added.

Enable PII/PHI tagging when your downstream systems need to identify or handle sensitive text spans, but you still need the original content in the transcript.

<Tip>
  **Need the audio silenced, not just the transcript tagged?** If you need PII/PHI replaced with entity-type tags in the transcript **and** the corresponding audio ranges silenced — for example, for shareable recordings or compliance archiving — use the dedicated PII/PHI Redaction APIs instead. See the **API Reference** tab.
</Tip>

## Deepfake scoring

**Request field:** `deepfake_signal` (boolean, default `false`)

The deepfake signal scores each utterance for the likelihood that it contains AI-generated speech. The score appears in the `deepfake_score` field on each utterance object. Available on Multilingual Transcription (batch and streaming).

| Value  | Meaning                                                       |
| ------ | ------------------------------------------------------------- |
| `0.0`  | Likely natural human speech                                   |
| `1.0`  | Likely synthetic speech                                       |
| `null` | Feature is disabled, or utterance is shorter than 0.5 seconds |

Utterances shorter than 0.5 seconds are not scored and return `null` regardless of whether the feature is enabled.

For dedicated deepfake analysis across an entire file (including frame-level results and a `no-content` verdict for silence), use the Deepfake Detection APIs.

### How this relates to Deepfake Detection

The `deepfake_signal` in the Transcription APIs and the dedicated Deepfake Detection APIs both detect synthetic speech, but they serve different use cases.

The Transcription `deepfake_signal` is convenient when you are already transcribing and want a per-utterance score without a separate API call. The dedicated Deepfake Detection APIs provide frame-level analysis across the full file and explicit `no-content` handling for silence — making them the better choice when detection is the primary goal rather than a supplementary signal.

## Language hint

**Request field:** `language` (string, default: automatic detection)

By default, the language is detected automatically for each utterance. Pass a case-insensitive ISO 639-1 code (e.g. `en`, `fr`) to hint the expected language instead. BCP 47 region or script subtags (e.g. `en-US`) are accepted, but only the primary language subtag is used.

The hint is available on Multilingual Transcription (batch and streaming), PII/PHI Redaction (batch and streaming), and in the `stt` block of the Velma Triage config. An invalid code is rejected — batch endpoints return `400`; streaming endpoints close with code `1003`.

On the batch endpoint, `language` is a form parameter; on the streaming endpoint it is a query parameter or a field in the first-frame [configuration frame](/api-reference/stt/streaming#configuration-frame).

[Multilingual Fast Transcription (batch)](/api-reference/stt/batch-multilingual-vfast) also accepts a `language` form parameter as a short code (e.g. `en`, `es`, `fr`, `ja`). When provided, the audio is transcribed directly in that language; when omitted, the language is detected automatically.

## Custom vocabulary

**Request field:** `custom_terms` (array, default: no biasing)

Custom vocabulary biases transcription toward domain terms and names — product names, industry jargon, or proper nouns the model might otherwise mistranscribe. Each entry is either a plain string (the term itself) or an object:

| Field            | Type             | Description                                                                                                                                                                       |
| ---------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `term`           | string           | **Required.** The vocabulary term to bias transcription toward                                                                                                                    |
| `definition`     | string           | Optional short definition of the term (max 256 characters)                                                                                                                        |
| `pronunciations` | array of strings | Optional pronunciation hints (max 16, each max 128 characters), as X-SAMPA notation or hyphen-separated ASCII respelling with the stressed syllable in capitals (e.g. `GOO-guhl`) |

At most 1000 entries are accepted, and the term strings serialized together as JSON must total under 8000 characters. Blank terms and blank pronunciations are dropped.

```json theme={null}
{
  "custom_terms": [
    "Modulate",
    { "term": "Velma", "definition": "Modulate's conversation intelligence model", "pronunciations": ["VEL-muh"] }
  ]
}
```

Where to send it:

* **Multilingual Transcription (batch):** include `custom_terms` in the JSON-encoded `config` form field.
* **Multilingual Transcription (streaming):** include `custom_terms` in the first-frame [configuration frame](/api-reference/stt/streaming#configuration-frame).
* **Velma Triage (batch and streaming):** include `custom_terms` in the `stt` block of the `BatchConfig`.

## Partial (interim) results

**Request field:** `partial_results` (boolean, default `false`, Multilingual Transcription streaming only)

When enabled, the streaming server emits `partial_utterance` messages containing in-progress text as speech is being recognized, in addition to the finalized `utterance` messages. Each partial also carries the latest interim `emotion`, `accent`, and `deepfake_score` values for the utterance when those signals are enabled; each is `null` until a value is available.

Each `partial_utterance` supersedes the previous one for the currently active utterance; the finalized `utterance` message supersedes all preceding partials for that utterance.

Enable partial results when you need low-latency text preview (for example, to render live captions). Leave it disabled when only finalized utterances matter, to reduce message volume.

## Related

* [How Deepfake Detection works](/guides/synthetic-voice-detection)
* [Which API should I use?](/guides/which-api)
