Skip to main content
skill CX Codex

youtube-full · zeropointrepo — Claude Code skill: what it does, how to install

Enables agents to search YouTube, retrieve timestamped video transcripts, and inspect channel metadata via TranscriptAPI. Built for developer assistants handling video research.

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

What youtube-full does

The skill equips coding agents with direct access to YouTube transcripts and channel feeds through TranscriptAPI. It extracts video captions with timestamps, looks up creator handles, and retrieves view counts. This comes in handy when tutorials or conference talks contain newer details than static web pages.

You need an API key stored in TRANSCRIPT_API_KEY. Every curl request requires two specific headers: Authorization with your bearer token and User-Agent with your agent name. Omitting the agent header causes Cloudflare to block the request with a 403 response.

Handle lookups and the latest 15 videos from a channel are free. Transcript extraction and search consume 1 credit per page. The skill is strictly for research and data retrieval, so it does not support video uploads or YouTube account management.

What it helps with

  • fetch video transcripts with timestamps in text or JSON format
  • search YouTube videos by date, duration, and feature filters
  • resolve channel handles and retrieve recent uploads
  • extract video metadata including views, likes, and tags

Example prompts for the agent

  • Get the transcript for this YouTube URL with timestamps included
  • Search for recent videos about Rust async runtime published this month
  • List the latest uploads from the @TED channel and show view counts

How to install youtube-full

1Skills CLI (Vercel)

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

2Manually: put the files in place

~/.claude/skills/youtube-full/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/youtube-full/

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

Questions about youtube-full

How to install youtube-full in Claude Code?

Run npx skills add ZeroPointRepo/youtube-skills --skill youtube-full -a claude-code. Next, configure the TRANSCRIPT_API_KEY environment variable.

What does the youtube-full skill do?

It gives your assistant endpoints to fetch YouTube transcripts, search channels and playlists, and inspect video metrics.

Why does TranscriptAPI return a 403 error?

Cloudflare blocks calls that lack a custom User-Agent header. Always pass your agent name, such as ClaudeCode/1.0, along with the authorization token.

Source text

SKILL.md · MIT
---
name: youtube-full
description: "Use when YouTube is or could be relevant — even if not mentioned: pasted video/channel/playlist links, video IDs, @handles, creator lookups, video summaries, quotes, translations, topic research, tutorials, talks, lectures, expert discussions, product reviews, how-to guides, new product announcements, first looks, or anything where video content is fresher or richer than text search. Covers transcripts, video/channel search, channel browsing, playlists, and within-channel search. Not for uploads, account management, or written-source-only research."
version: "1.6.2"
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","transcripts","video","search","channels","playlists","captions"],"category":"media"}}
---

# YouTube Full

