YouTube API Reference

Upload videos and Shorts to YouTube with full metadata control.

Quick reference

authOAuth 2.0 (Google)
text Limit100 (title) / 5,000 (description)
max Media1 video
media RuleVideo is required — no image or text-only posts
max Video DurationUnlimited
entity SelectionYouTube Channels
first CommentSupported — 10,000 chars

Content types

—Text-only

Not supported — video is required

—Images

Not supported

✓Video

MP4, MOV, AVI, WebM. Max 2 GB via API.

✓Shorts

Vertical video under 60 seconds

—GIF

Not supported

Media requirements

Constraints enforced by YouTube's API. Requests that violate these limits will be rejected.

ConstraintValue
Max video size2 GB
Video formatsMP4, QUICKTIME, X-MSVIDEO, WEBM
Min image dimensions426x240 px
Max media items1
GIF supportNo

Platform settings

Pass these fields inside platformSettings.youtube in the request body.

title
stringOptional

Video title. Max 100 characters (longer is rejected with 400). Defaults to the first line of the content.

description
stringOptional

Video description. Max 5,000 characters (longer is rejected with 400). Defaults to the content.

privacyStatus
stringOptional

Video visibility level. Any other value is rejected with 400 naming the valid values.

Default: public

publicunlistedprivate
tags
string | string[]Optional

Tags for the video: an array of strings or a comma-separated string. Stored and echoed back as a comma-separated string; about 480 characters of tags in total reach YouTube.

categoryId
stringOptional

YouTube category ID (e.g. '22' for People & Blogs).

Default: 22

madeForKids
booleanOptional

Whether the video is made for kids (COPPA compliance). Must be a boolean; anything else is rejected with 400.

Default: false

These fields are validated when the post is created and echoed back under platformSettings.youtube on GET /api/v1/posts/:id.

Code examples

Basic post

curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "",
"platforms": [
{ "platform": "youtube", "accountId": "acc_yt" }
],
"mediaItems": [
{ "type": "video", "url": "https://example.com/video.mp4" }
],
"platformSettings": {
"youtube": {
"title": "My First API Upload",
"description": "Uploaded via the Schedulala API",
"privacyStatus": "public",
"tags": "api,tutorial,schedulala",
"categoryId": "22"
}
},
"publishNow": true
}'

Post with media

# Upload a YouTube Short (vertical video under 60s)
curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "",
"platforms": [
{ "platform": "youtube", "accountId": "acc_yt" }
],
"mediaItems": [
{ "type": "video", "url": "https://example.com/short.mp4" }
],
"platformSettings": {
"youtube": {
"title": "Quick Tip #Shorts",
"description": "A quick tip for you!",
"privacyStatus": "public"
}
},
"publishNow": true
}'

Quirks & gotchas

!

Video is required — no image or text-only posts.

!

Uses title + description instead of a single text/content field.

!

YouTube title is passed via platformSettings.youtube.title, not the top-level content field.

!

Video max: 2 GB via API upload.

!

Minimum video dimensions: 426x240 px.

!

Supports MP4, MOV, AVI, and WebM formats.

!

Entity selection: select which YouTube Channel to upload to after connecting.

!

Include #Shorts in the title for vertical videos under 60s to publish as a Short.

Related