YouTube Upload API Post Videos & Shorts Programmatically
The YouTube Data API without the Google Cloud setup. One REST endpoint to upload videos and YouTube Shorts — with custom thumbnails, multi-language subtitles, scheduling and privacy controls.
import { UploadPost } from 'upload-post';
const uploader = new UploadPost('your-api-key');
await uploader.upload('video.mp4', {
title: 'My YouTube Video',
platforms: ['youtube']
}); YouTube Video Uploader — Everything Included
A complete YouTube post API to automate videos and Shorts
YouTube Video Upload API
Upload long-form videos to YouTube with one REST call. Send a local file or a public video URL — we handle the YouTube Data API upload for you.
YouTube Shorts API
Upload YouTube Shorts via API. Post vertical short-form videos programmatically through the same endpoint as standard videos.
Custom Thumbnails
Set a custom thumbnail with a file or public URL (JPG/PNG/GIF/BMP, ≤ 2 MB). Note: custom thumbnails apply to standard videos only, not Shorts.
Multi-Language Subtitles
Attach multiple subtitle / caption tracks (SRT, VTT, ASS, TTML and more) in any language with indexed youtube_subtitle_file_{N} fields.
Schedule & Queue
Schedule premieres and releases with scheduled_date, or drop uploads into your auto-publishing queue.
Privacy & Compliance Controls
Set privacyStatus (public/unlisted/private), tags, categoryId, made-for-kids and synthetic-media declarations to stay policy-compliant.
Upload a Video to YouTube via API
One POST request to /api/upload — send a file or a public URL
curl -X POST https://api.upload-post.com/api/upload \
-H 'Authorization: Apikey your-api-key-here' \
-F 'user=my-profile' \
-F 'platform[]=youtube' \
-F 'video=@/path/to/video.mp4' \
-F 'title=My new YouTube video is live!' \
-F 'description=Everything you need to know in 5 minutes.' \
-F 'tags[]=tutorial' \
-F 'tags[]=howto' \
-F 'privacyStatus=public' \
-F 'thumbnail=@/path/to/thumbnail.jpg' {
"success": true,
"results": {
"youtube": {
"success": true,
"video_id": "dQw4w9WgXcQ",
"url": "https://youtu.be/dQw4w9WgXcQ",
"video_was_transcoded": true
}
},
"usage": { "count": 12, "limit": 100 }
}
Long uploads switch to background automatically — poll the
Upload Status
endpoint with your request_id. Full reference in the
Upload Video API docs.
Want a full walkthrough? Read our step-by-step guide to auto-post YouTube Shorts with scheduling and cross-posting to TikTok and Reels.
Pro tip: Shorts, thumbnails and subtitles in one call
To upload YouTube Shorts via API, just send a vertical short-form video to the same
platform[]=youtube endpoint — YouTube classifies it as a Short automatically.
Remember that custom thumbnails are not supported for Shorts; the
thumbnail / thumbnail_url fields only apply to
standard YouTube videos.
Rule of thumb: ship long-form videos with a custom thumbnail and
youtube_subtitle_file_0 / youtube_subtitle_language_0
tracks for accessibility and reach, and post Shorts as plain vertical clips. You can localize a single video into many
languages by adding more indexed subtitle tracks (_1, _2…)
in the same request.
YouTube API Parameters
The most-used fields for the YouTube upload endpoint
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | String | Yes | Video title. Required for YouTube. Use youtube_title to override the global title for YouTube only. |
| description | String | No | Video description (snippet.description). Falls back to the title if omitted. |
| tags | Array | No | Array of tags for the video, e.g. tags[]=tutorial & tags[]=howto. |
| categoryId | String | No | YouTube video category ID. Defaults to "22" (People & Blogs). |
| privacyStatus | String | No | public, unlisted or private. Defaults to public. |
| thumbnail / thumbnail_url | File / URL | No | Custom thumbnail as a multipart file or public URL (≤ 2 MB). Standard videos only — not supported for Shorts. |
| youtube_subtitle_file_{N} / youtube_subtitle_language_{N} | File / String | No | Indexed subtitle tracks for multiple languages (N = 0, 1, 2…). Each file needs a BCP-47 language code. |
| selfDeclaredMadeForKids | Boolean | No | COPPA declaration that the video is made for children. Defaults to false. |
| containsSyntheticMedia | Boolean | No | Declare that the video contains synthetic / AI-generated content. Defaults to false. |
| scheduled_date | ISO-8601 | No | Future date/time to schedule the publish (≤ 365 days ahead). |
See the complete parameter list in the API documentation.
Start Uploading to YouTube in Minutes
Three steps to integrate the YouTube Upload API
Create your account
Sign up for Upload-Post and grab your API key from the dashboard.
Connect YouTube
Authorize your YouTube channel once — we manage the OAuth and YouTube Data API access for you.
Upload programmatically
POST to /api/upload with platform[]=youtube, your video and a title. Done.
YouTube Upload API — FAQ
Common questions about posting to YouTube programmatically
Is there a YouTube upload API?
Yes. Upload-Post exposes the YouTube Data API video upload through a single REST endpoint (POST /api/upload). You send your video file or a public URL with platform[]=youtube and a title, and we publish it to the connected YouTube channel — no need to build your own Google Cloud project, OAuth flow or request YouTube Data API quota.
How do I upload a video to YouTube via API?
Send a multipart POST request to https://api.upload-post.com/api/upload with your API key in the Authorization header, user (your profile), platform[]=youtube, the video field (a file or public URL) and a title (required for YouTube). The API returns a video_id and URL. A working curl and JavaScript example is shown above.
Can I upload YouTube Shorts via API?
Yes. You can upload YouTube Shorts via the same endpoint as standard videos — just upload a vertical short-form video and YouTube classifies it as a Short automatically. The YouTube Shorts upload API uses the identical platform[]=youtube call, so you can post to YouTube programmatically whether you publish long-form videos or Shorts.
Can I set a custom thumbnail?
Yes, for standard videos. Send a custom thumbnail with the thumbnail (multipart file) or thumbnail_url (public URL) parameter — JPG, PNG, GIF or BMP up to 2 MB. Important: YouTube does not support custom thumbnails for Shorts, so the thumbnail only applies to standard YouTube videos.
Can I upload subtitles or captions?
Yes. Attach one or more subtitle / caption tracks using youtube_subtitle_file_{N} together with youtube_subtitle_language_{N} (and optionally youtube_subtitle_name_{N}). Supported formats include SRT, VTT, SBV, SUB, ASS, SSA, TTML and DFXP, and you can upload multiple languages in a single request via indexed fields (0, 1, 2…).
Can I schedule YouTube uploads?
Yes. Add a scheduled_date (ISO-8601, up to 365 days in the future) to schedule the upload, optionally with a timezone, or use add_to_queue to drop it into your next available auto-publishing slot.
Do I need YouTube Data API approval?
No. Upload-Post operates the YouTube Data API integration for you, so you connect your YouTube channel and start posting without creating a Google Cloud project, configuring OAuth consent screens or requesting YouTube Data API quota / audit approval.
How much does the YouTube upload API cost?
You can create an account, generate an API key and start integrating for free with no credit card — a genuinely free YouTube API to build on. Higher upload volumes are covered by paid plans; see the pricing page for current limits and tiers.
Ready to automate your YouTube uploads?
Start posting videos and Shorts to YouTube programmatically today. No credit card required.
Create Free AccountPrefer an AI agent? Use the YouTube Claude Code skill or the YouTube MCP server.