API reference
Create a transcript
POST /v1/transcripts. Parameters, response fields, and the rules the endpoint applies.
POST https://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. A public post we have already read comes back at once. 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. The words of a public Reel are kept for 30 days so a later call for the same post does not run the model again.
If you want the transcript tomorrow on your side, store it when you get it.
Example
curl https://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.