关于 transcriptapi
transcriptapi 是供 Agent 调用 TranscriptAPI.com 的 YouTube 数据技能,涵盖字幕、搜索、频道和播放列表数据,适用于视频研究流程。
主要功能
- 01获取带时间戳或纯文本字幕
- 02搜索视频和频道
- 03解析频道 ID
- 04浏览并搜索频道视频
- 05获取播放列表视频
适用场景
- 01根据字幕总结 YouTube 视频
- 02查找特定主题的视频
- 03查看频道最新上传内容
- 04浏览播放列表中的视频
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ zeropointrepo/ youtube-skills --skill transcriptapi安装后在 Claude Code 中输入/transcriptapi确认已加载。
附带文件references/auth-setup.mdreferences/curl-examples.md
详细介绍
TranscriptAPI
通过 TranscriptAPI.com 获取完整的 YouTube 数据工具包。字幕、搜索、频道、播放列表——只需一个 API 密钥。
设置
如果未设置 $TRANSCRIPT_API_KEY,请阅读 references/auth-setup.md,并按照其中的说明获取和保存密钥。
必需的请求头
每个请求都需要两个请求头:
- Authorization:
Bearer $TRANSCRIPT_API_KEY - User-Agent: 如果已知,请填写 Agent 的名称和版本(例如
HermesAgent/0.11.0、ClaudeCode/1.0)。版本可选,只填写 Agent 名称也可以。请勿省略此请求头或使用默认值,否则 Cloudflare 会返回 403(错误代码 1010)并阻止请求。
API 参考
完整的 OpenAPI 规范:transcriptapi.com/openapi.json——请参阅此处以获取最新参数和架构。
身份验证
所有请求均需添加:-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
端点
频道端点接受 channel,可以是 @handle、频道 URL 或 UC... ID。无需预先解析。播放列表端点接受 playlist,可以是播放列表 URL 或 ID。
GET /api/v2/youtube/transcript — 1 个额度
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=text&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 参数 | 必需 | 默认值 | 验证 |
|---|---|---|---|
video_url | 是 | — | YouTube URL 或 11 位视频 ID |
format | 否 | json | json 或 text |
include_timestamp | 否 | true | true 或 false |
send_metadata | 否 | false | true 或 false |
接受:https://youtube.com/watch?v=ID、https://youtu.be/ID、youtube.com/shorts/ID 或纯 ID。
响应(format=json):
{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"transcript": [
{ "text": "We're no strangers...", "start": 18.0, "duration": 3.5 }
],
"metadata": { "title": "...", "author_name": "...", "author_url": "..." }
}
GET /api/v2/youtube/search — 1 个额度
GET https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 参数 | 必需 | 默认值 | 验证 |
|---|---|---|---|
q | 是 | — | 1–200 个字符(去除首尾空格) |
type | 否 | video | video 或 channel |
limit | 否 | 20 | 1–50 |
响应(type=video):
{
"results": [
{
"type": "video",
"videoId": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelTitle": "Rick Astley",
"channelHandle": "@RickAstley",
"channelVerified": true,
"lengthText": "3:33",
"viewCountText": "1.5B views",
"publishedTimeText": "14 years ago",
"hasCaptions": true,
"thumbnails": [{ "url": "...", "width": 120, "height": 90 }]
}
],
"result_count": 20
}
响应(type=channel):
{
"results": [
{
"type": "channel",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"title": "Rick Astley",
"handle": "@RickAstley",
"subscriberCount": "4.2M subscribers",
"verified": true,
"rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC..."
}
],
"result_count": 5
}
GET /api/v2/youtube/channel/resolve — 免费(0 个额度)
GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 参数 | 必需 | 验证 |
|---|---|---|
input | 是 | 1–200 个字符——@handle、URL 或 UC... ID |
响应:
{ "channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED" }
如果输入已是有效的 UC[a-zA-Z0-9_-]{22} ID,则会立即返回,不进行查询。
GET /api/v2/youtube/channel/videos — 每页 1 个 credit
# First page (100 videos)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
# Most-viewed first (channel Videos tab, ~30 videos)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
# Next pages (repeat the same sort)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN&sort=popular
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 参数 | 必填 | 验证 |
|---|---|---|
channel | 有条件必填 | @handle、频道 URL 或 UC... ID |
tab | 否 | videos(默认)、shorts 或 streams |
sort | 否 | latest、popular 或 oldest(省略则使用上传内容信息流) |
continuation | 有条件必填 | 非空字符串(后续页面) |
channel 和 continuation 必须且只能提供其中一个。
排序。 在 channel/videos 中添加 sort=latest、popular 或 oldest,即可按所需顺序获取频道视频,例如将最热门的上传视频排在前面。排序后的页面约返回 30 个视频(未排序的页面约返回 100 个),每页费用均为 1 个 credit。
翻页时,每次请求都要使用相同的 sort。
每个条目都包含 members_only;仅当 YouTube 将其标记为“仅限会员”时,该值才为 true,且这些条目没有 viewCountText。tab=streams 的条目包含 lengthText 和 publishedTimeText(例如 Streamed 2 years ago);tab=shorts 的这两个字段均为 null,因为 YouTube 的 Shorts 网格不会发布这些信息。在频道标签页信息流中(tab=videos 且设置了 sort、tab=shorts、tab=streams),channelId、channelTitle、channelHandle 和 index 均为 null。
响应:
{
"results": [{
"videoId": "abc123xyz00",
"title": "Latest Video",
"channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q",
"channelTitle": "TED",
"channelHandle": "@TED",
"lengthText": "15:22",
"viewCountText": "3.2M views",
"publishedTimeText": "2 years ago",
"thumbnails": [...],
"index": "0",
"members_only": false
}],
"playlist_info": {"title": "Uploads from TED", "numVideos": "5000"},
"continuation_token": "4qmFsgKlARIYVVV1...",
"has_more": true
}
GET /api/v2/youtube/channel/latest — 免费(0 个 credits)
GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 参数 | 必填 | 验证 |
|---|---|---|
channel | 是 | @handle、频道 URL 或 UC... ID |
通过 RSS 返回最近 15 个视频,包含准确的观看次数和 ISO 时间戳。
响应:
{
"channel": {
"channelId": "...",
"title": "TED",
"author": "TED",
"url": "..."
},
"results": [
{
"videoId": "abc123xyz00",
"title": "Latest Video",
"published": "2026-01-30T16:00:00Z",
"viewCount": "2287630",
"description": "Full description...",
"thumbnail": { "url": "...", "width": "480", "height": "360" }
}
],
"result_count": 15
}
GET /api/v2/youtube/channel/search — 1 个 credit
GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=climate+change&limit=30
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 参数 | 必填 | 验证 |
|---|---|---|
channel | 是 | @handle、频道 URL 或 UC... ID |
q | 是 | 1-200 个字符 |
limit | 否 | 1-50(默认 30) |
GET /api/v2/youtube/playlist/videos — 每页 1 个 credit
# First page
GET https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_PLAYLIST_ID
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
# Next pages
GET https://transcriptapi.com/api/v2/youtube/playlist/videos?continuation=TOKEN
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| 参数 | 必填 | 验证 |
|---|---|---|
playlist | 有条件必填 | 播放列表 URL 或 ID(PL/UU/LL/FL/OL 前缀) |
continuation | 有条件必填 | 非空字符串 |
Credits 费用
| 端点 | 费用 |
|---|---|
| transcript | 1 |
| search | 1 |
| channel/resolve | 免费 |
| channel/search | 1 |
| channel/videos | 每页 1 个 |
| channel/latest | 免费 |
| playlist/videos | 每页 1 个 |
错误
| 代码 | 含义 | 操作 |
|---|---|---|
| 401 | API 密钥无效 | 检查密钥,重新运行设置 |
| 402 | Credits 不足 | 在 transcriptapi.com/billing 充值 |
| 403/1010 | Cloudflare 拦截 | 添加或修正 User-Agent 标头 |
| 404 | 未找到 | 视频/频道/播放列表不存在,或没有字幕 |
| 408 | 超时/可重试 | 2s 后重试一次 |
| 422 | 验证错误 | 检查参数格式 |
| 429 | 请求频率受限 | 等待,并遵循 Retry-After |
提示
- 用户分享 YouTube URL 且未附带指示时,获取字幕稿并总结要点。
- 获取字幕稿前,使用
channel/latest(免费)检查是否有新上传的视频——直接传入 @handle。 - 研究时:搜索 → 选择视频 → 获取字幕稿。
- 免费版:100 积分,300 次请求/分钟。入门版($5/月):1,000 积分,300 次请求/分钟。
复制粘贴示例
本文件中的每个请求都是可直接运行的单行命令:references/curl-examples.md