YouTube Channel Shorts API
A channel's Shorts grid, newest first, about 48 per page. Shorts carry no duration or publish date on this surface, because YouTube does not render either, so both are null rather than guessed. With extra_fetch=true, each Short is fetched individually to fill its exact view count, publish date and duration. Costs 1 credit per item fetched, up to the page size. Calls cost 1 credit each. A cache hit is free, and a failed or empty response is never charged.
Try it
Prefilled with the request that produced the example below. No key yet? Get a free key.
Request
/v1/youtube/channel/shorts| Parameter | Type | Required | Description |
|---|---|---|---|
| handle | string | yes | Handle (@mrbeast), channel id (UC…), or full URL |
| cursor | string | no | pagination.cursor from a previous response |
| extra_fetch | boolean | no | When true, fetches each item's own page to fill fields the list page leaves null. Costs 1 extra credit per page fetched, up to the page size. |
Also accepts cache_max_age (a hit costs 0 credits) and include_raw (returns the untouched upstream payload under raw).
curl "$API/v1/youtube/channel/shorts?handle=%40MrBeast&cache_max_age=7d" \
-H "x-api-key: $KEY"const query = new URLSearchParams({
handle: '@MrBeast',
cache_max_age: '7d',
});
const response = await fetch(`${API}/v1/youtube/channel/shorts?${query}`, {
headers: { 'x-api-key': KEY },
});
const body = await response.json();
if (!body.success) throw new Error(body.error.code);
// 1 credit, 0 on a cache hit
console.log(body.data, body.meta.creditsCharged);import os, httpx
r = httpx.get(
f"{os.environ['API']}/v1/youtube/channel/shorts",
params={
"handle": "@MrBeast",
"cache_max_age": "7d",
},
headers={"x-api-key": os.environ["KEY"]},
timeout=30,
)
body = r.json()
if not body["success"]:
raise RuntimeError(body["error"]["code"])
print(body["data"], body["meta"]["creditsCharged"])Example response
Captured on , with raw removed and lists cut to two items. A live call returns current data.
{
"success": true,
"data": {
"items": [
{
"platform": "youtube",
"id": "Y8IJi7iP5vk",
"type": "short",
"url": "https://www.youtube.com/shorts/Y8IJi7iP5vk",
"title": "Last To Fall Wins",
"text": null,
"authorId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"authorHandle": "MrBeast",
"authorName": "MrBeast",
"thumbnailUrl": "https://i.ytimg.com/vi/Y8IJi7iP5vk/sardefault.jpg?sqp=-oaymwEdCJUDENAFSFWQAgHyq4qpAwwIARUAAIhCcAHAAQY=&rs=AOn4CLBCD5kD2ChNG0mXy-4Md6e0t61Umw",
"mediaUrls": [],
"durationSeconds": null,
"viewCount": 78000000,
"likeCount": null,
"commentCount": null,
"shareCount": null,
"hashtags": [],
"mentions": [],
"isSponsored": null,
"publishedAt": null,
"fetchedAt": "2026-10-21T01:55:26.401Z"
},
{
"platform": "youtube",
"id": "aNI2jv7lBPQ",
"type": "short",
"url": "https://www.youtube.com/shorts/aNI2jv7lBPQ",
"title": "Giving $10,000 To A Random Subscriber",
"text": null,
"authorId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"authorHandle": "MrBeast",
"authorName": "MrBeast",
"thumbnailUrl": "https://i.ytimg.com/vi/aNI2jv7lBPQ/sardefault.jpg?sqp=-oaymwEdCJUDENAFSFWQAgHyq4qpAwwIARUAAIhCcAHAAQY=&rs=AOn4CLAR2QzmId6SWzI4Xfjg0ytKJOT4BA",
"mediaUrls": [],
"durationSeconds": null,
"viewCount": 41000000,
"likeCount": null,
"commentCount": null,
"shareCount": null,
"hashtags": [],
"mentions": [],
"isSponsored": null,
"publishedAt": null,
"fetchedAt": "2026-10-21T01:55:26.401Z"
}
]
},
"pagination": {
"cursor": "eyJ0IjoiNHFtRnNnSzlDeElZVlVOWU5rOVJNMFJyWTNOaVdVNUZOa2c0ZFZGUmRWWkJHcUFMT0dkaE1FTkNjWGhEUmt0MVEwUkxja05CYjJ0T2JVcHFUa2ROTUUxWFRYUk5SRUYzVFVNd2VVNXFZM2xNVkdkNFdtcFpkRnBFVW0xT1ZGRXpXbXBCZDA5RVkzZEZiMEZKVVZkYWVsWXlkSE5PUjBad1VsVXhjMk5WVmtWU2VtczFaVWRWTTFJeFNrbGFXRXByV1ZoU1dWUldWVEJOV0ZwWFZqTkdSRlY2U2s1YU1tUTJVVEpKTWxOVVRuaGlWV3hRVG1wT1ZtSnJUbmhSVjAwMVkwaHdiMDFVVmtsWmJVbDRXbXRhV0U5RlZUSlZSbU41VGxkV2RtTXpaelZqVkZaTVVURmtlRmRzVG5kWk0yUndWRWhvZDFwc1NuZFdNbFpyVVd4R05GTldhRnBrUjNneFUxTXhTa3hVWkdGWldHUnNXVk14UkZsdFRYbFNNVVpPVFcxUmQxZElVVEJhUkdSUlkxVmtObEpGTlU5bFZsWkVVbTFhUzFvd1RuVmhiV3Q0VXpBeGNtVlhkM2RpYm13eVZUTkNObFJWUmt0WFZtUjZXVE5vV0ZscVVYZFVhMlJzV0RCc2NtUnFSbk5VVm05NldXcGtjbUZxU1RGaWJrcHpZbTE0YVdSSVozcFNhemxPVDFka2JXTnRSbXBTYmtKS1dWVjBjbE5IVWtkV01EaDNVV3hOZVdKV1FrVmthMUoxV1hwV1VWcHRiSGxoTTFKM1UwVjRNbGRYVmpSWmFsRjVXbXhKTkdSVmRHWlphMVV5WVVoT1NrMVhTbFpXTWpWSFltNXdjVmRHVGtSVGJFSm9VakZKZDAxdWFFUmhSVnByVVRFNVRHTkdPVWRrYld4UVVqTnJlRlJ0WkZGa2JGWm1XV3BTTkZWVmQzaFRlVEZTWWxoV2VFNVdPSHBrTUdSQ1drWkdjbFl5ZERaU1dHeFVWakJ3ZDJNeFpFTmxhMHB0VlVNd05HVlVUa2xoUms1WFlWWlNSbUpzU2pSU1IyUjBUVEIwU21Sck5VaGpWa3BaVmpGdk5GUnNRWGhqYWtaMVZWVm9TbHBJU2pSa2JYaFFWa1Z3U2xkc1FteGlhMlF4VVdwa01VMXVUWHBpTVdjd1ZFaFNZVkZxYUVKTk1tUlBWakZDTTFaWFNUQmFibWQ2WVRJd05GbFlXVEJXYkZadFVUSmplbUZWY0haUmVURnlVVmRTUlZwc09WRmpSVzgwVmxoUk0xWkdhRzVsUm1kNVRsZDBZVTFJY0RaUlZXTXpXakZ3TUU5Rk9EQlRla3BvWXpGYWExUnVhM2xpVlZwWFV6STVZVTR4YUROa00wa3lWVEpSZUZGWVVtMVZSMDVSV0RBMVVsWnJkRmhQVkdnMVpETm5NVmxyWkdaTlZUbFBaV3hvV0ZaSGFHRmFNRkpaWkRGb1ZGcEdaSEJrTTBKSVZGWlNNR015YUdsYWJYQXhaVWhrYTFaWVpIbFRWRkpFWVdzMWFWTXdaRFJhTVdoRFZEQXhOVlJIUm01VVZWWklXREIwZWxaRmRIWmlNVGxyV1hwa1ZHVnJlSEJqUm14Q1UyMTRjMXBIZEVwaGExSldZMnBzWVUxWGNHaFJlbEpNVmpCV2NrNVRNVTlOTVZveFZtdHdNbFZHYkZsU1JVWjJUVmMxZVZWcVVUVmtiVGxFVVZkb2IyUnNTakpTV0VveFdUSldNbE5wTVZCak1HUkpZMWRyTkZKVVdqRmFiRVpQVFZWNE5XUlhjRFJsYW14M1dtMVpkRTVyZEZGbFJ6a3hVM3BvYkZKSGJIUk9WWE13Vm1zMWMxbFhPVTFQUjFvMVZsZE9NMW93TVZOV1ZsSjBWVlZ3V2swelJtNVNSazVEWldwS1dGWkhOV3hUVkdSRFkxVlJlR0p1VGpSTlZUaDBVakphVEZWVk5IUlBSVm8wWVhreFMyUXpWbnBVYTJoelVUQnNRbFl4U1hwaVNFWlVUbTVzVFZsVlpESlRNMXA2WWxVMVNscEhaSFJZTVZaMlVqRmtSMVpWUm1sYWJHZ3hVV3RLUkdWRVJrZE5iVVpyVG1wU1IxSllhRnBVUjJoMVlVVkdhRlZ1YkVoUFZXUlNXVEZ3TTFwdGVEWk9iRkp4VW10S1ZtUnJlRUpUTTBwVlVWWkNVV1ZxVm1aV1ZrSllWRlpPVm1WVmRGaGFibWhLV1cxYWFtSlZUalZhUld4clZUQnNiazFYVGpSU1NFcElaV3M1VDAxcWFFUk5SVXBvVDBWYVUxVjZaR1paYXpCM1pGVlpNbEpWWTNSUFZXeE1ZVmRhYWxKcmJGcFVhMHB0VDBWT2IxVkVVa3BPTWtaMFdsZEdiVk5yZUhGaWVtUklUMVJTZGxveVJrNVNNR2N5V1ZWNGNsbFhNVXRUYTFabVUwVk5NRTR5Umt4WFZYaEtVMnQwY0ZOWGRIQmlhMmcyV1hwV2VHTkdPVVJXVkZKSFdWaEtlR05WVWxwWGJtaHdZbnBXTW1SNlRrcGpNRTE2WkVWU01WVnJPRE5oYTA1SVRtNUpNRll4WkhKU1YxRjBZVlYwU21GRVNqVlVlR2RGIiwidiI6IkNndENjVUZYZEhVellrazRieWlPdC1EV0JqSUtDZ0pFUlJJRUVnQWdUR0t6QWdxd0FrTjFSVUpEUVZWVGEzZEZRamhSV25WYWNGOHRkR2RVVTBZemIxQkRhMGxZTWs1UVJHbGFRbGcwVnpCYWRYUklOQzFoWWxaaU5EaFBVWGxuTWxsSU16UjJOakZOTFVrNVh5MUpOMGhRTmtWdVRUaEZSVlpVYUdnME1rNDVVVVpVTlVWNGFVcFpOMlUyTkdObVIySnZWa05WWDBaeGQyUllaRVpJV21wWE5GSnJZVEZoWldkd2IyVXlMWEpuWWpSNE0weHdUbVozYmpkZk5IVkJibXB3WW13NE5uVjBSMkl0WlZCTE4wUjZNRlZhYVZRd1RtVnJlSE5ETVhNMWVURmFXamhRVjNKVFkweE5Zamt0VFRkTFoyOUNWRXBHUVdRMmNHNVZPRGRTUjJaU1dVcHBWMmxqYjAxc2EzRm5XVGR4UXpNeFYwUmlkV0Y0VkZaTGJGVktTRnBOWHpWUVdXRXdRbVJmZWtKclZFVTBibWRMTVdwbmJVTTRla0YwYlZKMVNrczRTMGx2YkdGUVJYQm9hbVJXVFVzJTNEIiwiYyI6eyJhdXRob3JJZCI6IlVDWDZPUTNEa2NzYllORTZIOHVRUXVWQSIsImF1dGhvckhhbmRsZSI6Ik1yQmVhc3QiLCJhdXRob3JOYW1lIjoiTXJCZWFzdCJ9fQ",
"hasMore": true,
"count": 48
},
"meta": {
"platform": "youtube",
"endpoint": "youtube.channelShorts",
"creditsCharged": 1,
"cached": false,
"cacheAgeSeconds": null,
"durationMs": 208,
"requestId": "req_muowacxfse8uuhmf92ek"
}
}Returns
Returns a list of Post in data.items.
Cost and behaviour
| Credits | 1 per live request, 0 on a cache hit |
| Cacheable | yes: cache_max_age accepts a cached copy |
| Batchable | yes: usable as a target in POST /v1/jobs/batch |
| Subscribable | yes: as often as every 3600 seconds, firing a webhook only on a change |
Other YouTube endpoints
- /v1/youtube/channel Channel details
- /v1/youtube/channel-videos Channel videos
- /v1/youtube/channel/community-posts Channel community posts
- /v1/youtube/channel/lives Channel live streams
- /v1/youtube/channel/playlists Channel playlists
- /v1/youtube/community-post Community post details
- /v1/youtube/playlist Playlist contents
- /v1/youtube/search Search videos