设计与多媒体

YouTube Data API - Search, Videos, Comments, Transcripts, Channels

试用

Search YouTube and retrieve videos, shorts, comments, transcripts, streams, channel data, and community posts with their comments as structured JSON. 17 endpoints across video and channel surfaces.

它能做什么

YouTube Data API - Search, Videos, Comments, Transcripts, Channels

技能文档

YouTube Data API - Search, Videos, Comments, Transcripts, Channels

Search YouTube and retrieve videos, shorts, search suggestions, video metadata, comments, transcripts, related videos, download streams, and full channel data (info, videos, shorts, community posts). All endpoints return structured JSON.

When to trigger

Use this skill when the user asks to:

  • Find YouTube videos, shorts, or channels on a topic
  • Get a video's metadata, view count, duration, or captions list
  • Read a video's comments and comment replies
  • Pull a full transcript or timed subtitles for a video
  • Get related videos or direct download stream URLs
  • Look up a channel's info, videos, shorts, or community posts
  • Resolve a channel handle or URL to a channel ID

Setup

Get a free API key at scavio.dev (50 free credits to get started, no card required):

export SCAVIO_API_KEY=sk_live_your_key

Every request is a POST with a JSON body and:

Authorization: Bearer $SCAVIO_API_KEY

Endpoints

Base URL: https://api.scavio.dev. All paths are under /api/v1/youtube.

Video endpoints

EndpointCreditsDescription
POST /api/v1/youtube/search2Search videos (and channels/playlists)
POST /api/v1/youtube/shorts2Search Shorts
POST /api/v1/youtube/suggestions1Search autocomplete suggestions
POST /api/v1/youtube/video1Full video metadata and captions list
POST /api/v1/youtube/comments1Top-level comments for a video
POST /api/v1/youtube/comments/replies1Replies to a specific comment
POST /api/v1/youtube/transcript8Full transcript or timed subtitles
POST /api/v1/youtube/related1Videos related to a video
POST /api/v1/youtube/streams3Direct playable/downloadable stream URLs

Channel endpoints

EndpointCreditsDescription
POST /api/v1/youtube/channel/search1Search channels
POST /api/v1/youtube/channel1Full channel info
POST /api/v1/youtube/channel/videos1A channel's videos
POST /api/v1/youtube/channel/shorts1A channel's Shorts
POST /api/v1/youtube/channel/community1A channel's community posts
POST /api/v1/youtube/channel/resolve1Resolve a handle or URL to a channel ID

POST /api/v1/youtube/metadata still works as a deprecated alias of /video. Use /video for new code.

Workflow

  1. Find a video: call /search with search. Use sort_by: view_count for the most-watched result. Read results[].video_id.
  2. Get metadata: call /video with video_id (accepts a full watch URL too) for description, length_seconds, view_count, keywords, and captions[].
  3. Read discussion: call /comments, then /comments/replies with a comment's reply_cursor to expand a thread.
  4. Get the text: call /transcript for a plain transcript (format: text) or timed subtitles (format: srt).
  5. Download: call /streams for direct format URLs.
  6. Channels: resolve a handle with /channel/resolve, then call /channel, /channel/videos, /channel/shorts, or /channel/community.

Paginated endpoints return next_cursor and has_more; pass next_cursor back as cursor for the next page.

Parameters

ParameterTypeDefaultDescription
searchstringrequiredSearch query — note: this field is search, not query
upload_datestring--last_hour, today, this_week, this_month, this_year
typestring--video, channel, playlist, or movie
durationstring--short, medium, long
sort_bystringrelevancerelevance, date, view_count, rating
featuresstring[]--Any of hd, 4k, subtitles, creative_commons, live, 360, 3d, hdr, vr180
cursorstring--Pagination cursor from a prior next_cursor

Legacy boolean flags (subtitles, creative_commons, hd, 4k, live, 360, 3d, hdr, vr180) are still accepted for backward compatibility; prefer the features array.

Shorts (/shorts)

search* , sort_by, cursor.

