# PostEverywhere YouTube API Guide > YouTube upload API: publish and schedule videos and Shorts via REST. Titles, descriptions, privacy, tags, and categories. **Source:** https://posteverywhere.ai/docs/platforms/youtube **Section:** Platforms **API reference:** https://posteverywhere.ai/docs/api/reference --- Upload and schedule YouTube videos with titles, descriptions, tags, privacy settings, and category assignments. PostEverywhere handles the multi-step YouTube [upload process](/docs/api/init-media-upload) and metadata configuration through a single API call. For a general overview of all supported platforms, see the [Introduction](/docs). ## Connect your YouTube account to PostEverywhere Connect YouTube from the dashboard with OAuth, or headlessly from code: mint a [connect link](/docs/api/create-connect-link) and hand it to the account owner - no dashboard session needed. Both flows are covered in [Connecting Accounts](/docs/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 description when no title is set. | | **Short** | Video (MP4) | Vertical video (9:16) under 60 seconds is automatically treated as a Short by YouTube. | 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: ```json { "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 | Setting | Type | Default | Description | |---------|------|---------|-------------| | `content` | string | N/A | Video description. Supports links, chapters, and multi-line text. | | `settings.title` | string | first line of `content` | Video title, max 100 characters. If omitted, the first non-empty line of the description is used; the post fails only if no title can be derived. | | `settings.privacyStatus` | string | `"public"` | Visibility setting. See values below. | | `settings.tags` | string[] | `[]` | Tags for search discovery. YouTube allows up to 500 characters total across all tags. | | `settings.categoryId` | string | `"22"` | YouTube category ID. See common categories below. | | `settings.madeForKids` | boolean | `false` | Whether the video is made for children. Affects comments and personalized ads. | ### 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 ```bash 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 ```bash 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 } } } }' ``` ## YouTube limits: characters, media and video | Requirement | Limit | |-------------|-------| | Title length | 100 characters | | Description length | 5,000 characters | | Tags total length | 500 characters | | Video format | MP4 (H.264) | | Video max file size | 500 MB | | Video duration | Up to 12 hours (standard uploads) | | Shorts duration | Up to 60 seconds | | Recommended video resolution | 1080p (1920x1080) or higher | | Recommended Shorts ratio | 9:16 (1080x1920) | | Thumbnail | The post's cover photo is uploaded as a custom thumbnail when the channel allows custom thumbnails; otherwise YouTube auto-generates one | ## 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 video (9:16 aspect ratio) under 60 seconds using the [Upload Media endpoint](/docs/api/init-media-upload), then [create a post](/docs/api/create-post) normally. YouTube automatically classifies vertical videos under 60 seconds 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 auto-append on vertical sub-60s uploads. 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. ## Other platforms you can publish to - **[TikTok](/docs/platforms/tiktok)** -- short-form vertical video, similar to YouTube Shorts - **[Instagram](/docs/platforms/instagram)** -- Instagram Reels for short-form vertical video - **[LinkedIn](/docs/platforms/linkedin)** -- professional video content with native video support ## Related YouTube and API reference pages - [API Reference -- Create Post](/docs/api/create-post) - [Upload Media](/docs/api/init-media-upload) - [Quick Start Guide](/docs/quick-start) - [YouTube Scheduler on PostEverywhere](https://posteverywhere.ai/youtube-scheduler) **Related:** [YouTube media requirements](/docs/media-requirements) · [testing with private uploads](/docs/testing) · [YouTube analytics](/docs/analytics-summary) · [uploading to YouTube via API](/blog/post-to-youtube-api) · [the API overview](/social-media-api)