Skip to main content Accueil Créateurs dvcrn openclaw-skills-marketplace youtube
youtube YouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Aller à l'installation Skills Marketplace Découvrez et explorez les compétences IA créées par la communauté.
Métiers associés SOC
Basé sur la classification professionnelle SOC
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Copier le promptAfficher les détails du prompt Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
npx skills add https://github.com/dvcrn/openclaw-skills-marketplace --skill youtubeLa commande reste sur une seule ligne. Faites défiler horizontalement pour la vérifier avant de la copier.
Vous préférez une copie locale ? Téléchargez les fichiers actuellement disponibles dans SkillsMP.
Télécharger Zip Téléchargement... Explorateur de fichiers
2 fichiers name youtube description YouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
YouTube
Access the YouTube Data API v3 with managed OAuth authentication. Search videos, manage playlists, access channel information, and interact with comments and subscriptions.
Quick Start
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/youtube/youtube/v3/search?part=snippet&q=coding+tutorial&type=video&maxResults=10' )
req.add_header('Authorization' , f'Bearer {os.environ["MATON_API_KEY"]}' )
print (json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://gateway.maton.ai/youtube/{native-api-path}
Replace {native-api-path} with the actual YouTube Data API endpoint path. The gateway proxies requests to www.googleapis.com and automatically injects your OAuth token.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
Sign in or create an account at maton.ai
Copy your API key
Connection Management Manage your Google OAuth connections at https://ctrl.maton.ai.
List Connections python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=youtube&status=ACTIVE' )
req.add_header('Authorization' , f'Bearer {os.environ["MATON_API_KEY"]}' )
print (json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app' : 'youtube' }).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections' , data=data, method='POST' )
req.add_header('Authorization' , f'Bearer {os.environ["MATON_API_KEY"]}' )
req.add_header('Content-Type' , 'application/json' )
print (json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get Connection python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}' )
req.add_header('Authorization' , f'Bearer {os.environ["MATON_API_KEY"]}' )
print (json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
{
"connection" : {
"connection_id" : "21fd90f9-5935-43cd-b6c8-bde9d915ca80" ,
"status" : "ACTIVE" ,
"creation_time" : "2025-12-08T07:20:53.488460Z" ,
"last_updated_time" : "2026-01-31T20:03:32.593153Z" ,
"url" : "https://connect.maton.ai/?session_token=..." ,
"app" : "youtube" ,
"metadata" : { }
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}' , method='DELETE' )
req.add_header('Authorization' , f'Bearer {os.environ["MATON_API_KEY"]}' )
print (json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Specifying Connection If you have multiple YouTube connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/youtube/youtube/v3/channels?part=snippet&mine=true' )
req.add_header('Authorization' , f'Bearer {os.environ["MATON_API_KEY"]}' )
req.add_header('Maton-Connection' , '21fd90f9-5935-43cd-b6c8-bde9d915ca80' )
print (json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If omitted, the gateway uses the default (oldest) active connection.
API Reference
Search
Search Videos, Channels, or Playlists GET /youtube/youtube/v3/search
part - Required: snippet
q - Search query
type - Filter by type: video, channel, playlist
maxResults - Results per page (1-50, default 5)
order - Sort order: date, rating, relevance, title, viewCount
publishedAfter - Filter by publish date (RFC 3339)
publishedBefore - Filter by publish date (RFC 3339)
channelId - Filter by channel
videoDuration - short (<4min), medium (4-20min), long (>20min)
pageToken - Pagination token
curl -s -X GET "https://gateway.maton.ai/youtube/youtube/v3/search?part=snippet&q=machine+learning&type=video&maxResults=10&order=viewCount" -H "Authorization: Bearer $MATON_API_KEY "
{
"kind" : "youtube#searchListResponse" ,
"nextPageToken" : "CAUQAA" ,
"pageInfo" : {
"totalResults" : 1000000 ,
"resultsPerPage" : 10
} ,
"items" : [
{
"kind" : "youtube#searchResult" ,
"id" : {
"kind" : "youtube#video" ,
"videoId" : "abc123xyz"
} ,
"snippet" : {
"publishedAt" : "2024-01-15T10:00:00Z" ,
"channelId" : "UCxyz123" ,
"title" : "Machine Learning Tutorial" ,
"description" : "Learn ML basics..." ,
"thumbnails" : {
"default" : { "url" : "https://i.ytimg.com/vi/abc123xyz/default.jpg" }
} ,
"channelTitle" : "Tech Channel"
}
}
]
}
Videos
Get Video Details GET /youtube/youtube/v3/videos?part=snippet,statistics,contentDetails&id ={videoId}
snippet - Title, description, thumbnails, channel info
statistics - View count, likes, comments
contentDetails - Duration, dimension, definition
status - Upload status, privacy status
player - Embedded player HTML
curl -s -X GET "https://gateway.maton.ai/youtube/youtube/v3/videos?part=snippet,statistics&id=dQw4w9WgXcQ" -H "Authorization: Bearer $MATON_API_KEY "
Get My Videos (Uploaded) GET /youtube/youtube/v3/search?part=snippet&forMine=true &type =video&maxResults=25
Rate Video (Like/Dislike) POST /youtube/youtube/v3/videos/rate?id ={videoId}&rating=like
Rating values: like, dislike, none
Get Trending Videos GET /youtube/youtube/v3/videos?part=snippet,statistics&chart=mostPopular®ionCode=US&maxResults=10
Get Video Categories GET /youtube/youtube/v3/videoCategories?part=snippet®ionCode=US
Channels
Get Channel Details GET /youtube/youtube/v3/channels?part=snippet,statistics,contentDetails&id ={channelId}
Get My Channel GET /youtube/youtube/v3/channels?part=snippet,statistics,contentDetails&mine=true
{
"items" : [
{
"id" : "UCxyz123" ,
"snippet" : {
"title" : "My Channel" ,
"description" : "Channel description" ,
"customUrl" : "@mychannel" ,
"publishedAt" : "2020-01-01T00:00:00Z" ,
"thumbnails" : { ...}
} ,
"statistics" : {
"viewCount" : "1000000" ,
"subscriberCount" : "50000" ,
"videoCount" : "100"
} ,
"contentDetails" : {
"relatedPlaylists" : {
"uploads" : "UUxyz123"
}
}
}
]
}
Get Channel by Username GET /youtube/youtube/v3/channels?part=snippet,statistics&forUsername={username}
Playlists
List My Playlists GET /youtube/youtube/v3/playlists?part=snippet,contentDetails&mine=true &maxResults=25
Get Playlist GET /youtube/youtube/v3/playlists?part=snippet,contentDetails&id ={playlistId}
Create Playlist POST /youtube/youtube/v3/playlists?part=snippet,status
Content-Type: application/json
{
"snippet" : {
"title" : "My New Playlist" ,
"description" : "A collection of videos" ,
"defaultLanguage" : "en"
},
"status" : {
"privacyStatus" : "private"
}
}
Privacy values: public, private, unlisted
Update Playlist PUT /youtube/youtube/v3/playlists?part=snippet,status
Content-Type: application/json
{
"id" : "PLxyz123" ,
"snippet" : {
"title" : "Updated Playlist Title" ,
"description" : "Updated description"
},
"status" : {
"privacyStatus" : "public"
}
}
Delete Playlist DELETE /youtube/youtube/v3/playlists?id ={playlistId}
Playlist Items
List Playlist Items GET /youtube/youtube/v3/playlistItems?part=snippet,contentDetails&playlistId={playlistId}&maxResults=50
Add Video to Playlist POST /youtube/youtube/v3/playlistItems?part=snippet
Content-Type: application/json
{
"snippet" : {
"playlistId" : "PLxyz123" ,
"resourceId" : {
"kind" : "youtube#video" ,
"videoId" : "abc123xyz"
},
"position" : 0
}
}
Remove from Playlist DELETE /youtube/youtube/v3/playlistItems?id ={playlistItemId}
Subscriptions
List My Subscriptions GET /youtube/youtube/v3/subscriptions?part=snippet&mine=true &maxResults=50
Check Subscription to Channel GET /youtube/youtube/v3/subscriptions?part=snippet&mine=true &forChannelId={channelId}
Subscribe to Channel POST /youtube/youtube/v3/subscriptions?part=snippet
Content-Type: application/json
{
"snippet" : {
"resourceId" : {
"kind" : "youtube#channel" ,
"channelId" : "UCxyz123"
}
}
}
Unsubscribe DELETE /youtube/youtube/v3/subscriptions?id ={subscriptionId}
Comments
List Video Comments GET /youtube/youtube/v3/commentThreads?part=snippet,replies&videoId={videoId}&maxResults=100
Add Comment to Video POST /youtube/youtube/v3/commentThreads?part=snippet
Content-Type: application/json
{
"snippet" : {
"videoId" : "abc123xyz" ,
"topLevelComment" : {
"snippet" : {
"textOriginal" : "Great video!"
}
}
}
}
Reply to Comment POST /youtube/youtube/v3/comments?part=snippet
Content-Type: application/json
{
"snippet" : {
"parentId" : "comment123" ,
"textOriginal" : "Thanks for your comment!"
}
}
Delete Comment DELETE /youtube/youtube/v3/comments?id ={commentId}
Code Examples
JavaScript const headers = {
'Authorization' : `Bearer ${process.env.MATON_API_KEY} `
};
const results = await fetch (
'https://gateway.maton.ai/youtube/youtube/v3/search?part=snippet&q=tutorial&type=video&maxResults=10' ,
{ headers }
).then (r => r.json ());
const video = await fetch (
'https://gateway.maton.ai/youtube/youtube/v3/videos?part=snippet,statistics&id=dQw4w9WgXcQ' ,
{ headers }
).then (r => r.json ());
await fetch (
'https://gateway.maton.ai/youtube/youtube/v3/playlists?part=snippet,status' ,
{
method : 'POST' ,
headers : { ...headers, 'Content-Type' : 'application/json' },
body : JSON .stringify ({
snippet : { title : 'My Playlist' , description : 'Videos I like' },
status : { privacyStatus : 'private' }
})
}
);
Python import os
import requests
headers = {'Authorization' : f'Bearer {os.environ["MATON_API_KEY" ]} ' }
results = requests.get(
'https://gateway.maton.ai/youtube/youtube/v3/search' ,
headers=headers,
params={'part' : 'snippet' , 'q' : 'tutorial' , 'type' : 'video' , 'maxResults' : 10 }
).json()
video = requests.get(
'https://gateway.maton.ai/youtube/youtube/v3/videos' ,
headers=headers,
params={'part' : 'snippet,statistics' , 'id' : 'dQw4w9WgXcQ' }
).json()
response = requests.post(
'https://gateway.maton.ai/youtube/youtube/v3/playlists?part=snippet,status' ,
headers=headers,
json={
'snippet' : {'title' : 'My Playlist' , 'description' : 'Videos I like' },
'status' : {'privacyStatus' : 'private' }
}
)
Notes
Video IDs are 11 characters (e.g., dQw4w9WgXcQ)
Channel IDs start with UC (e.g., UCxyz123)
Playlist IDs start with PL (user) or UU (uploads)
Use pageToken for pagination through large result sets
The part parameter is required and determines what data is returned
Quota costs vary by endpoint - search is expensive (100 units), reads are cheap (1 unit)
Some write operations require channel verification
IMPORTANT: When using curl commands, use curl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsing
IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.
Error Handling Status Meaning 400 Missing YouTube connection or invalid request 401 Invalid or missing Maton API key 403 Forbidden - quota exceeded or insufficient permissions 404 Video, channel, or playlist not found 429 Rate limited (10 req/sec per account) 4xx/5xx Passthrough error from YouTube API
Troubleshooting: API Key Issues
Check that the MATON_API_KEY environment variable is set:
Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections' )
req.add_header('Authorization' , f'Bearer {os.environ["MATON_API_KEY"]}' )
print (json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Troubleshooting: Invalid App Name
Ensure your URL path starts with youtube. For example:
Correct: https://gateway.maton.ai/youtube/youtube/v3/search
Incorrect: https://gateway.maton.ai/v3/search
Resources