Suggestions (/suggestions)

search* , language (default en), region (default US).

Video (/video) and metadata alias

video_id* — accepts a raw ID or a full watch URL.

Comments (/comments)

video_id* , cursor.

Comment replies (/comments/replies)

video_id* , reply_cursor* (a comment's reply_cursor), cursor.

Transcript (/transcript)

video_id* , language (default en), format (text for plain, srt for timed; default text).

video_id* , cursor.

Streams (/streams)

video_id* .

Channel search (/channel/search)

search* , cursor.

Channel (/channel)

channel_id* — accepts a channel ID, @handle, or channel URL.

Channel videos / shorts / community

channel_id* , cursor.

Channel resolve (/channel/resolve)

channel* — a @handle or channel URL. Returns channel_id and channel_url.

Examples

import requests

BASE = "https://api.scavio.dev"
# Your key from https://scavio.dev/?utm_source=clawhub&utm_medium=skill&utm_campaign=youtube-data-api. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Search — use "search" field, not "query"
search = requests.post(f"{BASE}/api/v1/youtube/search", headers=HEADERS,
    json={"search": "langchain tutorial", "type": "video", "sort_by": "view_count"}).json()

video_id = search["data"]["results"][0]["video_id"]

# 2. Full video metadata (captions list included)
video = requests.post(f"{BASE}/api/v1/youtube/video", headers=HEADERS,
    json={"video_id": video_id}).json()

# 3. Transcript as plain text
transcript = requests.post(f"{BASE}/api/v1/youtube/transcript", headers=HEADERS,
    json={"video_id": video_id, "language": "en", "format": "text"}).json()

# 4. Resolve a handle, then pull the channel's videos
resolved = requests.post(f"{BASE}/api/v1/youtube/channel/resolve", headers=HEADERS,
    json={"channel": "@freecodecamp"}).json()
channel_id = resolved["data"]["channel_id"]

videos = requests.post(f"{BASE}/api/v1/youtube/channel/videos", headers=HEADERS,
    json={"channel_id": channel_id}).json()

Response shapes

Every response uses the envelope { data, response_time, credits_used, credits_remaining }. Key data fields per endpoint:

  • search — results[] (type, video_id, title, url, description_snippet, thumbnail, duration_text, view_count, published_time, channel{id,name,url}), plus shorts, channels, playlists, next_cursor, has_more.
  • shorts — results[] (video_id, title, url, thumbnail, view_count, published_time, author, channel_id), next_cursor, has_more.
  • suggestions — suggestions[] (strings), total_count.
  • video — video_id, title, author, channel_id, channel_url, published_at, description, length_seconds, view_count, keywords[], thumbnail, playability_status, chapters, captions[] (language_code, language_name, url).
  • comments — comments[] (comment_id, text, like_count, reply_count, published_time, reply_cursor, author{channel_id,name,url,avatar,is_verified,is_creator}), next_cursor, has_more.
  • comments/replies — replies[] (same item shape as a comment), next_cursor, has_more.
  • transcript — video_id, language_code, language_name, format, content.
  • related — results[] (video_id, title, url, author, channel_id, channel_url, thumbnail, view_count, published_time, length_seconds), total_count.
  • channel/search — results[] (channel_id, name, handle, url, thumbnail, subscriber_count, description, verified), next_cursor, has_more, total_count.
  • channel — channel_id, title, description, handle, url, subscriber_count, video_count, view_count, country, creation_date, verified, has_business_email, avatar, banner, links[].
  • channel/videos — channel_id, results[] (video_id, title, url, thumbnail, duration_text, view_count, published_time, is_live), next_cursor, has_more.
  • channel/shorts — channel_id, results[] (video_id, title, url, thumbnail, view_count), next_cursor, has_more, total_count.
  • channel/community — channel_id, posts[] (post_id, url, text, author_name, author_channel_id, published_time, vote_count, comment_count, images[], attachment_type), next_cursor, has_more.
  • channel/resolve — channel_id, channel_url.
  • streams — video_id, title, author, length_seconds, view_count, is_live, formats[], adaptive_formats[], available_qualities[], expires_in_seconds.
{
  "data": {
    "results": [
      {
        "type": "video",
        "video_id": "sVcwVQRHIc8",
        "title": "Learn RAG From Scratch - Python AI Tutorial",
        "url": "https://www.youtube.com/watch?v=sVcwVQRHIc8",
        "duration_text": "2:33:11",
        "view_count": 1258310,
        "published_time": "1 year ago",
        "thumbnail": "https://i.ytimg.com/vi/sVcwVQRHIc8/hq720.jpg",
        "channel": { "id": "UC8butISFwT-Wl7EV0hUK0BQ", "name": "freeCodeCamp.org", "url": "https://www.youtube.com/@freecodecamp" }
      }
    ],
    "next_cursor": "EpMD...",
    "has_more": true
  },
  "credits_used": 2,
  "credits_remaining": 998
}

Guardrails

  • The search parameter is search, not query — this is different from other Scavio endpoints.
  • Credits are not uniform: search and shorts cost 2, streams costs 3, transcript costs 8, and every other endpoint costs 1. Inform the user before paginating through many pages, especially transcripts.
  • /metadata is a deprecated alias of /video; use /video in new code.
  • Stream URLs from /streams expire (expires_in_seconds) — use them promptly.
  • Never fabricate video IDs, view counts, transcripts, comments, or channel data. Only return API data.

Failure handling

  • 400 means an invalid parameter (e.g. a missing video_id or channel_id) — fix and retry.
  • 401 means the API key is invalid or missing. Check SCAVIO_API_KEY.
  • 429 means rate or usage limit exceeded. Wait before retrying. See https://scavio.dev/docs/rate-limits?utm_source=clawhub&utm_medium=skill&utm_campaign=youtube-data-api.
  • 502 / 503 mean upstream is temporarily unavailable. Wait a few seconds before retrying.
  • If search returns no results, suggest different keywords or relaxing filters.
  • If a transcript is unavailable in the requested language, retry with language: en or check /video captions[] for available languages.
  • If SCAVIO_API_KEY is not set, prompt the user to export it before continuing.

LangChain

pip install langchain-scavio==4.0.2
from langchain_scavio import ScavioSearchTool
tool = ScavioSearchTool(engine="youtube")

相关技能

以 AI 机器人身份加入视频会议,提供语音、虚拟形象与屏幕共享四种模式。

作者 johnpatternai22 次安装8 星标

在本地磁盘以分类纯 Markdown 文件保存需要长期留存的事实,与智能体内置记忆并存。

作者 Iván559 次安装18 星标

把自然语言描述转为结构化 JSON,并由 mcp-diagram-generator MCP 服务生成 Draw.io、Mermaid 或 Excalidraw 图表文件。

作者 nssa.io1.0k 次安装47 星标

从 AdMapix API 拉取广告创意、应用、榜单和收入预估等数据,原样返回结构化 JSON。

作者 fly0pants4.3k 次安装296 星标

诊断生产力系统反复失效的根因,给出最小干预——容量测算、瓶颈定位、可靠的本地记录。

作者 Iván855 次安装69 星标

scavio-ai 的更多技能

浏览全部技能

Pull a Facebook page's profile, posts, reels and photos, one post with its comments, a single reel/video with downloadable URLs, a public group and its posts, an event, and hashtag posts. 11 endpoints, 1 credit each, structured JSON.

作者 scavio-ai3 次安装

Search the Meta Ad Library by keyword or Facebook Page id and walk full cursor pagination through every ad, with creative, run dates, platforms and political spend. 3 endpoints, 1 credit per page.

作者 scavio-ai3 次安装

Search live or SOLD eBay listings, read a listing in full, and look up a seller's profile card as structured JSON. 3 endpoints, 1 credit each. Sold-listing search is the price-research feature eBay itself hides.

作者 scavio-ai1 次安装