---
title: "Show Captions"
method: GET
path: "/medias/{mediaHashedId}/captions/{languageCode}"
tags: ["Captions"]
---

# Show Captions

`GET /medias/{mediaHashedId}/captions/{languageCode}`

## Request

- Base URL: `https://api.wistia.com/modern`
- URL: `https://api.wistia.com/modern/medias/{mediaHashedId}/captions/{languageCode}`
- Auth: HTTP bearer

Returns a media's captions in the specified language.
Supports multiple formats: JSON (default), SRT, VTT, and TXT.
Use file extensions (.srt, .vtt, .txt) or Accept headers to specify format.

## Requires api token with one of the following permissions
```
Read all folder and media data
```

Tokens with the "Act with a team member's permissions" permission
(`all:delegate_to_contact_permissions` scope) can also be used. Requests
made with such a token are authorized using the permissions of the
contact assigned to the token.

An [expiring access token](https://docs.wistia.com/reference/post_expiring-token)
created with the `all:delegate_to_contact_permissions` scope and an
authorization granting the `edit-transcripts` permission on this media can
also be used. For a token granted any other permission on the media the
captions are not found.

## Path parameters

- `mediaHashedId` string, required
- `languageCode` string, required

## Query parameters

- `include` 'segments' | 'diarized_segments': Set to `segments` to include time-coded caption cues.
- `include_speakers` boolean

## Headers

- `X-Wistia-API-Version` string, required

## Response `200`

Successful response containing captions in the requested format

- object
  - `english_name` string: English name of the language.
  - `native_name` string: Native name of the language.
  - `language` string, required: A 3 character language code as specified by ISO-639–2.
  - `text` string, nullable: The text of the captions for the specified language in SRT format.
  - `is_draft` boolean, required
  - `id` string, required: The unique hashed identifier of the time-coded transcript.
  - `media_id` string, required: The hashed ID of the media the captions belong to.
  - `version` integer, nullable, required: The active caption payload version, or null when no payload is active.
  - `segments` object[], nullable, required: Time-coded caption cues when `include=segments`; null otherwise.
    - `start_ms` integer, required: The segment's start offset from the beginning of the media, in milliseconds.
    - `end_ms` integer, required: The segment's end offset from the beginning of the media, in milliseconds.
    - `text` string, required: The segment's transcript text.
  - `diarized_segments` object[]: Transcript text split at speaker-turn boundaries when `include=diarized_segments`. The media-level speaker timeline is shared across language tracks.
    - `start_ms` integer, required: The speaker-turn segment's start offset from the beginning of the media, in milliseconds.
    - `end_ms` integer, required: The speaker-turn segment's end offset from the beginning of the media, in milliseconds.
    - `text` string, required: Transcript text attributed to this speaker turn.
    - `speaker` object, required
      - `media_speaker_id` string, nullable, required: The media-specific speaker assignment identifier, or null for an unidentified turn.
      - `speaker_profile_id` string, nullable, required: The reusable account speaker-profile identifier, or null for an unidentified turn.
      - `detected_speaker_id` string, nullable, required: The anonymous detected-speaker identifier that can be assigned, or null once resolved or when unknown.
      - `display_label` string, required: The resolved name, a display-only generic label, or `Unknown speaker`. Speakers are numbered by when they first appear in the transcript. Assigning a name does not renumber the other speakers, so generic labels may start at `Speaker 2` or skip numbers. Use `detected_speaker_id` as the identifier.
      - `name` string, nullable, required: The assigned speaker profile's name, or null for an unidentified turn.
  - `diarization_status` 'ready' | 'processing' | 'unavailable' | 'disabled': Speaker-data availability when `include=diarized_segments`. Reading a derivable media with no speaker data starts generating it and reports `processing`; read again shortly for `ready`. `disabled` means the account has speaker identification turned off; an account owner or manager can turn it on in Account Settings.
  - `diarization_derivable` boolean: Whether speaker data can be generated from the active default transcript when `include=diarized_segments`. When false, the media stays `unavailable`.
  - `speaker_data_version` integer, nullable: The concurrency version for speaker assignments when `include=diarized_segments`, or null when speaker data is unavailable.
  - `cursor` string, nullable: A cursor for stable pagination based on current `sort_by` order. You can pass this to `cursor[before]` or `cursor[after]` as a parameter to fetch the records before or after this record in the same sort order. This is only populated if records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`.

## Other responses

- `401`: Unauthorized, invalid or missing token
- `404`: Captions not found or media not found
- `500`: Internal server error

## Changes

- **2026-11-03** `b86cb2a7b420`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/wistia/apis/data-api/changes/medias/:mediaHashedId/captions/:languageCode/get.md)

---

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