Channel Videos
Immutable Catalog Entry
This descriptor comes from the active versioned Portal catalog.
- Contract tier:
legacy - Risk:
read - Catalog version:
scrape-creators-2026.07.12.1 - Descriptor hash:
e0615e21cbadd7750e637b7b7b9bd5db9330aff52f4072229e1770da86af5868
Use this when you need ScrapeCreators YouTube data from GET /v1/youtube/channel-videos for Channel Videos. Fetches a paginated list of videos uploaded by a YouTube channel, including each video's title, URL, thumbnail, view count (views), publish date, duration, and description. Supports sorting by latest or popular, and use the continuationToken to page through all results. Optionally include extras like like count, comment count, and descriptions for each video. Returns the ScrapeCreators response in the standard MCP envelope with ok/data/error/meta. This is read-only. Requires the portal grant header and a ScrapeCreators BYOK API key.
Request Body
{
"jsonrpc": "2.0",
"id": "scrape-creators-scrape-creators-youtube-get-v1-youtube-channel-videos-example",
"method": "tools/call",
"params": {
"name": "scrape-creators.scrape_creators_youtube_get_v1_youtube_channel_videos",
"arguments": {
"body": "",
"sort": "latest",
"handle": "",
"params": "",
"compact": "",
"username": "",
"channelId": "",
"max_items": "",
"include_raw": false,
"path_params": ""
}
}
}
Arguments Schema
{
"type": "object",
"properties": {
"body": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Body",
"default": null,
"description": "JSON request body for provider endpoints that accept one."
},
"sort": {
"enum": [
"latest",
"popular"
],
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sort",
"default": null,
"description": "Sort by latest or popular"
},
"handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Handle",
"default": null,
"description": "YouTube channel handle"
},
"params": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Params",
"default": null,
"description": "Optional advanced query parameter object. Prefer the documented top-level parameters when available."
},
"compact": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Compact",
"default": null,
"description": "When true, trims large list payloads before returning them to the agent."
},
"username": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Username",
"default": null,
"description": "Alias for handle: YouTube channel handle"
},
"channelId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Channelid",
"default": null,
"description": "YouTube channel ID"
},
"max_items": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Items",
"default": null,
"description": "Maximum number of list items to return when compacting provider responses."
},
"include_raw": {
"type": "boolean",
"title": "Include Raw",
"default": false,
"description": "When true, returns both compact normalized data and the raw provider payload; this can be large."
},
"path_params": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Path Params",
"default": null,
"description": "Path template values for endpoints that expose path placeholders."
},
"includeExtras": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Includeextras",
"default": null,
"description": "This will get you the like + comment count and the description. To get the full details of the video, use the /v1/youtube/video endpoint. Honestly, if you use this param, the error rate is higher. We might deprecate this param in the future."
},
"cache_ttl_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Cache Ttl Seconds",
"default": null,
"description": "Optional cache lifetime for idempotent GET requests."
},
"confirm_high_cost": {
"type": "boolean",
"title": "Confirm High Cost",
"default": false,
"description": "Set true only when intentionally running a high-credit or write-intent request."
},
"continuationToken": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Continuationtoken",
"default": null,
"description": "Continuation token to get more videos. Get 'continuationToken' from previous response."
},
"is_paid_promotions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Is Paid Promotions",
"default": null,
"description": "Set to 'true' to search YouTube's public paid product placement / sponsorship / endorsement search surface. This returns normal YouTube videos where the creator declared paid promotion. Cannot be combined with filter, uploadDate, sortBy, type, duration, or includeExtras."
}
},
"additionalProperties": false
}
Output Schema
{
"type": "object",
"required": [
"ok",
"data",
"error",
"meta"
],
"properties": {
"ok": {
"type": "boolean",
"description": "Whether the local or provider operation completed successfully."
},
"data": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Bounded operation result when ok is true."
},
"meta": {
"type": "object",
"description": "Safe request, pagination, cache, and timing metadata.",
"additionalProperties": true
},
"error": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"description": "Safe structured error when ok is false."
}
},
"description": "Scrape Creators MCP normalized response envelope.",
"additionalProperties": false
}
Code Examples
- cURL
- Node.js
- Python
curl -X POST 'https://portal.madpanda3d.com/api/mcp' \
-H 'Authorization: Bearer mad_live_***' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": "scrape-creators-scrape-creators-youtube-get-v1-youtube-channel-videos-example",
"method": "tools/call",
"params": {
"name": "scrape-creators.scrape_creators_youtube_get_v1_youtube_channel_videos",
"arguments": {
"body": "",
"sort": "latest",
"handle": "",
"params": "",
"compact": "",
"username": "",
"channelId": "",
"max_items": "",
"include_raw": false,
"path_params": ""
}
}
}'
const response = await fetch('https://portal.madpanda3d.com/api/mcp', {
method: 'POST',
headers: {
Authorization: 'Bearer mad_live_***',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": "scrape-creators-scrape-creators-youtube-get-v1-youtube-channel-videos-example",
"method": "tools/call",
"params": {
"name": "scrape-creators.scrape_creators_youtube_get_v1_youtube_channel_videos",
"arguments": {
"body": "",
"sort": "latest",
"handle": "",
"params": "",
"compact": "",
"username": "",
"channelId": "",
"max_items": "",
"include_raw": false,
"path_params": ""
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://portal.madpanda3d.com/api/mcp'
headers = {
'Authorization': 'Bearer mad_live_***',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": "scrape-creators-scrape-creators-youtube-get-v1-youtube-channel-videos-example",
"method": "tools/call",
"params": {
"name": "scrape-creators.scrape_creators_youtube_get_v1_youtube_channel_videos",
"arguments": {
"body": "",
"sort": "latest",
"handle": "",
"params": "",
"compact": "",
"username": "",
"channelId": "",
"max_items": "",
"include_raw": false,
"path_params": ""
}
}
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
print(response.json())
Example Responses
- 200 Success
- 502 Upstream Error
{
"ok": true,
"message": "Tool scrape-creators.scrape_creators_youtube_get_v1_youtube_channel_videos executed successfully.",
"note": "Response shape varies by MCP tool. Inspect live responses for exact fields."
}
{
"ok": false,
"classification": "upstream_http_error",
"message": "Upstream MCP returned a non-success status."
}