API reference

Create a transcript

POST /v1/transcripts. Parameters, response fields, and the rules the endpoint applies.

POST https://api.instagramtotranscript.com/v1/transcripts

Takes one public Instagram link. Returns the speech as text with timings.

Request body

Field Type Required Notes
url string yes A public Reel, video post or IGTV link
language string no Two-letter hint, such as es. Detected when left out
formats string[] no Subset of text, srt, vtt, segments. All by default

The link must point at a single post. It has /reel/ or /p/ in the path. A profile link is rejected with INVALID_URL, because there is no one video to read.

Leave language alone unless you already know what you are sending. Detection is reliable and a wrong hint makes the output worse.

formats only trims the response. It does not change the work done or what you are charged.

Response

Field Type Notes
ok boolean true on success
source string Always instagram today
title string The caption, shortened. Missing when the post has none
author string The account handle, with the @
durationSec number Length of the video in seconds
language string Detected language as a two-letter code
transcript string The whole thing as one block
timestamped string Same text with [mm:ss] in front of each line
srt string A complete SRT file
vtt string A complete WebVTT file
segments array Lines with start, end and text

start and end are seconds from the beginning, as floats.

Timing

A Reel under a minute usually comes back in four to eight seconds. Longer video scales roughly with length.

Set a client timeout of at least 120 seconds. The work is real and it is not instant.

Limits

Limit Value
Video length 3 minutes on the free tool, higher on a key
Request body 100 KB
Requests Set per key

A video over the cap returns TOO_LONG before any transcription happens, so it costs you nothing.

What happens to the audio

It is downloaded to a temporary folder, converted, sent to one speech provider, and deleted when the request ends. No video and no transcript is kept on our side.

If you want the transcript tomorrow, store it when you get it.

Example

curl https://api.instagramtotranscript.com/v1/transcripts \
  -H "Authorization: Bearer $ITT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.instagram.com/reel/CxAmPl3C0d3/",
    "formats": ["text", "srt"]
  }'

Running a batch

There is no batch endpoint. Send them one at a time and keep a small amount of concurrency, around three to five requests in flight.

Handle 429 by reading retry-after and sleeping. Handle PRIVATE by skipping that link for good, because it will never succeed.