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

# Transcript Document Format

> Normalized speech-to-text JSON returned in STT task result resources (type=document).

This page describes the **JSON body** of a speech-to-text result file. It is **not** an HTTP API.

When an STT task succeeds, [Query Task Result](/api/get-task-result) returns `result.resources[]` with `type` set to `document`. Download `resources[].url`; the response body matches **modellix.transcript.v1** (normalized across providers, not vendor-raw JSON).

Used by Fun-ASR, Grok Voice ASR, Whisper, MAI-Transcribe, and other STT models.

## How to obtain

<Steps>
  <Step title="Submit an STT model request">
    Call a speech-to-text model endpoint. The platform returns an async task (`task_id`).
  </Step>

  <Step title="Poll the task">
    Call [Query Task Result](/api/get-task-result) until `data.status` is `success`.
  </Step>

  <Step title="Download the document resource">
    Find `result.resources[]` where `type` is `document`, then `GET` that `url`. The body is the schema below.
  </Step>
</Steps>

## Root object

| Field         | Type    | Required | Description                                                                   |
| ------------- | ------- | -------- | ----------------------------------------------------------------------------- |
| `schema`      | string  | yes      | Always `modellix.transcript.v1`                                               |
| `text`        | string  | yes      | Full transcript text (non-empty)                                              |
| `language`    | string  | no       | Detected or provider language label (may be a display name such as `English`) |
| `duration_ms` | integer | no       | Audio duration in milliseconds                                                |
| `channels`    | array   | no       | Per-channel transcripts. See [Channel](#channel)                              |

## Channel

| Field        | Type    | Required | Description                                  |
| ------------ | ------- | -------- | -------------------------------------------- |
| `channel_id` | integer | yes      | Channel index (0-based)                      |
| `text`       | string  | no       | Channel-level full text                      |
| `sentences`  | array   | no       | Sentence segments. See [Sentence](#sentence) |

## Sentence

| Field        | Type    | Required | Description                                                                         |
| ------------ | ------- | -------- | ----------------------------------------------------------------------------------- |
| `begin_ms`   | integer | yes      | Start time in milliseconds                                                          |
| `end_ms`     | integer | yes      | End time in milliseconds                                                            |
| `text`       | string  | yes      | Sentence text                                                                       |
| `speaker_id` | integer | no       | Speaker id when diarization is enabled and speakers are consistent for the sentence |
| `words`      | array   | no       | Word-level timings. See [Word](#word)                                               |

## Word

| Field        | Type    | Required | Description                            |
| ------------ | ------- | -------- | -------------------------------------- |
| `begin_ms`   | integer | yes      | Start time in milliseconds             |
| `end_ms`     | integer | yes      | End time in milliseconds               |
| `text`       | string  | yes      | Word text                              |
| `speaker_id` | integer | no       | Speaker id when diarization is enabled |

## Examples

### Single-channel with word timings

```json theme={null}
{
  "schema": "modellix.transcript.v1",
  "text": "The balance is $100.",
  "language": "English",
  "duration_ms": 3450,
  "channels": [
    {
      "channel_id": 0,
      "text": "The balance is $100.",
      "sentences": [
        {
          "begin_ms": 240,
          "end_ms": 3200,
          "text": "The balance is $100.",
          "words": [
            { "begin_ms": 240, "end_ms": 480, "text": "The" },
            { "begin_ms": 480, "end_ms": 960, "text": "balance" },
            { "begin_ms": 960, "end_ms": 1120, "text": "is" },
            { "begin_ms": 1120, "end_ms": 3200, "text": "$100." }
          ]
        }
      ]
    }
  ]
}
```

### With speaker diarization

```json theme={null}
{
  "schema": "modellix.transcript.v1",
  "text": "Hello there",
  "duration_ms": 1000,
  "channels": [
    {
      "channel_id": 0,
      "text": "Hello there",
      "sentences": [
        {
          "begin_ms": 0,
          "end_ms": 1000,
          "text": "Hello there",
          "words": [
            { "begin_ms": 0, "end_ms": 400, "text": "Hello", "speaker_id": 0 },
            { "begin_ms": 400, "end_ms": 1000, "text": "there", "speaker_id": 1 }
          ]
        }
      ]
    }
  ]
}
```
