Instagram API

Instagram Reel transcript API

Transcribe any public Instagram reel or video post: the full speech transcript, speaker labels, and word-level timestamps, from a reel, /p/, or /tv/ URL or an Instagram CDN media URL you already hold. A video post is transcribed exactly like a reel. A photo post comes back found with its record and an empty transcript, charged the request price only. Transcription runs on MAI-Transcribe-2, chosen for its accuracy and its speaker labels. Turn on hostVideo to also get the MP4 on a hosted link that plays without an Instagram session. If you only want the text, instagram.media_transcript is the cheaper transcript-only option; if you only want the file, instagram.post is where you go.

$5.94/1k audio minutes, pay per request, no subscription.

What the API returneditems[0]
{
"id": "3021884756209174421",
"url": "https://www.instagram.com/reel/CfY6jCIgH-P/",
"text": "So this is the mistake almost everyone makes when they roast coffee at home. You pull it too early because you're scared of burning it. Let it go thirty more seconds and listen for the second crack.",
"language": "en",
"ownerUsername": "roastlab.co",
"likeCount": 18420,
"durationSeconds": 34.2,
"hostedUrl": "https://cdn.getanyapi.com/hosted/instagram/CfY6jCIgH-P.mp4",
... 7 more fields
}
Uptime
98.97%
30d · 10,692 calls
Requests
10,699
30d · weekly, last 12 wks
Response
11.4s
median · 30d

Pricing

Instagram Reel transcript API pricing

You pay
$59.38
$5.94/1k audio minutes, only for what you use. No monthly plan.
One request costs at most $0.095 (16 audio minutes).
The $0.10 starting balance covers at least 1 requests.

Try it

Get Instagram reel transcript in one request

Open in
Get a free key
Sample response
Free runs return only the first 3 results. Fund a key to get the full response.

This sample shows 16 of 27 fields. See every field

{
  "found": true,
  "data": {
    "items": [
      {
        "id": "3021884756209174421",
        "url": "https://www.instagram.com/reel/CfY6jCIgH-P/",
        "text": "So this is the mistake almost everyone makes when they roast coffee at home. You pull it too early because you're scared of burning it. Let it go thirty more seconds and listen for the second crack.",
        "language": "en",
        "ownerUsername": "roastlab.co",
        "likeCount": 18420,
        "durationSeconds": 34.2,
        "hostedUrl": "https://cdn.getanyapi.com/hosted/instagram/CfY6jCIgH-P.mp4",
        "segments": [
          {
            "text": "So this is the mistake almost everyone makes when they roast coffee at home.",
            "start": 0,
            "end": 4.1,
            "speaker": "0"
          },
          {
            "text": "You pull it too early because you're scared of burning it.",
            "start": 4.3,
            "end": 7.8,
            "speaker": "0"
          },
          {
            "text": "Let it go thirty more seconds and listen for the second crack.",
            "start": 8,
            "end": 12.4,
            "speaker": "0"
          }
        ]
      }
    ]
  }
}

Full parameter and response reference - every field, type, and example for this endpoint.

Reference

One request, one response shape.

Every field you send and every field you get back, each with a real example.

Last verified 2026-11-01 · uptime and latency measured over 30d

Request body

