Powered by YouTube Data API v3

Upload YouTube Shorts in Python: YouTube Data API v3, Simplified

The YouTube Shorts API lets you upload Shorts programmatically through the YouTube Data API v3 videos.insert endpoint. Multi Upload Tool wraps it in one function call (upload, thumbnail, playlist, and scheduling) with no OAuth flow, no Google Cloud project, and no quota math.

free
to start

quick start

Install. Connect. Upload. Three steps.

Python
youtube_shorts_upload.py
python
from multi_upload_tool import MultiUploadClient
client = MultiUploadClient(api_token="YOUR_API_TOKEN")
upload = client.uploads.upload(
account_id=123, # numeric account ID from dashboard
file_path="short.mp4",
title="How to bake sourdough in 60s #shorts",
tags=["shorts", "baking", "sourdough"],
privacy_status="public", # or "private" / "unlisted"
thumbnail_path="thumb.jpg", # optional custom 1080x1920 thumbnail
)
print(upload)
# {"success": True, "data": {"uploadId": 789, "status": "pending"}}
Node.js / TypeScript
youtube-shorts-upload.ts
typescript
import { MultiUploadClient } from "multi-upload-tool";
const client = new MultiUploadClient({ apiToken: "YOUR_API_TOKEN" });
const result = await client.uploads.upload({
accountId: 123, // numeric account ID from dashboard
filePath: "./short.mp4",
title: "How to bake sourdough in 60s #shorts",
tags: ["shorts", "baking", "sourdough"],
privacyStatus: "public", // "private" | "unlisted" | "public"
thumbnailPath: "./thumb.jpg", // optional custom thumbnail
scheduledFor: "2026-04-01T18:00:00Z", // optional scheduling
});
console.log(result);
// { success: true, data: { uploadId: 789, status: "pending" } }

Also available: call the REST endpoint directly. Full SDK docs →

thumbnails & playlists

Custom thumbnails + playlist assignment in one call

Most schedulers don't support custom thumbnails for Shorts. We do. Upload a 1080×1920 image and assign the Short to a playlist in the same API call, using YouTube Data API v3.

Custom thumbnails per Short

Stand out in the Shorts shelf with a custom 1080×1920 thumbnail. Increases tap-through rate vs. auto-generated stills.

Automatic playlist assignment

Group related Shorts into series. Viewers who find one Short see the full playlist, compounding session time and algorithm signals.

SEO metadata per Short

Set unique titles (100 chars), descriptions, tags, and category ID. YouTube Search indexes Shorts: proper metadata means search visibility.

Private → Public scheduling

Upload as private, schedule the visibility flip. Useful for coordinated launches, content calendars, and embargo-based publishing.

youtube_thumbnail_playlist.py
python
from multi_upload_tool import MultiUploadClient
client = MultiUploadClient(api_token="YOUR_API_TOKEN")
# Upload Short with custom thumbnail + playlist assignment
upload = client.uploads.upload(
account_id=123,
file_path="short.mp4",
title="30 Days of Cooking Tips - Day 1 #shorts",
tags=["shorts", "cooking", "tips"],
privacy_status="public",
thumbnail_path="thumbnail_day1.jpg", # 1080×1920 JPEG
extra={
"playlistId": "PLxxxxxxxxxxxxxxxx", # your playlist ID
"categoryId": "26", # YouTube category: Howto & Style
"madeForKids": False,
}
)
print(upload)
# {"success": True, "data": {"uploadId": 790, "status": "pending"}}

youtube data api v3

Upload a YouTube Short with the YouTube Data API v3 in Python

Here's the official, do-it-yourself path with google-api-python-client: authorize with OAuth 2.0, then call videos.insert with a resumable MediaFileUpload. Add #Shorts to the title and upload a vertical 9:16 clip (up to 3 minutes). YouTube classifies it as a Short automatically.

It works, but you own the hard parts: a Google Cloud project, OAuth consent screen approval, hourly token refresh, server-side transcoding to H.264/H.265, and a 1,600-unit-per-upload quota that caps you at roughly 6 Shorts/day. The 3-line SDK above handles all of it for you.

Skip the boilerplate: use the SDK
upload_short_data_api_v3.py
python
# pip install google-api-python-client google-auth-oauthlib
import google_auth_oauthlib.flow
import googleapiclient.discovery
from googleapiclient.http import MediaFileUpload
# 1. OAuth 2.0: opens a browser to authorize your Google account
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
"client_secret.json",
scopes=["https://www.googleapis.com/auth/youtube.upload"],
)
credentials = flow.run_local_server(port=0)
youtube = googleapiclient.discovery.build("youtube", "v3", credentials=credentials)
# 2. videos.insert: put #Shorts in the title so YouTube classifies it as a Short
request = youtube.videos().insert(
part="snippet,status",
body={
"snippet": {
"title": "How to bake sourdough in 60s #Shorts",
"description": "Quick recipe #Shorts",
"tags": ["shorts", "baking"],
"categoryId": "26", # Howto & Style
},
"status": {"privacyStatus": "public", "selfDeclaredMadeForKids": False},
},
# Resumable upload: you own retries, token refresh & transcoding
media_body=MediaFileUpload("short.mp4", chunksize=-1, resumable=True),
)
response = request.execute()
print(response["id"]) # the new video ID

