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.