# Transcript

Schemas

Timed transcripts of public videos: the platform's caption track, or speech-to-text on the audio when there is none.

## Endpoints

9 endpoints return transcripts on Facebook Ad Library, Facebook, Instagram, Kick, Reddit, Rumble, TikTok, Twitch and YouTube.

- [GETFacebook Ad Transcript API`/v1/facebook/ad_transcript`](https://socialtap.dev/docs/reference/facebook/ad_transcript/index.md)
- [GETFacebook Video Transcript API`/v1/facebook/transcript`](https://socialtap.dev/docs/reference/facebook/transcript/index.md)
- [GETInstagram Reels Transcript API`/v1/instagram/transcript`](https://socialtap.dev/docs/reference/instagram/transcript/index.md)
- [GETKick Clip Transcript API`/v1/kick/transcript`](https://socialtap.dev/docs/reference/kick/transcript/index.md)
- [GETReddit Video Transcript API`/v1/reddit/transcript`](https://socialtap.dev/docs/reference/reddit/transcript/index.md)
- [GETRumble Transcript API`/v1/rumble/transcript`](https://socialtap.dev/docs/reference/rumble/transcript/index.md)
- [GETTikTok Transcript API`/v1/tiktok/transcript`](https://socialtap.dev/docs/reference/tiktok/transcript/index.md)
- [GETTwitch Clip Transcript API`/v1/twitch/transcript`](https://socialtap.dev/docs/reference/twitch/transcript/index.md)
- [GETYouTube Transcript API`/v1/youtube/transcript`](https://socialtap.dev/docs/reference/youtube/transcript/index.md)

## Schema

Every endpoint above returns this object as `data`. The standard [`meta`](https://socialtap.dev/docs/reference/index.md#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); of an ad library entry, its library ID (equals ad.id). |
| `url` | `string` (uri) | Canonical URL of the post (of an ad library entry, its library page). |
| `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. New values may be added.<br>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. |
| `platform_specific` | `object` | Fields only this platform has, under its ID (platform_specific.\<platform>); each null when unknown. |
| `platform_specific.reddit` | `object` or `null` | A Reddit transcript's own fields. |
| `platform_specific.reddit.video_id` | `string` or `null` | The video's ID on Reddit's video host (v.redd.it/\<video_id>); null when unknown. |
| `platform_specific.reddit.caption_url` | `string` (uri) or `null` | The WebVTT file of Reddit's caption track used (public, unsigned); null for speech-to-text. |
| `platform_specific.rumble` | `object` or `null` | A Rumble transcript's own fields. |
| `platform_specific.rumble.track_label` | `string` or `null` | Rumble's label of the caption track used ("English (auto)"); null for speech-to-text. |
| `platform_specific.rumble.caption_url` | `string` (uri) or `null` | The WebVTT file of the caption track used; null for speech-to-text. |
| `platform_specific.rumble.caption_tracks` | `object[]` | Every caption track Rumble offers for the video (WebVTT); \[\] when none. |
| `platform_specific.rumble.caption_tracks[].language` | `string` or `null` | Language code (en, es, …). |
| `platform_specific.rumble.caption_tracks[].label` | `string` or `null` | Rumble's label ("English (auto)"). |
| `platform_specific.rumble.caption_tracks[].url` | `string` (uri) or `null` | WebVTT file URL. |
| `platform_specific.rumble.caption_tracks[].is_auto_generated` | `boolean` or `null` | Generated by Rumble's speech recognition. |

## Item errors

Besides the [request-level errors](https://socialtap.dev/docs/errors/index.md) 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. On GET /v1/requests/{id}/response: the response was not kept (details.reason says why). | Check the link or ID. Do not retry. |
| `private_or_unavailable` | 403 | No | The item exists but is not public: it is private, age- or region-restricted, or needs a login to view. It shares 403 with forbidden (which is about the key), so branch on the code. | Only public items can be fetched. Do not retry. |
| `no_transcript` | 404 | No | The video or audio exists but has no transcript: no caption track and no speech to transcribe. | Do not retry. If the platform offers other languages, try one with lang. |

---

[HTML version](https://socialtap.dev/resources/transcript/) · [Docs index for AI agents](https://socialtap.dev/llms.txt) · [All docs in one file](https://socialtap.dev/llms-full.txt)
