youtube
Original:🇺🇸 English
Translated
YouTube Data API v3 via curl. Use this skill to search videos, get video/channel info, list playlists, and fetch comments.
20installs
Sourcevm0-ai/vm0-skills
Added on
NPX Install
npx skill4agent add vm0-ai/vm0-skills youtubeTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →YouTube Data API
Use the YouTube Data API v3 via direct calls to search videos, retrieve video details, get channel information, list playlist items, and fetch comments.
curlOfficial docs:https://developers.google.com/youtube/v3
When to Use
Use this skill when you need to:
- Search videos by keywords or filters
- Get video details (title, description, statistics, duration)
- Get channel info (subscriber count, video count, description)
- List playlist items (videos in a playlist)
- Fetch comments on videos
- Get trending videos by region
Prerequisites
1. Create Google Cloud Project
- Go to Google Cloud Console
- Create a new project or select existing one
- Go to "APIs & Services" > "Library"
- Search for "YouTube Data API v3" and enable it
2. Get API Key
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "API Key"
- Copy the API key
bash
export YOUTUBE_API_KEY="AIzaSy..."3. (Optional) Restrict API Key
For production use, restrict the key:
- Application restrictions: HTTP referrers, IP addresses
- API restrictions: YouTube Data API v3 only
Important: When usingin a command that pipes to another command, wrap the command containing$VARin$VAR. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.bash -c '...'bashbash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY" | jq .'
How to Use
Base URL:
https://www.googleapis.com/youtube/v31. Search Videos
bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/search?part=snippet&q=kubernetes+tutorial&type=video&maxResults=5&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {videoId: .id.videoId, title: .snippet.title, channel: .snippet.channelTitle}'2. Search with Filters
Search for videos uploaded this year, ordered by view count:
bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/search?part=snippet&q=react+hooks&type=video&order=viewCount&publishedAfter=2024-01-01T00:00:00Z&maxResults=10&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {videoId: .id.videoId, title: .snippet.title}'3. Get Video Details
Replace with an actual video ID:
<your-video-id>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics,contentDetails&id=<your-video-id>&key=${YOUTUBE_API_KEY}"' | jq '.items[0] | {title: .snippet.title, views: .statistics.viewCount, likes: .statistics.likeCount, duration: .contentDetails.duration}'4. Get Multiple Videos
Replace , , with actual video IDs:
<your-video-id-1><your-video-id-2><your-video-id-3>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&id=<your-video-id-1>,<your-video-id-2>,<your-video-id-3>&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {id: .id, title: .snippet.title, views: .statistics.viewCount}'5. Get Trending Videos
bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&chart=mostPopular®ionCode=US&maxResults=10&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {title: .snippet.title, channel: .snippet.channelTitle, views: .statistics.viewCount}'6. Get Channel by ID
Replace with an actual channel ID:
<your-channel-id>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&id=<your-channel-id>&key=${YOUTUBE_API_KEY}"' | jq '.items[0] | {title: .snippet.title, subscribers: .statistics.subscriberCount, videos: .statistics.videoCount}'7. Get Channel by Handle
bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&forHandle=@GoogleDevelopers&key=${YOUTUBE_API_KEY}"' | jq '.items[0] | {id: .id, title: .snippet.title, subscribers: .statistics.subscriberCount}'8. Get Channel by Username
bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&forUsername=GoogleDevelopers&key=${YOUTUBE_API_KEY}"' | jq '.items[0] | {id: .id, title: .snippet.title, description: .snippet.description}'9. List Playlist Items
Replace with an actual playlist ID:
<your-playlist-id>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=<your-playlist-id>&maxResults=20&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {position: .snippet.position, title: .snippet.title, videoId: .snippet.resourceId.videoId}'10. Get Channel Uploads Playlist
First get the channel's uploads playlist ID, then list videos. Replace with an actual channel ID:
<your-channel-id>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id=<your-channel-id>&key=${YOUTUBE_API_KEY}"' | jq -r '.items[0].contentDetails.relatedPlaylists.uploads'11. Get Video Comments
Replace with an actual video ID:
<your-video-id>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&videoId=<your-video-id>&maxResults=20&order=relevance&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {author: .snippet.topLevelComment.snippet.authorDisplayName, text: .snippet.topLevelComment.snippet.textDisplay, likes: .snippet.topLevelComment.snippet.likeCount}'12. Search Comments
Replace with an actual video ID:
<your-video-id>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&videoId=<your-video-id>&searchTerms=great+video&maxResults=10&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {author: .snippet.topLevelComment.snippet.authorDisplayName, text: .snippet.topLevelComment.snippet.textDisplay}'13. Get Video Categories
bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/videoCategories?part=snippet®ionCode=US&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {id: .id, title: .snippet.title}'14. Search Videos by Category
bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&videoCategoryId=28&maxResults=10&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {videoId: .id.videoId, title: .snippet.title}'Note: Category 28 = Science & Technology
15. Get Playlists from Channel
Replace with an actual channel ID:
<your-channel-id>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=<your-channel-id>&maxResults=20&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {id: .id, title: .snippet.title, description: .snippet.description}'Common Video Categories
| ID | Category |
|---|---|
| 1 | Film & Animation |
| 10 | Music |
| 17 | Sports |
| 20 | Gaming |
| 22 | People & Blogs |
| 24 | Entertainment |
| 25 | News & Politics |
| 26 | Howto & Style |
| 27 | Education |
| 28 | Science & Technology |
Part Parameter Options
Videos
- - Title, description, thumbnails, channel
snippet - - Views, likes, comments count
statistics - - Duration, definition, caption
contentDetails - - Upload status, privacy, license
status - - Embeddable player
player
Channels
- - Title, description, thumbnails
snippet - - Subscribers, videos, views
statistics - - Related playlists (uploads, likes)
contentDetails - - Channel customization
brandingSettings
Pagination
Use from response to get more results. Replace with the actual token from the previous response:
nextPageToken<your-next-page-token>bash
bash -c 'curl -s "https://www.googleapis.com/youtube/v3/search?part=snippet&q=python&type=video&maxResults=50&pageToken=<your-next-page-token>&key=${YOUTUBE_API_KEY}"' | jq '.items[] | {title: .snippet.title}'Guidelines
- Quota limits: API has 10,000 units/day quota. Search costs 100 units, most others cost 1 unit
- Rate limits: Implement exponential backoff on 403/429 errors
- API key security: Never expose API keys in client-side code
- Caching: Cache responses to reduce quota usage
- Video IDs: Extract from URLs like or
youtube.com/watch?v=VIDEO_IDyoutu.be/VIDEO_ID