PublishQPublishQ

YouTube

Upload videos to YouTube through the PublishQ API with full metadata control — title, description, privacy, tags, COPPA, and AI disclosure.

What you can post

TypeSupportedNotes
VideoMax 12 hours (verified) or 15 min (unverified). MP4, MOV, AVI, WMV, FLV, 3GPP, WebM. Max 256 GB.
Shorts≤3 min AND vertical (9:16). Auto-detected by YouTube — no flag needed
ImageYouTube is video-only
TextA video file is always required

Limitations

  • Video required. Every YouTube post needs exactly one video file.
  • Title max 100 characters. Cannot contain < or >.
  • Description max 5000 characters. Cannot contain < or >.
  • Tags total max 500 characters. Tags with spaces count as quoted (+2 chars).
  • Max duration: 12 hours (verified projects) or 15 minutes (unverified).

YouTube Shorts

There is no separate API endpoint or post type for Shorts. YouTube automatically classifies a video as a Short when it is 3 minutes or shorter with a vertical aspect ratio (9:16). Upload it the same way as any other video.

  • Videos under 15 seconds will loop on playback
  • The YouTube API does not support setting custom thumbnails on Shorts

Quick start

Upload a video

Get your media ready

curl -X POST https://publishq.com/api/v1/media \
  -H "Authorization: Bearer pq_live_..." \
  -F "[email protected]"
curl https://publishq.com/api/v1/media \
  -H "Authorization: Bearer pq_live_..."

Pick the id of the video you want to use.

Create the post

curl -X POST https://publishq.com/api/v1/posts \
  -H "Authorization: Bearer pq_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "content": "My video title",
    "mediaIds": ["med_abc123"],
    "accounts": [
      {
        "accountId": "acc_youtube_123",
        "platformSpecificSettings": {
          "description": "Full video description with links and timestamps.\n\n0:00 Intro\n1:30 Main topic",
          "privacyStatus": "public",
          "categoryId": "28",
          "tags": ["tech", "tutorial", "how to"],
          "madeForKids": false,
          "containsSyntheticMedia": false
        }
      }
    ]
  }'

content is the video title (max 100 characters). The longer description goes in platformSpecificSettings.description.

Title overflow

If your content exceeds 100 characters, PublishQ trims the title to 100 characters and prepends the full text to the description. Use postOverrides to set a shorter title for YouTube when posting to multiple platforms.

Post to YouTube + other platforms

When your title works for other platforms but is too long for YouTube's 100-char limit, use postOverrides:

curl -X POST https://publishq.com/api/v1/posts \
  -H "Authorization: Bearer pq_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "content": "This is a longer caption that works great on Instagram and TikTok but exceeds YouTube 100 char limit for titles",
    "mediaIds": ["med_abc123"],
    "accounts": [
      {
        "accountId": "acc_youtube_123",
        "postOverrides": {
          "content": "Short YouTube title"
        },
        "platformSpecificSettings": {
          "description": "Full description for YouTube...",
          "privacyStatus": "public"
        }
      },
      {
        "accountId": "acc_instagram_456"
      }
    ]
  }'

Video specs

PropertyLimit
Max file size256 GB
Max duration12 hours (verified) / 15 min (unverified)
Shorts≤3 min AND vertical (9:16). Auto-detected
FormatsMP4, MOV, AVI, WMV, FLV, 3GPP, WebM
TitleMax 100 characters
DescriptionMax 5000 characters
TagsMax 500 characters total
Privacypublic, unlisted, private

Platform settings

FieldTypeDescription
descriptionstring (optional)Video description. Max 5000 characters. Shown below the video title on the watch page.
privacyStatusenum (optional)Video privacy status. Defaults to public. Unverified API projects are restricted to private.
madeForKidsboolean (optional)Declare the video as made for kids (COPPA). When true, personalized ads are disabled and some features (comments, notifications) are turned off.
containsSyntheticMediaboolean (optional)Disclose that the video contains realistic altered or synthetic (AI-generated) content.
categoryIdenum (optional)YouTube video category. Defaults to "22" (People & Blogs). Valid IDs: 1 (Film & Animation), 2 (Autos & Vehicles), 10 (Music), 15 (Pets & Animals), 17 (Sports), 19 (Travel & Events), 20 (Gaming), 22 (People & Blogs), 23 (Comedy), 24 (Entertainment), 25 (News & Politics), 26 (Howto & Style), 27 (Education), 28 (Science & Technology), 29 (Nonprofits & Activism).
tagspipeKeyword tags for the video. Duplicates are removed. Total of all tags must be under 500 characters. Tags with spaces count as quoted (2 extra chars). Commas between tags also count.
embeddableboolean (optional)Whether the video can be embedded on other websites. Defaults to true.
playlistIdstring (optional)Playlist ID to add the video to after upload.
Full schema: YouTubePlatformSpecificSettings

Not yet supported

  • Custom thumbnails: Not implemented yet, so YouTube auto-generates one from a video frame.
  • Adding to playlists after upload
  • Captions / subtitles

On this page