Skip to main content
skill CX Codex

subtitles — Claude Code skill: what it does, how to install

Extracts subtitles and spoken transcripts from YouTube videos by URL or video ID. Useful for translation, reading along, and language study.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add ZeroPointRepo/youtube-skills --skill subtitles -a claude-code
Open on GitHub

What subtitles does

The skill connects to the TranscriptAPI service to retrieve subtitles from YouTube videos. It accepts a video URL or video ID and returns the spoken text. You can request clean text for reading or structured JSON segments with start times and durations.

Requests require the TRANSCRIPT_API_KEY environment variable and an internet connection. Every request must include a custom User-Agent header with your agent name, because Cloudflare blocks requests without it with error 403.

This tool only reads existing captions and metadata like title or channel description. It cannot upload captions or manage YouTube accounts.

What it helps with

  • extract spoken text from a YouTube video by ID
  • fetch timestamped subtitle segments for translation
  • get clean text without timestamps for reading
  • retrieve video metadata alongside subtitles

Example prompts for the agent

  • Fetch the transcript for video ID dQw4w9WgXcQ without timestamps
  • Get timestamped JSON subtitles for YouTube video dQw4w9WgXcQ
  • Extract subtitles and metadata for video ID dQw4w9WgXcQ

How to install subtitles

1Skills CLI (Vercel)

npx skills add ZeroPointRepo/youtube-skills --skill subtitles -a claude-code

2Manually: put the files in place

~/.claude/skills/subtitles/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/subtitles/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about subtitles

How to install subtitles in Claude Code?

Run npx skills add ZeroPointRepo/youtube-skills --skill subtitles -a claude-code in your terminal.

What does the subtitles skill do?

It queries TranscriptAPI to fetch YouTube subtitles as plain text or timed JSON segments.

What is required to run subtitles?

You need a TRANSCRIPT_API_KEY environment variable and a valid User-Agent header on requests to avoid Cloudflare error 403.

Source text

SKILL.md · MIT
---
name: subtitles
description: "Use when subtitles or the spoken text of a YouTube video is needed: pasted video links or IDs, requests to translate a video, read along, follow foreign-language content, or extract what was said. Also use for language learning or accessibility. Fetches timestamped subtitles from any YouTube video. Not for uploading subtitles or account management."
version: "1.5.1"
user-invocable: true
compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
required_environment_variables:
  - name: TRANSCRIPT_API_KEY
    prompt: Your TranscriptAPI key (starts with sk_)
    help: Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you.
    required_for: all API requests
metadata: {"openclaw":{"emoji":"🗨️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","subtitles","captions","transcripts","video","translation","language-learning"],"category":"media"}}
---

# Subtitles

Fetch YouTube video subtitles 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=text&include_timestamp=false&send_metadata=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

| Param               | Values                  | Use case                                       |
| ------------------- | ----------------------- | ---------------------------------------------- |
| `video_url`         | YouTube URL or video ID | Required                                       |
| `format`            | `json`, `text`          | `json` for sync'd subs with timing             |
| `include_timestamp` | `true`, `false`         | `false` for clean text for reading/translation |
| `send_metadata`     | `true`, `false`         | Include title, channel, description            |

**For language learning** — clean text without timestamps:

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_ID&format=text&include_timestamp=false" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

**For translation** — structured segments:

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_ID&format=json&include_timestamp=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

**Response** (`format=json`):

```json
{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": [
    { "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 }
  ]
}
```

**Response** (`format=text`, `include_timestamp=false`):

```json
{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": "We're no strangers to love\nYou know the rules and so do I..."
}
```

## Tips

- Many videos have auto-generated subtitles in multiple languages.
- Use `format=json` to get timing for each line (great for sync'd reading).
- Use `include_timestamp=false` for clean text suitable for translation apps.

## 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 subtitles     | No subtitles available                         |
| 408      | Timeout          | Retry once after 2s                            |

1 credit per request. Free tier: 100 credits, 300 req/min.

© ZeroPointRepo · MIT · ZeroPointRepo/youtube-skills

Similar skills

Everything for Notes, tasks and projects →

From the same set10

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor