Skip to content

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

GET/v1/youtube/channel/shorts
ParameterTypeRequiredDescription
handlestringyesHandle (@mrbeast), channel id (UC…), or full URL
cursorstringnopagination.cursor from a previous response
extra_fetchbooleannoWhen 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
curl "$API/v1/youtube/channel/shorts?handle=%40MrBeast&cache_max_age=7d" \
  -H "x-api-key: $KEY"
JavaScript
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);
Python
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.

response
{
  "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

Credits1 per live request, 0 on a cache hit
Cacheableyes: cache_max_age accepts a cached copy
Batchableyes: usable as a target in POST /v1/jobs/batch
Subscribableyes: as often as every 3600 seconds, firing a webhook only on a change

Other YouTube endpoints