---
title: "Transcribe"
method: POST
path: "/v1/transcribe"
---

# Transcribe

`POST /v1/transcribe`

## Request

- Base URL: `https://api.doomersion.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.doomersion.com/v1/transcribe`
- Auth: none declared

**Field notes.** `start_ms` is the load-bearing number: `end_ms` carries a
`min_word_duration_ms` floor and may therefore overrun the next word's start, so
build highlight windows with `[word.start_ms, next_word.start_ms)` as
`/v1/render-profile` describes. `boundaries_estimated: true` means word boundaries
for this request are approximate; it is only ever returned for space-separated
languages, and a request that cannot be given reliable boundaries fails with a
retryable 503 rather than returning poor ones. Subtitle exports are always
generated from the unshifted timeline, even when `bake_lead` shifts `words` and
`segments`, because a burned-in or `<track>`-rendered caption has no decode
latency to compensate for.

## Headers

- `X-API-Key` string, nullable
- `authorization` string, nullable

## Request body `multipart/form-data`

- BodyTranscribeV1TranscribePost
  - `file` string, binary, required: Audio or video file (any container ffmpeg reads)
  - `tier` string: 'accurate' (word-level boundaries and sentence segments; required for languages written without spaces) or 'fast' (cheaper and quicker; equivalent word timings on space-separated languages, character-level units on unspaced ones)
  - `language` string, nullable: Optional ISO language hint (fast tier only)
  - `preprocess` boolean: Denoise + normalize before transcription
  - `bake_lead` boolean: Pre-shift timings by our recommended lead
  - `lead_ms` integer, nullable: Explicit lead to pre-shift by (implies bake_lead)
  - `formats` string, nullable: Comma-separated subtitle exports: srt,vtt,ass
  - `fresh` boolean: Force reprocessing instead of replaying an identical recent upload
  - `background` boolean: Return 202 + request_id immediately instead of waiting for the result
  - `translate_to` string, nullable: Optional target language for sentence-level translation of each segment: 'en'. Word timings stay in the source language

## Response `200`

Word timings, caption segments, render constants, and any requested subtitle exports.

- unknown

## Other responses

- `202`: Accepted but not finished. Poll `poll_url`; the completed body is identical to a 200 here. Returned when `background=true` or when the work outlasts the inline window.
- `422`: Validation Error

---

[API](https://skmtc.dev/doomersion/apis/word-timing-api.md) - [All operations](https://skmtc.dev/doomersion/apis/word-timing-api/llms.txt) - [OpenAPI document](https://skmtc.dev/doomersion/apis/word-timing-api/revisions/c954b6f2e34b?raw)