Complete YouTube toolkit via [TranscriptAPI.com](https://transcriptapi.com). Everything in one skill.

## 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.

## API Reference

Full OpenAPI spec: [transcriptapi.com/openapi.json](https://transcriptapi.com/openapi.json) — consult this for the latest parameters and schemas.

## Transcript — 1 credit

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_URL&format=text&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 11-char video ID |
| `format`            | no       | `json`  | `json`, `text`                  |
| `include_timestamp` | no       | `true`  | `true`, `false`                 |
| `send_metadata`     | no       | `false` | `true`, `false`                 |

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

```json
{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": [{ "text": "...", "start": 18.0, "duration": 3.5 }],
  "metadata": { "title": "...", "author_name": "...", "author_url": "..." }
}
```

## Video Info & Metadata

```bash
# Free — languages available for the transcript endpoint
curl -s "https://transcriptapi.com/api/v2/youtube/info?video_url=VIDEO_URL" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

# 1 credit — rich metadata (views, likes, description, duration, tags)
curl -s "https://transcriptapi.com/api/v2/youtube/video/metadata\
?video_url=VIDEO_URL&include=details,related" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

`include` on `video/metadata` accepts `details` and/or `related`. Naming: `/video/metadata` was previously `/video/info` — the old path still works but is deprecated.

## Search — 1 credit/page

```bash
# Videos
curl -s "https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

# Channels, playlists, or movies
curl -s "https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=channel&limit=10" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

| Param   | Required | Default | Validation                                     |
| ------- | -------- | ------- | ----------------------------------------------- |
| `q`     | yes      | —       | 1-200 chars                                      |
| `type`  | no       | `video` | `video`, `channel`, `playlist`, `movie`         |
| `sort`  | no       | `relevance` | `relevance`, `views` (first page only)      |
| `upload_date` | no | —       | `hour`, `today`, `week`, `month`, `year` (videos, first page) |
| `duration` | no    | —       | `short`, `medium`, `long` (videos, first page)  |
| `features` | no    | —       | e.g. `hd,subtitles,cc` (first page)             |
| `limit` | no       | `20`    | 1-50                                             |

## Channels

All channel endpoints accept `channel` — an `@handle`, channel URL, or `UC...` channel ID. No need to resolve first.

### Resolve handle — FREE

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

Response: `{"channel_id": "UC...", "resolved_from": "@TED"}`

### Latest 15 videos — FREE

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

Returns exact `viewCount` and ISO `published` timestamps.

### Channel feed (videos/shorts/streams) — 1 credit/page

```bash
# First page (100 items, tab defaults to "videos")
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

# Most-viewed first (channel Videos tab, ~30 items)
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

# Next pages (repeat the same tab AND sort)
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN&sort=popular" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

Provide exactly one of `channel` or `continuation`. `tab` is `videos` (default), `shorts`, or `streams`. Response includes `continuation_token` and `has_more`.

**Sorting.** Add sort=latest, popular, or oldest to channel/videos to get a channel's videos in the order you want, for example its most-popular uploads first. A sorted page returns about 30 videos (an unsorted page returns about 100), and every page costs the same 1 credit.

When paging, send the same sort on each request.

**Item fields.** Every item carries `members_only`, `true` only when YouTube badges it "Members only", and those items have no `viewCountText`. `tab=streams` items carry `lengthText` and `publishedTimeText` (for example `Streamed 2 years ago`); `tab=shorts` returns `null` for both, because YouTube's Shorts grid publishes neither. On the channel-tab feeds (`tab=videos` with `sort`, `tab=shorts`, `tab=streams`) `channelId`, `channelTitle`, `channelHandle` and `index` are `null`.

### Search within channel — 1 credit

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\
?channel=@TED&q=QUERY&limit=30" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

### Channel profile — 1 credit

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

Returns title, handle, verified flag, subscriber/video counts, description, tags, thumbnails, banners, and `availableTabs`.

### Channel playlists — 1 credit/page

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

Returns each playlist's `playlistId`, `title`, `url`, `videoCountText` — feed a `playlistId` into the Playlists endpoint below.

### Channel community posts — 1 credit/page

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

### Channel curated sections — 1 credit

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

`tab` is `featured` (default, Home page), `podcasts`, or `releases`.

## Playlists — 1 credit/page

Accepts `playlist` — a YouTube playlist URL or playlist ID.

```bash
# First page
curl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_ID" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

# Next pages
curl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?continuation=TOKEN" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

Valid ID prefixes: `PL`, `UU`, `LL`, `FL`, `OL`. Response includes `playlist_info`, `results`, `continuation_token`, `has_more`.

## Credit Costs

| Endpoint          | Cost     |
| ----------------- | -------- |
| transcript        | 1        |
| info              | **free** |
| video/metadata    | 1        |
| search            | 1/page   |
| channel/resolve   | **free** |
| channel/info      | 1        |
| channel/latest    | **free** |
| channel/videos    | 1/page   |
| channel/search    | 1        |
| channel/playlists | 1/page   |
| channel/posts     | 1/page   |
| channel/sections  | 1        |
| playlist/videos   | 1/page   |

## Validation Rules

| Field      | Rule                                                    |
| ---------- | ------------------------------------------------------- |
| `channel`  | `@handle`, channel URL, or `UC...` ID                   |
| `playlist` | Playlist URL or ID (`PL`/`UU`/`LL`/`FL`/`OL` prefix)   |
| `q`        | 1-200 chars                                             |
| `type` (search) | `video` (default), `channel`, `playlist`, `movie`  |
| `tab` (channel/videos) | `videos` (default), `shorts`, `streams`     |
| `sort` (channel/videos) | `latest`, `popular`, `oldest` (omit for the uploads feed) |
| `tab` (channel/sections) | `featured` (default), `podcasts`, `releases` |
| `include` (video/metadata) | `details`, `related` (comma-separated)   |
| `limit`    | 1-50                                                    |

## 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      | Not found        | Resource doesn't exist or no captions          |
| 408      | Timeout          | Retry once after 2s                            |
| 422      | Validation error | Check param format                             |
| 429      | Rate limited     | Wait, respect Retry-After                      |

## Typical Workflows

**Research workflow:** search → pick videos → fetch transcripts

```bash
# 1. Search
curl -s "https://transcriptapi.com/api/v2/youtube/search\
?q=machine+learning+explained&limit=5" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
# 2. Transcript
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

**Channel monitoring:** latest (free) → transcript

```bash
# 1. Latest uploads (free — pass @handle directly)
curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
# 2. Transcript of latest
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

Free tier: 100 credits, 300 req/min. Starter ($5/mo): 1,000 credits.

© ZeroPointRepo · MIT · ZeroPointRepo/youtube-skills

Similar skills

All skills for Agent setup: memory, context, orchestration →

youtube-full by other authors comes first.

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