Transcriptapi

zeropointrepo/youtube-skills/clawhub/transcriptapi

作者 zeropointrepo4f7994b94e7d无许可证1K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库2天前更新

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

AI 生成的概览

通过 TranscriptAPI.com 的 HTTP 接口获取 YouTube 字幕,并搜索视频、频道和播放列表。

功能
该技能说明如何用 curl 调用 TranscriptAPI.com 的 REST 接口,获取 YouTube 视频字幕、搜索视频或频道、解析频道句柄、浏览频道上传内容和播放列表,以及在频道内搜索。返回结果包括带可选时间戳和元数据的字幕文本,以及标题、观看次数、翻页令牌等搜索与列表信息。它仅为说明文档,不包含脚本。
适用场景
适用于涉及 YouTube 内容的任务,例如总结粘贴的视频链接、引用或翻译演讲、跨视频做主题调研,或查找某位创作者的频道与播放列表。不适用于上传、账号管理,或仅基于文字资料的研究。
运行要求
需要能访问 transcriptapi.com 的网络连接,以及 TRANSCRIPT_API_KEY 环境变量(以 sk_ 开头的密钥,可注册免费账号获取)。请求必须携带 Authorization bearer 头和 User-Agent 头。无需其他运行时或依赖,也不附带脚本。

TranscriptAPI

Full YouTube data toolkit via TranscriptAPI.com. Transcripts, search, channels, playlists — one API key.

Setup

If $TRANSCRIPT_API_KEY is not set, read references/auth-setup.md [blocked] 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 — consult this for the latest parameters and schemas.

Auth

All requests: -H "Authorization: Bearer $TRANSCRIPT_API_KEY"

Endpoints

Channel endpoints accept channel — an @handle, channel URL, or UC... ID. No need to resolve first. Playlist endpoints accept playlist — a playlist URL or ID.

GET /api/v2/youtube/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"
ParamRequiredDefaultValidation
video_urlyes—YouTube URL or 11-char video ID
formatnojsonjson or text
include_timestampnotruetrue or false
send_metadatanofalsetrue or false

Accepts: https://youtube.com/watch?v=ID, https://youtu.be/ID, youtube.com/shorts/ID, or bare ID.

Response (format=json):

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 credit

bash
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"
ParamRequiredDefaultValidation
qyes—1-200 chars (trimmed)
typenovideovideo or channel
limitno201-50

Response (type=video):

json
{  "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}

Response (type=channel):

json
{  "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 — FREE (0 credits)

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"
ParamRequiredValidation
inputyes1-200 chars — @handle, URL, or UC... ID

Response:

json
{ "channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED" }

If input is already a valid UC[a-zA-Z0-9_-]{22} ID, returns immediately without lookup.

GET /api/v2/youtube/channel/videos — 1 credit/page

bash
# First page (100 videos)curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA" \  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \  -H "User-Agent: YourAgent/1.0"
# Most-viewed first (channel Videos tab, ~30 videos)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 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"
ParamRequiredValidation
channelconditional@handle, channel URL, or UC... ID
tabnovideos (default), shorts, or streams
sortnolatest, popular, or oldest (omit for the uploads feed)
continuationconditionalnon-empty string (next pages)

Provide exactly one of channel or continuation.

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.

Every item carries members_only, true only when YouTube badges it "Members only", and those items have no viewCountText. Items from tab=streams 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.

Response:

json
{  "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 — FREE (0 credits)

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"
ParamRequiredValidation
channelyes@handle, channel URL, or UC... ID

Returns last 15 videos via RSS with exact view counts and ISO timestamps.

Response:

json
{  "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

bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\?channel=@TED&q=climate+change&limit=30" \  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \  -H "User-Agent: YourAgent/1.0"
ParamRequiredValidation
channelyes@handle, channel URL, or UC... ID
qyes1-200 chars
limitno1-50 (default 30)

GET /api/v2/youtube/playlist/videos — 1 credit/page

bash
# First pagecurl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_PLAYLIST_ID" \  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \  -H "User-Agent: YourAgent/1.0"
# Next pagescurl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?continuation=TOKEN" \  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \  -H "User-Agent: YourAgent/1.0"
ParamRequiredValidation
playlistconditionalPlaylist URL or ID (PL/UU/LL/FL/OL prefix)
continuationconditionalnon-empty string

Credit Costs

EndpointCost
transcript1
search1
channel/resolvefree
channel/search1
channel/videos1/page
channel/latestfree
playlist/videos1/page

Errors

CodeMeaningAction
401Bad API keyCheck key, re-run setup
402No creditsTop up at transcriptapi.com/billing
403/1010Cloudflare blockAdd or fix User-Agent header
404Not foundVideo/channel/playlist doesn't exist or no captions
408Timeout/retryableRetry once after 2s
422Validation errorCheck param format
429Rate limitedWait, respect Retry-After

Tips

  • When user shares YouTube URL with no instruction, fetch transcript and summarize key points.
  • Use channel/latest (free) to check for new uploads before fetching transcripts — pass @handle directly.
  • For research: search → pick videos → fetch transcripts.
  • Free tier: 100 credits, 300 req/min. Starter ($5/mo): 1,000 credits, 300 req/min.

来源与署名

来源:zeropointrepo/youtube-skills位于clawhub/transcriptapi提交4f7994b

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架