---
title: "Get Video Transcript"
method: GET
path: "/v2/videos/{video_id}/transcript"
tags: ["Video Emotion API"]
---

# Get Video Transcript

`GET /v2/videos/{video_id}/transcript`

## Request

- Base URL: `https://api.imentiv.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.imentiv.ai/v2/videos/{video_id}/transcript`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://api.imentiv.ai/oauth/authorize`
    - Token URL: `https://api.imentiv.ai/oauth/token` scopes: `media.read`

Read a video's own transcript, or the transcript attached to it.

`transcript=machine` (the default) returns the video's own transcript with its speaker labels;
it is empty until that transcript exists. `transcript=provider` returns what was attached
with `PUT`, its `source`, its speaker display names and `attached_at`, or 404 when nothing
is attached. The response names which transcript it holds in `transcript`.

The video's owner and administrators can read it; a shared link does not grant access to a
transcript.

## Path parameters

- `video_id` string, required: The unique ID of the video.

## Query parameters

- `transcript` 'machine' | 'provider': `machine` (default) is the video's own transcript; `provider` is the one attached with `PUT`.

## Response `200`

Successful Response

- TranscriptResponse: One of a media's two transcripts.
  - `media_id` string, required
  - `transcript` 'machine' | 'provider', required: Which transcript this is: `machine` or `provider`.
  - `source` 'tldv' | 'zoom' | 'meet' | 'other', nullable: For a provider transcript, where it came from. Null for `machine`.
  - `segments` TranscriptSegmentOut[], required
    - `speaker` string, required
    - `start_ms` integer, required
    - `end_ms` integer, required
    - `text` string, required
    - `language` string, nullable: The language this segment was transcribed in, when it differs from the audio's: it was detected automatically or transcribed again for a user language range. Absent or null means the audio's language.
    - `language_source` 'user' | 'detected', nullable: Who chose `language`: `user` or `detected`. Null with `language`.
    - `range_id` string, nullable: The user language range that wrote this segment; absent on automatically detected lines.
  - `speakers` object, required: Display names by speaker label. Empty for `machine`.
  - `attached_at` string, nullable: Null for `machine`.

## Other responses

- `401`: Missing, malformed or rejected credentials — no `X-API-Key` / `Authorization: Bearer <jwt>`, an expired token, or a caller that lacks the role the route requires. Note that this API answers *authorization* failures with 401 as well as 403 (see the 403 entry where a route declares both).
- `404`: No such resource, or it is not visible to this caller. Ownership failures are reported as 404 rather than 403 so the API does not confirm the existence of another account's records.
- `422`: Request validation failed. The app flattens FastAPI's validation error list into a single `detail` string, so the body is `{"detail": "'field' <message>"}` and NOT FastAPI's default `HTTPValidationError`. Declaring this overrides the auto-generated 422 — see the module docstring.

## Changes

- **2026-10-07** `45bdd041d683`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/changes/v2/videos/:video_id/transcript/get.md)

---

[API](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai.md) - [All operations](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/llms.txt) - [OpenAPI document](https://skmtc.dev/imentiv/apis/welcome-to-imentiv-ai/revisions/bc15cec7e794?raw)
