---
title: "Request Transcript"
method: POST
path: "/video/transcript/{source_file_id}"
tags: ["accepts-api-key"]
---

# Request Transcript

`POST /video/transcript/{source_file_id}`

## Request

- Base URL: `https://api.tellers.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tellers.ai/video/transcript/{source_file_id}`
- Auth: none declared

Generate a transcript for an asset, or for every asset in a folder.

Requires WRITE access on the asset or admin. The task no-ops when a
transcript was already generated.

For a single asset, rejects types that cannot be transcribed with a 400.
Pointed at a folder, it queues a walk of that folder instead and returns as
soon as the walk is queued: ``task_id`` then tracks the fan-out, which
dispatches one transcript task per asset. Types that cannot be transcribed
are skipped there rather than rejected — a mixed folder is the normal case —
as are assets the caller cannot write and assets whose media is not
uploaded. The preflight route reports how many assets a folder would
dispatch before you commit to it.

Unlike the description route this takes no config override: speech-to-text
reads none of the tellers-config. One sent here is refused with a 400 rather
than accepted and ignored, so a caller cannot believe a config applied to a
transcript when nothing read it.

## Path parameters

- `source_file_id` string, uuid, required

## Headers

- `x-api-key` string, nullable
- `authorization` string, nullable

## Request body

- AnalysisConfigOverrideRequest: A tellers-config supplied with the request instead of read from a folder.
  - `config` TellersConfigFile, required
    - `entity_to_use` string[]
    - `analysis` AssetAnalysisSettings
      - `reasoning` 'low' | 'medium' | 'high', nullable
      - `fps` number, nullable
      - `entity_quality` 'low' | 'medium' | 'high', nullable
      - `asset_quality` 'low' | 'medium' | 'high', nullable
      - `prompt` string, nullable
      - `long_video` LongVideoAnalysisSettings: How descriptions of long videos differ from short ones. Only scene-description generation reads this; ``video_analyse_gemini`` takes its processing mode as a tool argument instead. Every field is optional so a folder config can override one of them and inherit the rest.
        - `enabled` boolean, nullable: Whether videos longer than 'min_duration_s' use these settings. When false, every video is described like a short one (static frame sampling, 5-minute chunks).
        - `min_duration_s` integer, nullable: Videos longer than this many seconds count as long.
        - `processing` 'static' | 'agentic', nullable: 'agentic' lets Gemini pick which frames to look at (cheaper on long footage); 'static' samples at the configured fps.
        - `split_duration_s` integer, nullable: Length in seconds of each Gemini call a long video is split into. 0 sends the whole video in one call.
    - `generate_stt_from_op_atom` boolean
    - `generate_stt_from_master_clip` boolean
    - `generate_stt_with_diarization` boolean: Whether speech-to-text also splits the audio by speaker. On by default: it costs no more than a plain transcription, so the transcript carries a 'speakers' timeline naming who talks over each stretch of the media unless a config turns it off. The words themselves are unchanged either way.
    - `generate_description_from_op_atom` boolean
    - `generate_description_from_master_clip` boolean
    - `merge_strategy` 'merge' | 'override': How this config combines with the configs of its parent folders. 'merge' inherits them and overrides field by field; 'override' ignores them.
    - `merge_parent_config` boolean: Deprecated and ignored. Superseded by 'merge_strategy'; it was never settable, so it is always false.

## Response `200`

Successful Response

- GenerateTranscriptResponse
  - `task_id` string, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-11-05** `fdaa0fa44a26`: 1 info
  - added the new optional request property `anyOf[subschema #1: AnalysisConfigOverrideRequest]/config/analysis/anyOf[subschema #1: AssetAnalysisSettings]/long_video`

[Operation history](https://skmtc.dev/tellers/apis/tellers-api/changes/video/transcript/:source_file_id/post.md)

---

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