Instagram Transcript API
The words spoken in a post or Reel video, by shortcode, URL or numeric media id.
GET /v2/instagram/media/{media}/transcript1 credit Failed requests are free
About this endpoint
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}.
Instagram Transcript API 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.
Other Instagram endpoints
- ProfileGET /v2/instagram/profiles/{profile}
- Profile mediaGET /v2/instagram/profiles/{profile}/media
- Profile highlightsGET /v2/instagram/profiles/{profile}/highlights
- Profile storiesGET /v2/instagram/profiles/{profile}/stories
- Profile followingGET /v2/instagram/profiles/{profile}/following
- HighlightGET /v2/instagram/highlights/{highlightId}
- Profile engagementGET /v2/instagram/profiles/{profile}/engagement
- Search reelsGET /v2/instagram/reels/search