Is there an API for YouTube Shorts?
Not a dedicated one from Google. The YouTube Data API returns Shorts, but as normal videos. It has no Shorts endpoint and no Shorts filter in search, and nothing on a video says it is a Short. A short length does not prove it either.
Openhandle reads Shorts directly. GET /v1/youtube/profiles/@{handle}/shorts lists a channel’s Shorts tab. GET /v1/youtube/search/posts?q={query}&type=short searches Shorts only. Every video in every answer has a type of video, short, or live.
Checked October 2026 · request and response run against the API · no affiliate links
curl "https://api.openhandle.dev/v1/youtube/profiles/@synthetic_youtube/shorts" \
-H "Authorization: Bearer $OPENHANDLE_API_KEY"import { OpenHandle } from '@openhandle/sdk';
const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
const page = await openhandle.youtube.profile('synthetic_youtube').shorts.list();
for (const short of page.data) console.log(short.url, short.metrics.views);{
"platform": "youtube",
"resource": "post",
"capturedAt": "2026-10-26T18:33:16Z",
"source": "live",
"data": [
{
"id": "synthvid001",
"type": "short",
"title": "Synthetic video 1",
"url": "https://www.youtube.com/shorts/synthvid001",
"approximateCreatedAt": "2026-10-25",
"duration": 30,
"thumbnail": { "url": "https://media.openhandle.dev/…", "width": 1080, "height": 1920 },
"metrics": { "views": 1200000, "isApproximate": true }
}
],
"meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}Trimmed to one Short and the fields this question needs. The channel is in the Test dataset, so you can run it on a free Test key.
What the YouTube Data API gives you
- —No Shorts field. The video resource has no field that says a video is a Short.
- —No Shorts search. search.list has a duration filter. "short" means under four minutes, which is not the same as a Short.
- —Mixed uploads. A channel’s uploads playlist holds videos and Shorts together.
What Openhandle gives you
| Job | Openhandle call |
|---|---|
| A channel’s Shorts | GET /v1/youtube/profiles/@handle/shorts |
| Shorts by keyword | GET /v1/youtube/search/posts?q=term&type=short |
| One Short with exact counts | GET /v1/youtube/posts/{videoId} |
| Comments on a Short | GET /v1/youtube/posts/{videoId}/comments |
| Other Shorts with the same sound | GET /v1/youtube/posts/{videoId}/sound-posts |
Start from a Shorts link? POST /v1/urls/fetch accepts youtube.com/shorts/ URLs and returns the Short with its id. Shorts lists show rounded view counts with isApproximate: true. Read the Short for the exact count.
When this does not work
These answers are definitive. Store them, do not retry them.
| Situation | Status | Code |
|---|---|---|
| The channel does not exist | 404 | PROFILE_NOT_FOUND |
| The Short does not exist | 404 | POST_NOT_FOUND |
| The cursor came from another channel | 400 | CURSOR_MISMATCH |
{
"error": {
"code": "PROFILE_NOT_FOUND",
"message": "This profile was not found.",
"requestId": "req_01m5…",
"retryable": false
}
}Every new workspace starts with 100 free live requests, no card needed.
Read next
More YouTube questions
Send your agent ahead.
Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.
100 free requests. No card needed.