Skip to Content

YouTube Upload API

This section details how to upload videos to YouTube using the API. It supports standard video uploads with extensive metadata customization including privacy settings, scheduling, and COPPA compliance.

Base URL

https://api.multi-upload-tool.com/api/v1

Authentication

All requests require an API Token in the header: x-api-key: YOUR_API_TOKEN


Requirements

YouTube Video Requirements

  • File Size: Maximum: 256 GB
  • Accepted MIME Types: video/*, application/octet-stream
  • Important: Custom thumbnails are not supported for YouTube Shorts; they only apply to standard YouTube videos.

Validation & Limits

The following limits are enforced by the API during upload. These limits match YouTube’s official documentation (https://developers.google.com/youtube/v3/docs/videos ).

Content Limits

FieldLimitNotes
Title100 charactersRequired. Used as video title on YouTube.
Description5,000 charactersOptional. Full video description.
Tags500 characters totalComma-separated list. Limit counts commas and quotes around spaced tags (e.g., "multi word" = 13 chars). Oversized tag lists are truncated to fit.

Media Limits

FieldLimitNotes
Video File256 GBMaximum file size.
Custom Thumbnail2 MB, JPEG/PNGUploaded via thumbnail or thumbnail_url. Not supported for YouTube Shorts.

Privacy & Publishing

FieldValid ValuesNotes
Privacy Statuspublic, unlisted, privateDefault: public. If scheduledDate is set, status is forced to private initially.
Licenseyoutube, creativeCommonDefault: youtube.
Scheduled DateISO 8601 (future date, ≤365 days ahead)When set, the video is initially published as private and automatically published at the scheduled time. Must be in the future; maximum 365 days ahead.

Language & Region

FieldFormatNotes
Default LanguageBCP-47 code (e.g., en, fr, en-US)Sets the language of the video content.
Default Audio LanguageBCP-47 code (e.g., en, es)Specifies the audio track language.
Allowed CountriesISO 3166-1 alpha-2, comma-separated (e.g., US,CA,MX)Whitelist of countries where the video can be viewed. Cannot be used with blockedCountries.
Blocked CountriesISO 3166-1 alpha-2, comma-separated (e.g., CN,RU)Blacklist of countries where the video cannot be viewed. Cannot be used with allowedCountries.

Flags & Declarations

FieldTypeDefaultNotes
Made for KidsbooleanfalseRead-only in YouTube API. Use selfDeclaredMadeForKids to declare COPPA compliance during upload.
Self-Declared Made for Kidsboolean(optional)Sets COPPA compliance status. Required for channels targeting minors.
EmbeddablebooleantrueAllows the video to be embedded on external sites.
Public Stats ViewablebooleantrueMakes view count publicly visible.
Contains Synthetic MediabooleanfalseDeclare if content includes realistic AI-generated or synthetic media (per YouTube’s AI disclosure policy).
Paid Product PlacementbooleanfalseDeclare if the video contains paid product promotion.
Notify SubscribersbooleantrueNotify channel subscribers about the new upload.

Category

FieldValid ValuesNotes
Category IDString (YouTube category ID)Default: 22 (People & Blogs). Common IDs: 1 (Film & Animation), 10 (Music), 20 (Gaming), 25 (News & Politics), 27 (Education), 28 (Science & Technology). See YouTube category IDs .

Upload Video

Upload a video file to a connected YouTube channel.

Endpoint

POST /upload

Content-Type

multipart/form-data

Parameters

Query Parameters

ParameterTypeRequiredDescription
asyncstringNoDefault "true". If "false", the API waits for upload completion. Passed as a query string value.

Body Parameters

ParameterTypeRequiredDescription
accountIdstringYesThe ID of the connected YouTube account.
videoFileYesThe video file to upload.
titlestringYesThe title of the video. (Or youtube_title).
descriptionstringNoThe description of the video. (Or youtube_description).
tagsstring | string[]NoComma-separated tags or array of strings.
categoryIdstringNoYouTube category ID (e.g., “22” for People & Blogs). Default: 22.
privacyStatusstringNoVisibility: public (default), private, or unlisted.
scheduledDatestringNoISO 8601 date string for scheduled publishing (must be within 365 days). Note: Setting this forces privacyStatus to private initially.
thumbnailFileNoCustom thumbnail image file.
thumbnail_urlstringNoURL of the thumbnail image (alternative to file).
embeddablebooleanNoWhether the video can be embedded on other sites. Default: true.
licensestringNoyoutube (Standard) or creativeCommon. Default: youtube.
publicStatsViewablebooleanNoWhether view counts are publicly visible. Default: true.
madeForKidsbooleanNoWhether the video is made for kids (COPPA compliance). Default: false. Note: this field is read-only in the YouTube API. Use selfDeclaredMadeForKids to set the value during upload.
selfDeclaredMadeForKidsbooleanNoSelf-declaration for COPPA. This is the field that actually sets the made-for-kids status during upload.
containsSyntheticMediabooleanNoWhether content is AI-generated or synthetic. Default: false.
hasPaidProductPlacementbooleanNoWhether the video contains paid promotion. Default: false.
defaultLanguagestringNoBCP-47 language code (e.g., en, fr, en-US).
defaultAudioLanguagestringNoBCP-47 language code for audio (e.g., en, fr).
allowedCountriesstringNoComma-separated list of allowed country codes (uppercase ISO 3166-1 alpha-2, e.g. US,FR). Cannot be used together with blockedCountries.
blockedCountriesstringNoComma-separated list of blocked country codes (uppercase ISO 3166-1 alpha-2). Cannot be used together with allowedCountries.
recordingDatestringNoDate when the video was recorded (ISO 8601).
notifySubscribersbooleanNoWhether to notify subscribers about the upload. Default: true.

Example Request

curl -X POST https://api.multi-upload-tool.com/api/v1/upload \ -H "x-api-key: YOUR_API_TOKEN" \ -F "accountId=acc_123456789" \ -F "video=@/path/to/video.mp4" \ -F "title=My Amazing Video" \ -F "description=Check out this cool content!" \ -F "privacyStatus=public" \ -F "tags=vlog,lifestyle,travel" \ -F "madeForKids=false" \ -F "containsSyntheticMedia=true"

Example Response

{ "success": true, "message": "Upload queued successfully", "data": { "uploadId": "upl_987654321", "status": "pending", "jobId": "job_123" } }