reality check

Why not build your own YouTube Data API integration?

YouTube Data API v3 requires a Google Cloud project, OAuth 2.0 setup, API quota requests, and scope approvals. That's before handling token refresh, video transcoding, or error retries.

OAuth2 token refresh logic: expires in 1 hour

We manage the full Google OAuth2 lifecycle. Tokens never expire for your code.

YouTube quota: only ~6 uploads/day by default

We request quota increases from Google on your behalf for high-volume accounts.

Codec hell: must be H.264/H.265 MP4, exact specs

Upload any format. We transcode to YouTube specs server-side via FFmpeg.

Thumbnail API is a separate endpoint + auth scope

Pass thumbnailPath in your upload call. We handle the separate thumbnail upload.

Playlist assignment is a 3rd API call

Pass extra.playlistId once. We handle the playlist insertion call automatically.

Ship in a weekend, not 3 months

Building YouTube + TikTok + Instagram integrations from scratch takes months. Our API gets you to production in a day.

Official YouTube Data API v3

We use YouTube's official Data API, not browser automation or unofficial endpoints. Full 1080p quality, zero ToS risk.

Webhooks: upload.completed · upload.failed

Register your endpoint and receive JSON payloads in real-time when uploads succeed or fail. No polling needed.

Same API, 5 platforms

Same endpoint, same request format for YouTube Shorts, TikTok, Instagram Reels, Facebook, and LinkedIn.

POST /api/v1/upload

YouTube Shorts API Parameters

Full control over every YouTube-specific setting: title, tags, thumbnail, playlist, privacy, scheduling.

parametertypedescriptionreq
accountId
numberConnected YouTube channel ID from your dashboard.yes
filePath
stringPath to the video file. MP4, MOV, WebM: any codec. We transcode to H.264/H.265 at 1080p for YouTube.yes
title
stringVideo title. Up to 100 characters. Include #shorts for YouTube to classify as a Short. Supports keywords for SEO.yes
tags
string[]Array of tags for YouTube search indexing. e.g. ['shorts', 'cooking', 'recipe']. Increases discoverability.no
privacyStatus
enumpublic · private · unlisted. Default: public. Use private + scheduledFor to embargo-publish.no
thumbnailPath
stringPath to custom thumbnail image. 1080×1920 JPEG/PNG. Increases click-through rate in the Shorts shelf.no
scheduledFor
ISO 8601Schedule publish time. e.g. 2026-04-01T18:00:00Z. We switch visibility from private to public automatically.no
description
stringVideo description. Supports keywords and links. YouTube indexes descriptions for search.no
extra.playlistId
stringAdd Short to an existing playlist by ID. Increases session watch time and algorithm signals.no
extra.categoryId
stringYouTube category ID. e.g. '22' (People & Blogs), '26' (Howto & Style), '17' (Sports).no
extra.madeForKids
booleanMark video as made for children (COPPA compliance). Default: false.no

Auth header: x-api-key: YOUR_API_TOKEN · Base URL: https://api.multi-upload-tool.com/api/v1

bulk upload

Post the same Short to YouTube, TikTok & Reels in one call

Pass a list of account IDs. The SDK routes to the bulk endpoint and fans out in parallel: one video, all platforms, one API call.

  • YouTube Shorts: tags, thumbnail, playlists, categoryId
  • TikTok: privacy_level, disable_duet, disable_stitch
  • Instagram Reels: share_to_feed, cover_timestamp
  • Facebook Reels: target audience, geo-targeting
  • LinkedIn: visibility, document description
cross_post.py
python
from multi_upload_tool import MultiUploadClient
client = MultiUploadClient(api_token="YOUR_API_TOKEN")
# Post same Short to YouTube + TikTok + Instagram in one call
upload = client.uploads.upload(
account_id=[123, 456, 789], # YouTube, TikTok, Instagram
file_path="short.mp4",
title="My viral Short, posted everywhere",
scheduledFor="2026-04-01T18:00:00Z",
)
print(upload)
# {"success": True, "data": {"uploadId": 800, "status": "pending"}}

who uses it

Who uses the YouTube Shorts upload API?

SaaS developers building social publishing tools

Add YouTube Shorts publishing to your platform without a Google Cloud project. Ship the integration in a sprint.

No OAuth setupPython & Node.js SDKWebhooks included

