> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/instagram/v2-instagram-media-media-transcript>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/instagram/v2-instagram-media-media-transcript.mdx>

---

# Instagram Transcript API

The words spoken in a post or Reel video, by shortcode, URL or numeric media id.

`GET /v2/instagram/media/{media}/transcript` takes a shortcode, a post, Reel or TV URL, or a numeric media id. Share links (`instagram.com/share/…`) are a 400: open the link and pass the post URL it opens. Read `data.lookupStatus` (`found` or `not_found`), then `data.transcript`. `meta.version` is `v2`.

A `found` answer has a `transcript` with `text`, the full spoken text, and `durationSec`, the video's length in seconds. A video with no speech is still `found`, with `transcript.text` set to `null`. `language` and `segments` are `null`: the lookup returns the text only, not its language or timings. `not_found` has a null `transcript`: the post doesn't exist, was deleted, belongs to a private account, or has no video (a photo post). Instagram gives the same answer for all of these, so they can't be told apart. A carousel with several videos returns their texts joined in order, one blank line apart.

A video that is too long to transcribe is a `400` with the error code `video_too_long_for_transcription`, which is not the same as a `found` answer with a null `text`. The caption and author come from `GET /v2/instagram/media/{media}`.

## Request

- **Endpoint:** `GET /v2/instagram/media/{media}/transcript`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by shortcode, URL or media id
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v2/instagram/media/media/transcript/get)
- **Platform page:** [/platforms/instagram](https://www.socialfetch.dev/platforms/instagram)

## FAQ

### How do I get an Instagram transcript with the v2 API?

Call `GET /v2/instagram/media/{media}/transcript` with your Social Fetch API key (`x-api-key`) and a shortcode, post or Reel URL, or numeric media id in the path. Read `data.lookupStatus` and `data.transcript.text`.

### How much does it cost?

Pricing is documented on the operation in the API registry (shown on this page). A completed lookup is billed whether the transcript is found, empty or not found. Confirm on every response with `meta.creditsCharged`, the billing source of truth.

### What does a video with no speech return?

`lookupStatus: found` with `transcript.text` set to `null`. It is billed like any completed lookup.

### Why are language and segments null?

The transcript is returned as plain text. The language and the timed parts aren't available, so both keys are `null` rather than guessed. Treat `null` as unknown.

### What happens if a video is too long to transcribe?

The API returns HTTP 400 with `video_too_long_for_transcription`. That is not the same as a 200 with a null `text`. Keep `error.requestId` if you need support on a rejected video.

### What does a photo post return?

`lookupStatus: not_found` with a null `transcript`. A post without a video can't be told apart from a missing or private one, so it reads as `not_found`.
