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.

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" } }