Marketing agencies managing multiple channels

Connect dozens of client YouTube channels. Bulk schedule Shorts with metadata per channel, get webhook alerts on publish.

Multi-channelBulk schedulingWhite-label ready

Content repurposing pipelines

Auto-clip 10-minute YouTube videos into Shorts. Add custom thumbnails and push to TikTok simultaneously.

Any video sourceCross-platform fanoutAuto-thumbnail

"30 Days of…" content series

Upload 30 Shorts, assign each to a playlist, schedule one per day. Viewers who find one Short see all 30, compounding views.

Playlist seriesScheduled releaseCompounding reach

integration guide

How it works in 4 steps

01

Install the SDK

pip install multi-upload-tool or npm install multi-upload-tool. Prefer raw HTTP? POST to https://api.multi-upload-tool.com/api/v1/upload with header x-api-key. No SDK required.

02

Connect your YouTube channel via Google OAuth

Dashboard → Connect Account → YouTube → authorize with Google. We store and auto-refresh your tokens. Note your numeric accountId. That's all you need in code.

03

POST your Short: file or URL

Multipart file upload, or a public video URL (S3, CDN, Cloudinary). MP4, MOV, WebM, AVI: any codec. We transcode to H.264/H.265 at 1080p, 9:16 ratio server-side.

04

Receive an uploadId, done

API responds immediately with uploadId and status: pending. Register a webhook for upload.completed events, or poll GET /upload/:id for current status.

FAQ

YouTube Shorts API: common questions

Can I upload custom thumbnails for YouTube Shorts via API?

Yes. YouTube now supports custom thumbnails for Shorts via Data API v3. Pass thumbnailPath (Python) or thumbnailPath (Node.js) pointing to a 1080×1920 JPEG or PNG. This is a feature many competing tools don't support yet because it requires the latest API capabilities.

Can I upload YouTube Shorts with Python?

Yes. pip install multi-upload-tool, then call client.uploads.upload(account_id=123, file_path='short.mp4', title='My Short #shorts', tags=['shorts']). The SDK handles Google OAuth token management, video transcoding, and retry logic automatically.

How do I upload a YouTube Short with the YouTube Data API v3 in Python?

The official path: pip install google-api-python-client google-auth-oauthlib, authorize with OAuth 2.0 (scope youtube.upload), then call youtube.videos().insert(part='snippet,status', body={...}, media_body=MediaFileUpload('short.mp4', resumable=True)). Put #Shorts in the title and upload a vertical 9:16 clip up to 3 minutes. You're responsible for OAuth token refresh, server-side transcoding, and the 1,600-unit-per-upload quota (~6 Shorts/day). See the full working example above, or use our SDK to skip all of it in 3 lines.

Does YouTube SEO matter for Shorts?

Yes. YouTube indexes Shorts in Search and Suggested results, not just the Shorts shelf. A Short with a keyword-rich title like 'How to make sourdough bread in 60 seconds #shorts' can rank in YouTube Search and appear alongside regular videos. Titles, descriptions, and tags all contribute to discoverability.

Can I schedule YouTube Shorts via API?

Yes. Upload with privacyStatus='private' and pass scheduledFor (ISO 8601 timestamp). Our system queues the visibility change and switches it to public at the exact scheduled time via YouTube Data API v3, even if your server is offline.

How does playlist assignment work for Shorts?

Pass extra.playlistId in your upload call. Playlists increase session duration because viewers watch multiple Shorts in sequence. This signals quality to YouTube's algorithm. You can create and list playlists via GET /accounts/:id/playlists.

What video formats does the YouTube Shorts API accept?

YouTube requires H.264/H.265 encoded MP4, 9:16 aspect ratio, and up to 3 minutes long (raised from 60 seconds in late 2024), up to 256GB. Our API accepts any format (MP4, MOV, WebM, AVI, MKV) and automatically transcodes to YouTube's specifications using server-side FFmpeg. No pre-processing needed.

How many YouTube Shorts can I upload per day via API?

YouTube Data API v3 defaults to 10,000 quota units/day. A single video upload costs ~1,600 units (~6 Shorts/day). For higher volume, we can request a quota increase from Google on your behalf. Contact our team if you need more than 6 uploads/day per channel.

What's the difference between uploading Shorts here vs. YouTube Studio?

YouTube Studio handles one video at a time with manual metadata entry. With Multi Upload Tool, you can upload 50+ Shorts in one batch via dashboard or API with titles, descriptions, tags, playlists, thumbnails, and scheduled times pre-filled. You also get cross-platform publishing: the same video posts to TikTok and Instagram simultaneously.

Start posting YouTube Shorts via API today

Free plan available: 13 uploads/month, no credit card. Your first Short live in under 10 minutes.

See also: YouTube Shorts Scheduler · Full Social Media API