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

# Get Editor Transcript

> Word timings and silences for the project videos, in source milliseconds.

Transcribes the project's video assets, or a single asset, and returns word timings and silent
gaps. Use them to choose the source ranges for a `set_sequence` op in
[Apply Editor Ops](/api-reference/apply-editor-ops).

All times are **source ms**: positions inside each original asset, not on the edited timeline.
`gaps` are silences longer than 700 ms between words (or before the first word and after the last).

Transcripts are free and consume no credits. They are rate limited per account owner (30 requests
per hour), and long videos can take a while, so allow a generous timeout.

## Path Parameters

<ParamField path="projectId" type="string (UUID)" required>
  The project id.
</ParamField>

## Body Parameters

The body is optional.

<ParamField body="asset_id" type="string">
  Transcribe only this asset. Leave it out to transcribe every video asset in the project.
</ParamField>

## Response

<ResponseField name="project_id" type="string" />

<ResponseField name="assets" type="object[]">
  One entry per asset: `asset_id`, `words[]` (`text`, `start_ms`, `end_ms`), and `gaps[]`
  (`start_ms`, `end_ms`).
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://www.genviral.io/api/partner/v1/editor/projects/b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f/transcript \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{ "asset_id": "asset_1" }'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "ok": true,
    "code": 200,
    "message": "Editor transcript retrieved",
    "data": {
      "project_id": "b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f",
      "assets": [
        {
          "asset_id": "asset_1",
          "words": [
            { "text": "So", "start_ms": 1200, "end_ms": 1480 },
            { "text": "here's", "start_ms": 1480, "end_ms": 1900 }
          ],
          "gaps": [{ "start_ms": 9800, "end_ms": 14500 }]
        }
      ]
    }
  }
  ```
</ResponseExample>

## Error Responses

* `400 invalid_json` - request body is present but not valid JSON
* `401` - authentication failed (missing/invalid/revoked token)
* `404 project_not_found` - the project does not exist in the key scope
* `422 invalid_payload` - body failed validation (see `issues`)
* `422 asset_not_found` - `asset_id` is not an asset of the project
* `422 invalid_document` - the project could not be read
* `502 transcription_failed` - the audio could not be transcribed; retry later
* `429 rate_limited` - transcript limit reached; wait `retry_after_seconds`
* `503 provider_unavailable` - the limiter could not answer right now; retry after `retry_after_seconds`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.