YouTube Shorts
Mutation
Use the scheduleYouTubePost mutation to schedule video content to YouTube:
mutation ScheduleYouTubePost($input: ScheduleYouTubePostInput!) {
scheduleYouTubePost(input: $input) {
success
errors {
field
message
}
post {
id
socialAccount {
id
username
}
publishingStatus
title
description
tags
madeForKids
containsSyntheticMedia
privacyStatus
gallery {
id
galleryMediaSet {
id
media {
url
mimeType
}
}
}
submissions {
id
postAt
publishingMethod
}
}
}
}
Input Parameters
ScheduleYouTubePostInput
SPECIFIC_TIME, QUEUE_NEXT (default: SPECIFIC_TIME).
Only accepted when scheduling a new post. See Scheduling at the Next Open Slot.id, name, or url. See Attaching Media.
Only supported when scheduling new posts, not when updating existing ones.PUBLIC, UNLISTED, PRIVATEREADY_TO_PUBLISH, DRAFT (default: READY_TO_PUBLISH)YouTubePostSubmissionInputType
Each submission defines a specific posting schedule:
schedulingMode: QUEUE_NEXT on the post when scheduling a new one, or the post is a draft.
See Drafts without a date.AUTOMATIC, MANUAL (default: AUTOMATIC)Examples
Simple YouTube Short
Schedule a basic YouTube Short with a video from URL.
{
"input": {
"username": "mychannel",
"title": "Amazing Dance Tutorial #Shorts",
"description": "Learn this viral dance in just 60 seconds! Follow for more tutorials.\n\n#dance #tutorial #shorts #viral",
"tags": ["dance", "tutorial", "shorts", "viral", "howto"],
"media": [{ "url": "https://example.com/dance-short.mp4" }],
"madeForKids": false,
"privacyStatus": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T18:00:00Z"
}
]
}
}
Scheduling at the Next Open Slot
Instead of picking a time yourself, pass schedulingMode: QUEUE_NEXT and leave postAt out. Postpone puts the video in the next open slot on the account's Account Schedule, skipping any slot that already has a post on it.
{
"input": {
"username": "mychannel",
"schedulingMode": "QUEUE_NEXT",
"title": "This one goes out at my next open slot #Shorts",
"media": [{ "url": "https://example.com/dance-short.mp4" }],
"madeForKids": false,
"privacyStatus": "PUBLIC",
"submissions": [{}]
}
}
Leave postAt off the submissions — the resolved slot becomes the date for all of them.
The account needs a schedule set up for this to work, postAt and QUEUE_NEXT can't be combined, and updateScheduledYouTubePost rejects schedulingMode. See Scheduling at the Next Open Slot for the full rules.
YouTube Short with Content Library Media
Schedule a video using media from your Content Library. Reference the file by its id, which every upload mutation returns.
{
"input": {
"username": "mychannel",
"title": "Quick Cooking Hack You Need to Try!",
"description": "This cooking hack will change your life! Save this for later and try it today.\n\nIngredients mentioned:\n- Ingredient 1\n- Ingredient 2\n\n#cooking #foodhacks #shorts #recipe",
"tags": ["cooking", "food", "hacks", "recipe", "kitchen"],
"media": [{ "id": "1044" }],
"madeForKids": false,
"privacyStatus": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T16:30:00Z"
}
]
}
}
You can also reference the file by name. Names are matched case-insensitively and the first match wins, so prefer id when several files share a name.
{
"media": [{ "name": "cooking-hack-video.mp4" }]
}
Kids Content Video
Schedule a YouTube video appropriate for children.
{
"input": {
"username": "kidschannel",
"title": "Fun Learning Song for Kids",
"description": "Educational and fun song for children to learn colors and shapes!\n\nSafe content for kids with no ads or external links.",
"tags": ["kids", "education", "learning", "songs", "colors"],
"media": [{ "url": "https://example.com/kids-song.mp4" }],
"madeForKids": true,
"privacyStatus": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T14:00:00Z"
}
]
}
}
Synthetic Media Content
Schedule a video containing AI-generated or altered content.
{
"input": {
"username": "techchannel",
"title": "AI-Generated Video Experiment",
"description": "Testing out the latest AI video generation tools. This video contains synthetic media created using AI.\n\n#ai #technology #synthetic #experiment",
"tags": ["ai", "technology", "synthetic", "experiment", "future"],
"media": [{ "url": "https://example.com/ai-generated-video.mp4" }],
"madeForKids": false,
"containsSyntheticMedia": true,
"privacyStatus": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T20:00:00Z"
}
]
}
}
Unlisted Video
Schedule an unlisted video that won't appear in search results.
{
"input": {
"username": "mychannel",
"title": "Behind the Scenes - Unlisted",
"description": "Exclusive behind-the-scenes content for our community. This video is unlisted and only accessible via direct link.",
"tags": ["behind-the-scenes", "exclusive", "community"],
"media": [{ "url": "https://example.com/bts-video.mp4" }],
"madeForKids": false,
"privacyStatus": "UNLISTED",
"submissions": [
{
"postAt": "2025-12-01T12:00:00Z"
}
]
}
}
Response Types
Success Response
{
"data": {
"scheduleYouTubePost": {
"success": true,
"errors": [],
"post": {
"id": "123",
"socialAccount": {
"id": "456",
"username": "mychannel"
},
"publishingStatus": "READY_TO_PUBLISH",
"title": "Amazing Dance Tutorial #Shorts",
"description": "Learn this viral dance in just 60 seconds! Follow for more tutorials.\n\n#dance #tutorial #shorts #viral",
"tags": ["dance", "tutorial", "shorts", "viral", "howto"],
"madeForKids": false,
"containsSyntheticMedia": false,
"privacyStatus": "PUBLIC",
"gallery": {
"id": "789",
"media": [
{
"id": "101",
"url": "https://cdn.example.com/dance-short.mp4",
"type": "video"
}
]
},
"submissions": [
{
"id": "112",
"postAt": "2025-12-01T18:00:00Z",
"publishingMethod": "AUTOMATIC"
}
]
}
}
}
}
Error Response
{
"data": {
"scheduleYouTubePost": {
"success": false,
"errors": [
{
"field": "title",
"message": "YouTube video titles cannot exceed 100 characters."
}
],
"post": null
}
}
}
Updating a Post
To update an existing scheduled post, use the same input type with the corresponding update mutation and include the post id:
mutation UpdateScheduledYouTubePost($input: ScheduleYouTubePostInput!) {
updateScheduledYouTubePost(input: $input) {
success
errors {
field
message
}
post {
id
}
}
}
Pass the id of the post you want to update in the input, along with the fields you want to change:
{
"input": {
"id": "12345",
"username": "mychannelname",
"title": "Updated Video Title",
"description": "Updated description",
"submissions": [{"postAt": "2025-12-01T15:30:00Z"}]
}
}
id field to specify which post to update. Only scheduled posts that have not been published yet can be updated.postAt is required on an update, so every update states the date the post goes out on — pass the date it already has to leave it where it is. A draft staying a draft is exempt, and a draft you're promoting to READY_TO_PUBLISH needs a date of your choosing; see Drafts without a date.
schedulingMode is not accepted on an update at all; see Scheduling at the Next Open Slot.
Validation Rules
- Video Duration: Maximum 60 seconds for YouTube Shorts, up to 12 hours for regular videos
- File Size: Maximum 256GB per video
- Video Format: Supports MP4, MOV, AVI, WMV, FLV, 3GPP, WEBM
- Aspect Ratios: Vertical (9:16) recommended for Shorts, also supports 16:9 and 1:1
- Resolution: Up to 4K (3840x2160) supported
- Frame Rate: Up to 60fps supported
- Title Length: Maximum 100 characters
- Description Length: Maximum 5,000 characters
- Tags: Maximum 500 characters total across all tags
- COPPA Compliance: Must correctly identify content made for kids
- Synthetic Media: Must be disclosed if content is AI-generated or altered
- Scheduling: Posts must be scheduled for future dates only
- Account Limits: Respects your plan's monthly post limits
Common Errors
The specified username is not connected to your Postpone account. Connect the account in your settings first.
Your video title is too long. Keep titles under 100 characters for better visibility and compliance.
You must include a video file. Use media to attach a video to your post.
Your video format is not supported. Use MP4, MOV, AVI, WMV, FLV, 3GPP, or WEBM format.
Your video file is too large. YouTube supports videos up to 256GB in size.
For YouTube Shorts, videos must be 60 seconds or shorter. Longer videos will be treated as regular YouTube videos.
Your video description is too long. Keep descriptions under 5,000 characters.
Your tags exceed the 500 character limit. Reduce the number or length of your tags.
You must specify whether content is made for kids to comply with COPPA regulations.
The postAt timestamp must be in the future. Check your timezone settings.
A new post has to say when it goes out: pass a postAt, or schedulingMode: QUEUE_NEXT. Drafts are exempt: leave postAt off one and it is parked on a placeholder date about 30 days out.
schedulingMode isn't accepted on an update, so a postAt is the only way to say when the post goes out. You'll also see it when promoting a parked draft to publishingStatus: READY_TO_PUBLISH without giving it a date.
schedulingMode: QUEUE_NEXT needs an Account Schedule on the account you're posting to. Set one up, or pass an explicit postAt.
schedulingMode is only accepted when scheduling a new post. To move a post that is already scheduled, pass a postAt to updateScheduledYouTubePost.
You've reached your plan's YouTube post limit for the scheduled month. Upgrade your plan or schedule for a different month.