Transcript API
Timed transcript of a public video: the platform's caption track, or speech-to-text on its audio when there is none.
Endpoints
4 endpoints return transcripts on Facebook, Instagram, TikTok and YouTube.
Facebook · Transcript Beta
Facebook Video Transcript API
Facebook video transcript
From 1 credit ·
GET /v1/facebook/transcript
Instagram · Transcript Beta
Instagram Reels Transcript API
Instagram reel / video transcript
From 1 credit · GET /v1/instagram/transcript
TikTok · Transcript Beta
TikTok Transcript API
TikTok video transcript
From 1 credit · GET /v1/tiktok/transcript
YouTube · Transcript Beta
YouTube Transcript API
YouTube video transcript
From 1 credit · GET /v1/youtube/transcript
Schema
Every endpoint above returns this object as data. The standard meta comes with every response.
| Field | Type | Description |
|---|---|---|
platform | string | Platform the media is hosted on. |
id | string | Platform-native ID of the post (equals post.id). |
url | string (uri) | Canonical URL of the post. |
language | string or null | BCP-47 language of the returned transcript; null when unknown. |
source | string | captions = platform caption track; asr = speech-to-text on the audio. One of captions, asr |
is_auto_generated | boolean | True when the track was machine-generated (platform auto-captions or ASR). |
available_languages | string[] | BCP-47 caption languages the platform offers for this post; [] if none or not listed. |
duration_ms | integer or null | Media duration in milliseconds; null when unknown. |
segments | object[] | Timed cues in order; never empty on success. |
segments[].start_ms | integer | Start time in milliseconds from the beginning of the media. |
segments[].end_ms | integer | End time in milliseconds from the beginning of the media. |
segments[].text | string | Cue text, whitespace-normalized. |
text | string | Full transcript: segment texts joined with single spaces. |
{
"data": {
"available_languages": [
"en-US"
],
"duration_ms": 59861,
"id": "1803909017420449",
"is_auto_generated": false,
"language": "en-US",
"platform": "facebook",
"segments": [
{
"end_ms": 4000,
"start_ms": 33,
"text": "But the standard that we should continuously aspire to exceed,"
},
{
"end_ms": 7166,
"start_ms": 4000,
"text": "which is why we are bringing that intensity, that discipline, that"
},
{
"end_ms": 11400,
"start_ms": 7166,
"text": "engineering ownership back to NASA, because great nations do not remain great"
}
],
"source": "captions",
"text": "But the standard that we should continuously aspire to exceed, which is why we are bringing that intensity, that discipline, that engineering ownership back to NASA, because great nations do not remain great by being caretakers of history, but by continuously making history. We h…",
"url": "https://www.facebook.com/reel/1803909017420449/"
},
"meta": {
"request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
"platform": "facebook",
"source": "captions",
"is_cached": false,
"credits_charged": 1,
"latency_ms": 1517,
"fetched_at": "2026-10-25T12:00:00Z"
}
}Long arrays and strings are shortened for display.
Item errors
Besides the request-level errors every endpoint can return, transcript endpoints return:
| Code | HTTP | Retry | Meaning | What to do |
|---|---|---|---|---|
not_found | 404 | No | The item does not exist or was deleted. | Check the URL or ID; do not retry. |
private_or_unavailable | 403 | No | The item exists but is private, age- or region-gated, or requires a login to view. | Only public items can be fetched; do not retry. |
no_transcript | 404 | No | The media exists but has no transcript: no caption track and no speech to transcribe. | Do not retry; try another language with lang if the platform offers one. |