# YouTube Shorts API: How to Upload Shorts with videos.insert

There's no separate YouTube Shorts API. Upload Shorts with videos.insert: the 3-minute and aspect-ratio rules, #Shorts, thumbnails, quota, and detection.

Canonical page: https://www.tryadeli.com/blog/youtube-shorts-api
Last updated: 2026-10-26

By Mika Reyes, Co-founder, Adeli. Published 2026-10-26.

## The short answer

There is no separate YouTube Shorts API. You upload a Short with videos.insert on the YouTube Data API v3, like any video. YouTube makes it a Short when it is square or vertical and up to 3 minutes long. No flag, hashtag, or endpoint is needed. Each upload costs 1 unit of a 100-a-day quota. Adeli publishes Shorts to YouTube with one POST request.

There is no separate YouTube Shorts API. You publish a Short with **`videos.insert`** on the YouTube Data API v3, the same method that uploads any video, and YouTube decides it's a Short from the file itself: **square or vertical, and up to 3 minutes long**. No Shorts flag, endpoint, or hashtag changes that.

That leaves the questions the API docs don't answer: which files become Shorts, whether `#Shorts` matters, what happens to thumbnails, and how to tell a Short apart afterwards. The general upload flow (resumable sessions, retries, upload errors) is in our [YouTube API upload video guide](https://www.tryadeli.com/blog/youtube-api-upload-video). Facts here come from Google's [Data API docs](https://developers.google.com/youtube/v3/docs/videos/insert) and YouTube Help, checked on 2026-10-26.

## Does YouTube have a Shorts API?

**No. YouTube Shorts use the regular YouTube Data API v3.** The [`videos.insert` reference](https://developers.google.com/youtube/v3/docs/videos/insert) doesn't mention Shorts, and the [video resource](https://developers.google.com/youtube/v3/docs/videos) has no Shorts property. Searches for a "YouTube Shorts publish API" or "post YouTube Shorts API" all land on the same method:

| What you want | YouTube Data API v3 method |
|---|---|
| **Upload a Short** | `videos.insert` |
| **Set a thumbnail** | `thumbnails.set` (see the caveats below) |
| **Check processing** | `videos.list` with `part=processingDetails,status` |
| **Read Shorts analytics** | YouTube Analytics API, `creatorContentType` dimension |

## What makes a video a YouTube Short?

**A video is a YouTube Short when it has a square or vertical aspect ratio and runs up to 3 minutes.** YouTube's [three-minute Shorts help page](https://support.google.com/youtube/answer/15424877) says videos uploaded after October 15, 2024 that meet both rules "will be categorized as Shorts on YouTube."

| Your file | Result |
|---|---|
| **9:16 vertical, 45 seconds** | Short |
| **1:1 square, 2 minutes 50 seconds** | Short |
| **9:16 vertical, 3 minutes 20 seconds** | Long-form video |
| **16:9 horizontal, 30 seconds** | Long-form video |

Todd Sherman, then Director of Product Management for YouTube Shorts, announced the 3-minute limit on the [YouTube Blog](https://blog.youtube/news-and-events/tall-updates-coming-to-shorts/) on October 3, 2024:

> "This change applies to videos that are square or taller in aspect ratio, and won't affect any videos you uploaded before October 15."

For your pipeline, that means **the exported file decides whether YouTube makes a Short.** If your product generates or edits video, check width, height, and duration before upload, because a 16:9 export or a 3-minute-10-second cut silently becomes a long-form video.

Two more rules from the same help page:

- **Official Artist Channels** follow the 3-minute rule only for uploads on or after **December 8, 2025**.
- **Shorts over 1 minute with an active Content ID claim are blocked** globally on YouTube, and aren't playable or recommended until the claim is resolved. Shorts under a minute aren't affected. If your users add music, keep claimed audio under a minute.

## How to upload a YouTube Short with the API

**Validate the file, then call `videos.insert` with the channel owner's OAuth token.** You need a Google Cloud project with the YouTube Data API v3 enabled and an OAuth token with the `youtube.upload` scope (setup is in our [YouTube API OAuth guide](https://www.tryadeli.com/blog/youtube-api-oauth)).

1. **Check the file.** Duration of 180 seconds or less, and height greater than or equal to width:

```bash
ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height:format=duration \
  -of csv=p=0 short.mp4
# 1080,1920
# 58.4
```

2. **Start a resumable upload.** Send the metadata to the upload endpoint:

```bash
curl -i -X POST \
  "https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json; charset=UTF-8" \
  -H "X-Upload-Content-Length: $FILE_SIZE_BYTES" \
  -H "X-Upload-Content-Type: video/mp4" \
  -d '{
    "snippet": { "title": "3 ways to cut onboarding time", "categoryId": "22" },
    "status": { "privacyStatus": "public", "selfDeclaredMadeForKids": false }
  }'
```

3. **Upload the bytes** with a `PUT` to the session URI from the `Location` header. A `201` returns the video resource and its ID.
4. **Poll processing** with `videos.list?part=processingDetails,status&id=<VIDEO_ID>` before you tell your user the Short is live.

**Set `status.privacyStatus` every time.** Google's reference says it defaults to public if you leave it out, but some uploads default to private based on the creator's account settings.

## Do I need #Shorts in the title or description?

**No. YouTube's definition of a Short is length plus aspect ratio, and `#Shorts` isn't part of it.** The help pages that define Shorts ([three-minute Shorts](https://support.google.com/youtube/answer/15424877) and [upload a Short](https://support.google.com/youtube/answer/12779649)) list only the duration and the square or vertical ratio. Adding `#Shorts` to `snippet.title` or `snippet.description` won't turn a horizontal video into a Short.

Hashtags still work as hashtags. Two things to know when your product writes the description:

- **Only three hashtags show above the title.** YouTube's [hashtag help](https://support.google.com/youtube/answer/6390658) says up to three of the hashtags in a description appear by the title; the rest stay in the description.
- **Links in Shorts descriptions aren't clickable.** YouTube's [link guide](https://support.google.com/youtube/answer/13748639) says URLs in Shorts descriptions and comments are non-clickable, to reduce spam. Don't build a Shorts feature around a link in the description.

## Can I set a YouTube Shorts thumbnail with the API?

**Not reliably. YouTube added custom Shorts thumbnails on July 24, 2026, but only for YouTube Partner Program creators, in YouTube Studio.** The [YouTube Blog post](https://blog.youtube/news-and-events/youtube-studio-custom-thumbnail-updates/) says Partner Program creators "can start uploading custom thumbnails for Shorts," and YouTube's [thumbnail help](https://support.google.com/youtube/answer/72431) says custom Shorts thumbnails are "currently only available to add in YouTube Studio on a computer," on verified accounts.

The API side hasn't caught up in the docs:

| | `thumbnails.set` |
|---|---|
| **Mentions Shorts?** | No |
| **Quota cost** | About **50 units** from the 10,000-unit pool |
| **Max file size** | 50 MB, `image/jpeg` or `image/png` |
| **Channel requirement** | Custom thumbnails need a verified channel |
| **Recommended Shorts size** | 9:16, 2160 × 3840 (Studio guidance) |

Sources: [`thumbnails.set` reference](https://developers.google.com/youtube/v3/docs/thumbnails/set) and [YouTube thumbnail help](https://support.google.com/youtube/answer/72431).

**Treat a Shorts thumbnail as best-effort.** Call `thumbnails.set` after the upload, read the response, and don't fail the post if it's refused. For everyone else, the fallback is choosing a frame in YouTube Studio or the mobile app, so put a strong frame early in the video.

## How do I tell if a video is a Short with the API?

**The YouTube Data API has no Shorts field, so you infer it from duration and dimensions, or use YouTube Analytics.**

- **Duration.** `videos.list` with `part=contentDetails` returns `contentDetails.duration` in ISO 8601, such as `PT2M45S`.
- **Aspect ratio, owner only.** `part=fileDetails` returns `videoStreams[].aspectRatio`, `widthPixels`, and `heightPixels`, but Google says this data "can only be retrieved by the video owner," and only once processing has made the file available.
- **Analytics.** The YouTube Analytics API's [`creatorContentType` dimension](https://developers.google.com/youtube/analytics/dimensions) has a `SHORTS` value, so you can split views and watch time for Shorts from long-form videos.

**The upload date matters too.** A vertical 2-minute video uploaded before October 15, 2024 is long-form, so duration and ratio alone can misclassify old uploads.

## What is the YouTube Shorts API quota?

**A Short costs the same as any upload: 1 unit from the Video Uploads bucket, which allows 100 `videos.insert` calls a day per project by default.** Google's [quota cost page](https://developers.google.com/youtube/v3/determine_quota_cost) gives every project 100 `videos.insert` calls and 10,000 units a day for other endpoints, reset at midnight Pacific Time.

| Call per Short | Cost | Bucket |
|---|---|---|
| `videos.insert` | 1 | Video Uploads (100 a day) |
| `thumbnails.set` | 50 | 10,000-unit pool |
| `videos.list` (status polling) | 1 per call | 10,000-unit pool |

**The thumbnail is the expensive part.** A thumbnail on every Short uses 50 units each, so 100 Shorts with thumbnails spend 5,000 units, half the pool. More uploads a day need Google's compliance audit and a quota extension, covered in [YouTube API upload video](https://www.tryadeli.com/blog/youtube-api-upload-video).

## Is there a faster way to publish YouTube Shorts?

**Yes: send the video to an API that already runs the YouTube integration.** [Adeli's YouTube API](https://www.tryadeli.com/product/youtube) holds the Google developer app, carries Google's review, and refreshes each channel's tokens. Your customers connect their own channels, and your product never handles a Google OAuth token.

From the [publish docs](https://www.tryadeli.com/docs/api/posts/publish-youtube):

- **No separate Shorts call.** A vertical or square video up to three minutes becomes a Short, through the same [`POST /api/v1/posts`](https://www.tryadeli.com/docs/api/posts/publish-youtube) request as any YouTube video.
- **Publish from a URL.** Send a public HTTPS `video.url` of up to 1 GB, and Adeli downloads it and uploads it to YouTube.
- **Thumbnails without failed posts.** The [multipart upload](https://www.tryadeli.com/docs/api/posts/upload-youtube-video-file) takes a video of up to 4 GiB and an optional JPEG or PNG thumbnail. When a channel can't use custom thumbnails, the response sets `thumbnail` to `not_allowed` and adds a warning instead of failing the upload.
- **Scheduling.** `publish_at` with `privacy_status: "private"` makes the video public at that time.

```bash
curl https://app.tryadeli.com/api/v1/posts \
  -H "Authorization: Bearer $ADELI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "youtube",
    "accountId": "'"$ACCOUNT_ID"'",
    "title": "3 ways to cut onboarding time",
    "privacy_status": "public",
    "made_for_kids": false,
    "video": { "url": "https://cdn.example.com/onboarding-short.mp4" }
  }'
```

If you're building an AI content tool that turns one idea into Shorts, Reels, and TikToks, the same [posting API](https://www.tryadeli.com/social-media-posting-api) publishes to Instagram and TikTok too. See how Adeli fits [AI content generation tools](https://www.tryadeli.com/use-cases/ai-content-generation).

## Frequently asked questions

### Is there a YouTube Shorts upload API?

No. Google's YouTube Data API v3 has no Shorts endpoint or Shorts parameter. You upload a Short with videos.insert, the same method as any video, and YouTube classifies it as a Short from its length and aspect ratio.

### How long can a YouTube Short uploaded through the API be?

Up to 3 minutes, if it's square or vertical. YouTube raised the limit from 1 minute for videos uploaded on or after October 15, 2024. A horizontal video, or one longer than 3 minutes, is published as a regular long-form video.

### Can I post YouTube Shorts with the API on a schedule?

Yes. videos.insert accepts status.publishAt on any upload, and Google's docs don't exclude Shorts. Upload the Short as private with a future publishAt time, and YouTube makes it public then.

### Can I get only Shorts from a channel with the YouTube Data API?

Not directly. The video resource has no Shorts field. You can filter by duration from contentDetails, and the video owner can read the aspect ratio from fileDetails. For analytics, the YouTube Analytics API's creatorContentType dimension separates Shorts from other content.

## Related Adeli pages

- [YouTube API for Developers](https://www.tryadeli.com/product/youtube.md): Publish, schedule, and read analytics for YouTube through one API. Adeli owns the YouTube developer app, token refresh, and Google review. Free to start.
- [Social Media Posting & Scheduling API](https://www.tryadeli.com/social-media-posting-api.md): Adeli's social media posting and scheduling API publishes to Instagram, TikTok, YouTube, Facebook, X, and Bluesky in one request, now or at a set time. Free to start.
- [Social Media API for AI Content Generation Tools](https://www.tryadeli.com/use-cases/ai-content-generation.md): Publish the videos and carousels your AI tool creates to TikTok, YouTube, Instagram, and more, then show users how they performed.
- [All posts on the Adeli blog](https://www.tryadeli.com/blog.md)

## About the author

Mika Reyes is the CEO behind Adeli and a tech and AI content creator. She was previously co-founder and CEO of Parallax, which was acquired by Phantom, and a product lead at LinkedIn. She is a Forbes 30 Under 30 honoree.
