Works with all AI agents

Connect your AI agent

Choose your AI agent and connect in seconds.

Add to Claude

Works on every Claude plan, including free. Full Claude guide

  1. 1

    Add to Claude

    One click from Claude’s connector directory.

  2. 2

    Sign up or sign in

    Takes seconds, then you’re sent straight back.

  3. 3

    Ask Claude

    “Plan and schedule my posts for next week.”

PostEverywhere YouTube API Guide

PostEverywhere API reference for YouTube: every upload setting YouTube allows, custom thumbnails, Shorts, the status check after upload and request examples.

Upload and schedule YouTube videos and Shorts with every upload setting YouTube's API allows: title, description, tags, category, visibility, made for kids, the altered or synthetic content disclosure, subscriber notifications, license, embedding, public stats, language and a custom thumbnail. PostEverywhere handles the multi-step YouTube upload process and metadata configuration through a single API call. For a general overview of all supported platforms, see the Introduction.

Connect your YouTube account to PostEverywhere

Connect YouTube from the dashboard with OAuth, or headlessly from code: mint a connect link and hand it to the account owner - no dashboard session needed. Both flows are covered in Connecting Accounts.

What you can post to YouTube

Content Type Media Required Description
Video Video (MP4) Standard YouTube video. Uses settings.title, or the first line of the caption when no title is set.
Short Video (MP4) YouTube decides: a square or vertical video up to 3 minutes is treated as a Short. There is no setting for it.

YouTube is a video-only platform. Every post must include a video attachment.

Community posts are not supported

YouTube Community posts (the text, image, and poll posts on a channel's Community tab) cannot be created via PostEverywhere, because YouTube does not provide an API to create them. YouTube's Data API supports video and Shorts uploads, playlists, comments, and channel data, but has never exposed a Community-post endpoint. Community posts can only be created in YouTube's own app or website. If YouTube releases a Community Posts API, we'll add support.

YouTube-specific options in the API

Use the platform_content.youtube object to set video metadata:

{
  "platform_content": {
    "youtube": {
      "content": "Full video description with links and chapters",
      "settings": {
        "title": "My Video Title (required)",
        "privacyStatus": "public",
        "tags": ["tag1", "tag2", "tag3"],
        "categoryId": "22",
        "madeForKids": false
      }
    }
  }
}

Settings Reference

All settings go in platform_content.youtube.settings and are optional. Names are camelCase; snake_case versions (made_for_kids, privacy_status and so on) are also accepted. A wrong value returns 400 youtube_settings_invalid.

Setting Type Default Description
content (beside settings) string the caption Video description. Supports links, chapters and multi-line text.
settings.title string first line of the caption Video title, max 100 characters; longer is refused with 400 content_too_long. The post fails only if no title can be derived.
settings.description string content, then the caption Max 5,000 bytes (YouTube counts bytes, so emoji and accented letters use more than one); longer is refused with 400 content_too_long.
settings.tags string[] or "a, b" [] Up to 500 characters in total, counted the way YouTube counts them.
settings.categoryId string "22" YouTube category number. See common categories below.
settings.privacyStatus string "public" public, unlisted or private.
settings.madeForKids boolean false Whether the video is made for children (COPPA).
settings.containsSyntheticMedia boolean false Discloses realistic altered or synthetic (AI) content. YouTube may show a label on the video.
settings.notifySubscribers boolean true Set false to upload without notifying subscribers.
settings.license string "youtube" youtube or creativeCommon.
settings.embeddable boolean true Whether other sites can embed the video.
settings.publicStatsViewable boolean true Whether the view count is public on the watch page.
settings.defaultLanguage string "en" Language of the title and description.
cover_photo (top level) object none Custom thumbnail: url (a public https JPG or PNG) or media_id (an image you uploaded). See Custom thumbnail.

Settings only YouTube Studio can change

YouTube's API does not let any app set comments on or off, comment moderation, likes, age restriction, paid promotion, Shorts remixing, caption certification or the spoken language of the video. If you send settings like these, the post is still accepted and the response's notes lists what was not applied. Set them in YouTube Studio.

First comments are not available on YouTube through the API yet. A firstComment (or first_comment) sent for YouTube is removed before the post is saved, and the response notes say so.

Privacy Statuses

Value Description
public Visible to everyone. Appears in search results and subscriptions.
unlisted Only accessible via direct link. Does not appear in search or on your channel.
private Only visible to you and users you explicitly share with.

Common Category IDs

ID Category
1 Film & Animation
2 Autos & Vehicles
10 Music
15 Pets & Animals
17 Sports
20 Gaming
22 People & Blogs
23 Comedy
24 Entertainment
25 News & Politics
26 Howto & Style
27 Education
28 Science & Technology

Publish to YouTube: a working request

Schedule a YouTube Video

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Default description for other platforms",
    "account_ids": [2290],
    "media_ids": ["e5f6a7b8-c9d0-1234-ef01-345678901234"],
    "scheduled_for": "2026-04-15T16:00:00Z",
    "timezone": "Europe/London",
    "platform_content": {
      "youtube": {
        "content": "In this video, I walk through the complete setup process.\n\n0:00 Intro\n0:30 Installation\n2:15 Configuration\n4:00 First Run\n\nLinks:\nhttps://example.com/docs",
        "settings": {
          "title": "Complete Setup Guide - Step by Step Tutorial",
          "privacyStatus": "public",
          "tags": ["tutorial", "setup guide", "getting started", "walkthrough"],
          "categoryId": "28",
          "madeForKids": false
        }
      }
    }
  }'

