--- id: ZeroPointRepo/youtube-skills/captions version: "99b124e3" license: MIT install: manual updated: 2026-05-20 --- # captions — Fetch closed captions and transcripts from YouTube videos with precise timing information. Choose between structured JSON for sync'd playback and accessibility tools, or plain text for easy reading. Supports both manual captions and auto-generated transcripts. Publisher: ZeroPointRepo · Stars: 388 · Updated: 2026-05-20 Install (manual): `git clone https://github.com/ZeroPointRepo/youtube-skills` ## SKILL.md # Captions Extract closed captions from YouTube videos via [TranscriptAPI.com](https://transcriptapi.com). ## Setup If `$TRANSCRIPT_API_KEY` is not set, read [references/auth-setup.md](references/auth-setup.md) and follow the instructions there to get and store the key. ## Required Headers Every request needs two headers: - **Authorization:** `Bearer $TRANSCRIPT_API_KEY` - **User-Agent:** your agent's name and version if known (e.g. `HermesAgent/0.11.0`, `ClaudeCode/1.0`). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request. ## GET /api/v2/youtube/transcript ```bash curl -s "https://transcriptapi.com/api/v2/youtube/transcript\ ?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true" \ -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \ -H "User-Agent: YourAgent/1.0" ``` | Param | Required | Default | Values | | ------------------- | -------- | ------- | ----------------------------------- | | `video_url` | yes | — | YouTube URL or video ID | | `format` | no | `json` | `json` (structured), `text` (plain) | | `include_timestamp` | no | `true` | `true`, `false` | | `send_metadata` | no | `false` | `true`, `false` | **Response** (`format=json` — best for accessibility/timing): ```json { "video_id": "dQw4w9WgXcQ", "language": "en", "transcript": [ { "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 }, { "text": "You know the rules and so do I", "start": 21.5, "duration": 2.8 } ], "metadata": { "title": "...", "author_name": "...", "thumbnail_url": "..." } } ``` - `start`: seconds from video start - `duration`: how long caption is displayed **Response** (`format=text` — readable): ```json { "video_id": "dQw4w9WgXcQ", "language": "en", "transcript": "[00:00:18] We're no strangers to love\n[00:00:21] You know the rules..." } ``` ## Tips - Use `format=json` for sync'd captions (accessibility tools, timing analysis). - Use `format=text` with `include_timestamp=false` for clean reading. - Auto-generated captions are available for most videos; manual CC is higher quality. ## Errors | Code | Meaning | Action | | -------- | ---------------- | ---------------------------------------------- | | 401 | Bad API key | Check key | | 402 | No credits | transcriptapi.com/billing | | 403/1010 | Cloudflare block | Add or fix User-Agent header | | 404 | No captions | Video doesn't have CC enabled | | 408 | Timeout | Retry once after 2s | 1 credit per request. Free tier: 100 credits, 300 req/min. [View on SkillFed](https://skillfed.io/ZeroPointRepo/youtube-skills/captions) · [View on GitHub](https://github.com/ZeroPointRepo/youtube-skills)