JSON, posted to this endpoint.

  • urlstring

    https://www.instagram.com/reel/CfY6jCIgH-P/

    The URL of a public Instagram reel or video post (e.g. https://www.instagram.com/reel/C8yKXdRxKqK/), or an Instagram CDN media URL you already hold.

  • hostVideoboolean

    true

    Set true to also get the reel's MP4 on a hosted link you can play without an Instagram session. Charged as an extra on top of the transcript (e.g. true). A photo post has no file to host, so a request that sets this on one is refused with no charge; send it without hostVideo to get the post record instead.

  • wordTimestampsboolean

    false

    Set true to include a precise timestamp for every word in the transcript (e.g. true).

You send. A small JSON body. The values shown are examples to replace with your own.

Response

JSON, one example value per field.

each itemdata.items[]

Record for the requested reel (one item), with the full transcript text, timed segments, source video metadata, and the hosted video link when hostVideo was asked for. Populated whenever the provider has data for the entity.

  • bytesinteger

    Size of the hosted MP4 in bytes. Present only when hostVideo was true.

  • durationSecondsnumber

    34.2

    Video duration in seconds. Absent when there is no transcript, which is what measures it.

  • expiresUtcnumber

    UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. After this moment the hosted MP4 is deleted. Present only when hostVideo was true.

  • hostedUrlstring

    https://cdn.getanyapi.com/hosted/instagram/CfY6jCIgH-P.mp4

    A direct link to the downloaded MP4, hosted by AnyAPI and playable without an Instagram session. Present only when hostVideo was true.

  • idstring

    3021884756209174421

    The reel's numeric Instagram media ID, as a string. Empty when the request supplied a CDN media URL, which carries no post record. Populated whenever the provider has data for the entity.

  • languagestring

    en

    Detected spoken language (ISO 639-1 code, e.g. "en"). Absent when there is no transcript.

  • likeCountinteger

    18420

    Number of likes on the reel. Absent when the lane that served the lookup does not carry a like count.

  • mediaTypestring

    What kind of media this is, as Instagram labels it (for example a video or an image post). On a photo post this is how you tell that the empty transcript is the answer rather than silence.

  • ownerUsernamestring

    roastlab.co

    Username of the reel's owner, without the @ prefix. Empty when the request supplied a CDN media URL.

  • shortcodestring

    The reel's short code, the part of its instagram.com URL after /reel/. Empty when the request supplied a CDN media URL.

  • source"audio_asr" | "no_audio" | "transcript_unavailable"

    Why the transcript reads the way it does. "audio_asr" means the words come from speech recognition over the reel's audio; a reel with only music in it transcribes to an empty text this way, and its audio time is charged. "no_audio" means there was nothing to listen to: the video has no audio track, or the post is a photo with no video. The transcript is empty because that is the answer, and only the request price is charged, with no audio time. "transcript_unavailable" means recognition did not complete for this reel, so the transcript is empty for that reason rather than because the reel has no speech in it; the rest of the record is still what we resolved, and no audio time is charged.

  • textstring

    So this is the mistake almost everyone makes when they roast coffee at home. You pull it too early because you're scared of burning it. Let it go thirty more seconds and listen for the second crack.

    The full speech transcript. Empty when the reel has no detectable spoken audio, or when the post is a photo with no video to transcribe. Populated whenever the provider has data for the entity.

  • thumbnailUrlstring

    A link to the reel's cover image on Instagram. This link is signed by Instagram and stops working after a short time.

  • urlstring

    https://www.instagram.com/reel/CfY6jCIgH-P/

    The reel URL the request asked for, returned as sent. Populated whenever the provider has data for the entity.

each segmentdata.items[].segments[]

Time-aligned transcript segments in playback order, one per sentence, each with its text, speaker label, and start/end offsets in seconds. A segment starts when its first word is spoken and ends when its last one finishes. Empty when the reel has no detectable spoken audio.

  • endnumber

    4.1

    Segment end offset in seconds from the start of the video.

  • speakerstring

    0

    Which speaker said this segment, as a stable label within this transcript (e.g. "0", "1").

  • startnumber

    0

    Segment start offset in seconds from the start of the video.

  • textstring

    So this is the mistake almost everyone makes when they roast coffee at home.

    The segment's transcribed text.

each worddata.items[].segments[].words[]

Every word in the segment with its own timing. Present only when wordTimestamps was true.

  • endnumber

    Word end offset in seconds from the start of the video.

  • startnumber

    Word start offset in seconds from the start of the video.

  • textstring

    The word as spoken.

top level
  • foundboolean

    true

    Whether the post was found. A reel or video post is found and transcribed. A photo post is found too: its record comes back with an empty transcript and is charged the request price only, with no audio minutes. A post that does not exist is not found and is free.

  • reason"not_found"

    Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.

You get back. Named, typed fields in the same shape whichever source answers.

FAQ

About the Instagram Reel transcript API

The AnyAPI Instagram Reel transcript API returns Instagram reel transcript data as normalized JSON from one POST call to /v1/run/instagram.reel_transcript. Transcribe any public Instagram reel or video post: the full speech transcript, speaker labels, and word-level timestamps, from a reel, /p/, or /tv/ URL or an Instagram CDN media URL you already hold. A video post is transcribed exactly like a reel. A photo post comes back found with its record and an empty transcript, charged the request price only. Transcription runs on MAI-Transcribe-2, chosen for its accuracy and its speaker labels. Turn on hostVideo to also get the MP4 on a hosted link that plays without an Instagram session. If you only want the text, instagram.media_transcript is the cheaper transcript-only option; if you only want the file, instagram.post is where you go. AnyAPI returns one normalized schema whichever source serves it. It costs $5.94 per 1,000 audio minutes, and never more than $0.095 for a single request, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 99.0% of Instagram reel transcript calls through AnyAPI succeeded, with a median response time of 11.4 seconds across 10,692 measured calls.

It costs $5.94 per 1,000 audio minutes, and never more than $0.095 for a single request, in US dollars with no subscription and no monthly minimum. You fund one USD wallet and each call draws it down. Some failed wallet-funded requests incur processing charges that we pass through at cost, with no markup; the error response shows the amount charged.

Transcribe any public Instagram reel or video post: the full speech transcript, speaker labels, and word-level timestamps, from a reel, /p/, or /tv/ URL or an Instagram CDN media URL you already hold. A video post is transcribed exactly like a reel. A photo post comes back found with its record and an empty transcript, charged the request price only. Transcription runs on MAI-Transcribe-2, chosen for its accuracy and its speaker labels. Turn on hostVideo to also get the MP4 on a hosted link that plays without an Instagram session. If you only want the text, instagram.media_transcript is the cheaper transcript-only option; if you only want the file, instagram.post is where you go. The response is normalized JSON with the same envelope every AnyAPI endpoint returns, so parsing a second endpoint is a change of URL and nothing else.

Over the last 30 days, 99.0% of Instagram reel transcript calls through AnyAPI succeeded, with a median response time of 11.4 seconds across 10,692 measured calls. These are AnyAPI's own measurements of traffic through the gateway, recomputed continuously, not a published service-level target.

Yes. A new AnyAPI account starts with $0.10 of free balance and no card required, which covers at least 1 Instagram Reel transcript calls at up to $0.095 each.

Send a POST request to https://api.getanyapi.com/v1/run/instagram.reel_transcript with your AnyAPI key in an "Authorization: Bearer" header and the input as a JSON body. The same key and the same wallet work on every AnyAPI endpoint.

No. You add US dollars to one prepaid AnyAPI balance and each request draws it down. There is no monthly plan and no minimum, and the same balance pays for every AnyAPI endpoint.

Yes. Install @getanyapi/sdk from npm for TypeScript or getanyapi from pip for Python. Both call every AnyAPI endpoint with the same key, and any HTTP client works too.

Yes. An agent can connect to the AnyAPI MCP server at https://api.getanyapi.com/mcp, or create its own free-trial key with one unauthenticated POST to https://api.getanyapi.com/agent/signup and call this endpoint over HTTP.