Schedule an Unlisted Video for Review

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Review draft",
    "account_ids": [2290],
    "media_ids": ["f6a7b8c9-d0e1-2345-f012-456789012345"],
    "platform_content": {
      "youtube": {
        "content": "Draft video for team review, do not share publicly.",
        "settings": {
          "title": "Q2 Product Update (DRAFT)",
          "privacyStatus": "unlisted",
          "madeForKids": false
        }
      }
    }
  }'

Custom YouTube thumbnail with cover_photo

Send the thumbnail as the post's cover photo with the top-level cover_photo. AI agents can do the same through the MCP create_post tool's cover_photo option.

{
  "content": "New video!",
  "account_ids": [2290],
  "media_ids": ["<video media id>"],
  "cover_photo": { "media_id": "<image media id>" }
}

cover_photo takes url (a public https JPG or PNG, 1280x720 is best) or media_id (an image you uploaded). YouTube only allows custom thumbnails on verified channels (a quick phone check at youtube.com/verify). On other channels YouTube picks a frame from the video.

YouTube limits: characters, media and video

Requirement Limit
Title length 100 characters (longer is refused with 400 content_too_long)
Description length 5,000 bytes (longer is refused with 400 content_too_long)
Tags total length 500 characters
Video format MP4 (H.264)
Video max file size 4 GB
Video duration Up to 12 hours (standard uploads)
Shorts duration Up to 3 minutes (square or vertical)
Recommended video resolution 1080p (1920x1080) or higher
Recommended Shorts ratio 9:16 (1080x1920)
Thumbnail The post's cover photo (needs a verified channel), otherwise YouTube picks a frame

Getting better results on YouTube

  • Provide a title. Without one, the first line of your description becomes the title, which is rarely what you want. Keep titles under 70 characters for best search result display.
  • Use content for rich descriptions with chapters. YouTube parses timestamps in the format 0:00 Label as video chapters. Structure your description with chapter markers to improve viewer retention and search ranking.
  • Schedule as unlisted first for team review. Upload with "privacyStatus": "unlisted" to let your team review the video on YouTube before making it public. Update the privacy setting directly on YouTube when ready.

Common questions about posting to YouTube

How do I schedule a YouTube Short via the API?

Upload a vertical (9:16) or square video up to 3 minutes long using the Upload Media endpoint, then create a post normally. YouTube classifies square and vertical videos up to 3 minutes as Shorts. No special setting is needed.

Is the video title required for YouTube posts?

Not strictly. If settings.title is omitted, the first non-empty line of the description becomes the title, and the post fails only if no title can be derived. Set it explicitly. Keep titles under 70 characters for optimal display in search results; the maximum is 100.

Can I set the YouTube video category via the API?

Yes. Use the settings.categoryId field with one of YouTube's standard category IDs. For example, "28" is Science & Technology and "22" is People & Blogs (the default). See the full list of category IDs in the Settings Reference above.

How do I add chapters to my YouTube video description?

Include timestamps in the content field using the format 0:00 Label. YouTube parses these as video chapters. The first timestamp must be 0:00. For example: "0:00 Intro\n0:30 Setup\n2:15 Demo".

Why did some of my YouTube tags get dropped?

YouTube's 500-character tag limit is counted in the serialized form: tags with spaces are wrapped in quotes (each adds 2 chars), and tags are joined by , (each separator adds 2 chars). We count the same way YouTube does and trim from the tail until your tags fit. We also reserve 11 characters for the , "Shorts" tag we add to Shorts. If you saw tags in your request that didn't end up on the published video, you exceeded the serialized budget: shorten or remove a few and resubmit.

Can I edit a YouTube video's title, description, or tags after upload?

Not via the PostEverywhere API. PATCH /v1/posts/:id only works on scheduled or draft posts. Once YouTube has accepted the upload (post status becomes published), the API returns 400 invalid_post_status. To change a video's metadata after upload, edit it directly in YouTube Studio.

How do I check that YouTube accepted my video?

After YouTube finishes processing the upload, we read the video's status again. A video YouTube rejects (for example a copyright claim or a duplicate) shows as failed with YouTube's reason in GET /v1/posts/:id/results. If its visibility on YouTube differs from the privacyStatus you sent, the result carries a youtube_visibility_differs warning. YouTube can keep an upload private because of a channel setting or a check that is still running.

Can I turn off comments or set an age restriction through the API?

No. YouTube does not let any app set comments, likes, age restriction, paid promotion, Shorts remixing or caption certification. Send them and the post is still accepted, with a notes entry saying they were not applied. Change them in YouTube Studio after the upload.

Other platforms you can publish to

  • TikTok -- short-form vertical video, similar to YouTube Shorts
  • Instagram -- Instagram Reels for short-form vertical video
  • LinkedIn -- professional video content with native video support

Related: YouTube media requirements · testing with private uploads · YouTube analytics · uploading to YouTube via API · the API overview