| name | youtube-channels |
| description | Work with YouTube channels โ resolve handles to IDs, browse uploads, get latest videos, search within channels. Use when the user asks about a specific channel, wants to see recent uploads, or says "what has X posted lately", "latest from MKBHD", "show me their channel", "list channel videos", "browse channel uploads". |
| homepage | https://transcriptapi.com |
| metadata | {"moltbot":{"emoji":"๐ก","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY"}} |
YouTube Channels
YouTube channel tools via TranscriptAPI.com.
Setup
If $TRANSCRIPT_API_KEY is not set, help the user create an account (100 free credits, no card):
Step 1 โ Register: Ask user for their email, generate a secure password.
node ./scripts/tapi-auth.js register --email USER_EMAIL --password SECURE_PASS --json
โ OTP sent to email. Ask user: "Check your email for a 6-digit verification code."
โ ๏ธ SAVE THE PASSWORD โ you need it again in Step 2!
Step 2 โ Verify: Once user provides the OTP (use SAME password from Step 1):
node ./scripts/tapi-auth.js verify --email USER_EMAIL --password SECURE_PASS --otp CODE --json
โ Returns api_key (starts with sk_).
Step 3 โ Save: Store the key (auto-configures agent + shell):
node ./scripts/tapi-auth.js save-key --key API_KEY --json
โ Ready to use. Agent runtime picks up the key automatically.
Manual option: transcriptapi.com/signup โ Dashboard โ API Keys.
GET /api/v2/youtube/channel/resolve โ FREE
Convert @handle, URL, or UC... ID to canonical channel ID.
curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@mkbhd" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
| Param | Required | Validation |
|---|
input | yes | 1-200 chars โ @handle, URL, or UC... ID |
Response:
{ "channel_id": "UCBcRF18a7Qf58cCRy5xuWwQ", "resolved_from": "@mkbhd" }
If input is already UC[a-zA-Z0-9_-]{22}, returns immediately.
GET /api/v2/youtube/channel/latest โ FREE
Latest 15 videos via RSS with exact stats.
curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel_id=UC_CHANNEL_ID" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
| Param | Required | Validation |
|---|
channel_id | yes | ^UC[a-zA-Z0-9_-]{22}$ (24 chars total) |
Response:
{
"channel": {
"channelId": "UCBcRF18a7Qf58cCRy5xuWwQ",
"title": "MKBHD",
"author": "MKBHD",
"url": "https://www.youtube.com/channel/UCBcRF18a7Qf58cCRy5xuWwQ",
"published": "2008-03-21T00:00:00Z"
},
"results": [
{
"videoId": "abc123xyz00",
"title": "Latest Video Title",
"channelId": "UCBcRF18a7Qf58cCRy5xuWwQ",
"author": "MKBHD",
"published": "2026-01-30T16:00:00Z",
"updated": "2026-01-31T02:00:00Z",
"link": "https://www.youtube.com/watch?v=abc123xyz00"
Great for monitoring channels โ free and gives exact view counts + ISO timestamps.
GET /api/v2/youtube/channel/videos โ 1 credit/page
Paginated list of ALL channel uploads (100 per page).
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel_id=UC_CHANNEL_ID" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
| Param | Required | Validation |
|---|
channel_id | conditional | ^UC[a-zA-Z0-9_-]{22}$ (first page) |
continuation | conditional | non-empty (next pages) |
Provide exactly one of channel_id or continuation, not both.
Response:
{
"results": [{
"videoId": "abc123xyz00",
"title": "Video Title",
"channelId": "UCBcRF18a7Qf58cCRy5xuWwQ",
"channelTitle": "MKBHD",
"channelHandle": "@mkbhd",
"lengthText": "15:22",
"viewCountText": "3.2M views",
"thumbnails": [...],
"index": "0"
}],
"playlist_info": {"title": "Uploads from MKBHD", "numVideos": "1893", "ownerName": "MKBHD"
Keep calling with continuation until has_more: false.
GET /api/v2/youtube/channel/search โ 1 credit
Search within a specific channel.
curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\
?channel_id=UC_CHANNEL_ID&q=iphone+review&limit=30" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
| Param | Required | Validation |
|---|
channel_id | yes | ^UC[a-zA-Z0-9_-]{22}$ |
q | yes | 1-200 chars |
limit | no | 1-50 (default 30) |
Typical workflow
curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@mkbhd" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel_id=UC_CHANNEL_ID" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
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"
Errors
| Code | Action |
|---|
| 400 | Invalid param combination (both or neither channel_id/continuation) |
| 402 | No credits โ transcriptapi.com/billing |
| 404 | Channel not found |
| 408 | Timeout โ retry once |
| 422 | Invalid channel_id format |
Free tier: 100 credits, 300 req/min. Free endpoints (resolve, latest) require auth but don't consume credits.