How a request resolves
- Reel transcribed inlineAI Fallback Transcription runs while the request is held open for up to 45 seconds. No polling.200
- Still running after 45 sAnswers with a job to poll, or POSTs the result to your callback_url. Retrying is safe and hits the cache once it is done.202
Body parameters
A video URL or 11-character YouTube video ID. Accepts YouTube (watch, youtu.be, /shorts/), TikTok, and Instagram URLs, plus direct media file URLs (mp4/mp3/wav/…). Under the default mode, a video without captions is transcribed by AI Fallback Transcription (see mode).
Where the text may come from. "auto" (the default) reads the caption track, and when there is none transcribes the audio with AI Fallback Transcription, charged on delivery at 1 credit per started 5 minutes of audio, minimum 1 (a 20-minute video is 4; the 4-hour cap is 48). "captions" reads an existing caption track only and answers 422 no_captions when there is none: the one mode that never charges for audio. "audio" skips captions and always uses AI Fallback Transcription, at the same rate. A caption fetch is always 1 credit. AI Fallback Transcription on short media may finish inline after a wait of up to 45 seconds; longer work returns 202 with a job to poll or deliver by callback.
Which form the transcript comes back in. true (the default) returns the `segments` array, each with start, duration and text. false returns a single joined `text` string instead. On the single-transcript 200 exactly one of the two is present, never both, since segments already contain every word the joined text does; job results and batch entries carry both text and segments. The older strings "segment" and "none" mean the same two things and are still accepted.
Where to POST the finished transcript when a request escalates to AI Fallback Transcription, instead of polling the job. The delivery body is a trimmed envelope - {ok, status, job_id, data} on success, {ok, status, job_id, error} on failure - without the usage and request_id the poll URL adds. When a signing secret is configured on our side, the body is signed with HMAC-SHA256 over the exact bytes and sent as an X-TranscriptFetch-Signature: sha256=<hex> header so you can verify it came from us. Must be a public https URL on the standard port; the URL is checked again at delivery time, so an unreachable or private address still gets a 202 but never receives a delivery. The job stays pollable either way, so a missed delivery is never a lost transcript.
Legacy alias for "mode", still supported. true is identical to "mode": "audio" (always AI Fallback Transcription); omitted or false is "mode": "auto", the default, which still uses AI Fallback Transcription when a video has no captions. Send one or the other, not both. false never turned the fallback off, which is why the field was replaced: send "mode": "captions" for that.
{
"ok": true,
"request_id": "req_…",
"data": {
"kind": "transcript",
"video_id": "Dd1gQBsCWE8",
"url": "https://www.instagram.com/reel/Dd1gQBsCWE8/",
"platform": "instagram",
"title": "What happens when we detect an asteroid that could pose a threat to Earth?\n\nIn early 2025, NASA joined scientists around the world in tracking asteroid 2024 YR4, which had a small chance of impacting ",
"channel": null,
"duration": 38.6,
"language": "en",
"thumbnail_url": null,
"source": "audio",
"segments": [
{
"start": 0,
"duration": 3.44,
"text": "This asteroid 2024 YR4 might get interesting."
},
{
"start": 3.44,
"duration": 2.56,
"text": "There was a chance that it could impact Earth."
},
{
"start": 6,
"duration": 4.1,
"text": "The Atlas Survey, operated by the University of Hawaii,"
}
]
},
"usage": {
"credits_spent": 1,
"balance": 657,
"bytes": 2210
}
}Every Instagram endpoint
- POSTTranscriptFetch an Instagram Reel's transcript over REST: the request, every parameter, a real Reel response from AI Fallback Transcription with timestamped segments, and curl, Python and Node examples.
- POSTSearchSearch Instagram Reels by keyword over REST: the request, the platform parameter, a real Instagram response with play counts, and curl, Python and Node examples.
- POSTProfile ReelsList an Instagram account's Reels over REST without the Graph API: the request with a profile URL, since_video_id polling, a real response with play counts, and curl, Python and Node examples.
- POSTProfile MonitorWatch an Instagram account for new Reels over REST: create a monitor on a profile URL, receive each new Reel by signed webhook or from the events list, optionally with its transcript, with curl, Python and Node examples.
Same call, other platforms:YouTube Transcript APITikTok Transcript API
Frequently asked questions
Why does every Instagram response say source audio?
Instagram publishes no caption track that a logged-out client can read, so there is nothing to read first. AI Fallback Transcription transcribes the Reel's audio on the request instead, which is why the response's source is always audio and the language is the detected spoken language.
What does an Instagram transcript cost?
The AI Fallback Transcription rate: 1 credit per started 5 minutes of audio, minimum 1, charged only when the transcript is delivered. Most Reels are well under a minute, so one Reel is one credit. A failed request costs nothing.
Which Instagram URLs are accepted?
Reel URLs (instagram.com/reel/<code>/), video post URLs (instagram.com/p/<code>/), legacy IGTV /tv/ URLs and instagr.am short links. Stories, private accounts and login-walled posts are not reachable and fail with a clear error.
Do I have to poll a job for an Instagram Reel?
Almost never. Reels are short-form, so the request is held open and the finished transcript is returned inline. A transcription that outlasts the hold answers 202 with a job_id and poll_url, and callback_url delivers it to you instead.