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
| Field | Limit | Notes |
|---|---|---|
| Title | 100 characters | Required. Used as video title on YouTube. |
| Description | 5,000 characters | Optional. Full video description. |
| Tags | 500 characters total | Comma-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
| Field | Limit | Notes |
|---|---|---|
| Video File | 256 GB | Maximum file size. |
| Custom Thumbnail | 2 MB, JPEG/PNG | Uploaded via thumbnail or thumbnail_url. Not supported for YouTube Shorts. |
Privacy & Publishing
| Field | Valid Values | Notes |
|---|---|---|
| Privacy Status | public, unlisted, private | Default: public. If scheduledDate is set, status is forced to private initially. |
| License | youtube, creativeCommon | Default: youtube. |
| Scheduled Date | ISO 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
| Field | Format | Notes |
|---|---|---|
| Default Language | BCP-47 code (e.g., en, fr, en-US) | Sets the language of the video content. |
| Default Audio Language | BCP-47 code (e.g., en, es) | Specifies the audio track language. |
| Allowed Countries | ISO 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 Countries | ISO 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
| Field | Type | Default | Notes |
|---|---|---|---|
| Made for Kids | boolean | false | Read-only in YouTube API. Use selfDeclaredMadeForKids to declare COPPA compliance during upload. |
| Self-Declared Made for Kids | boolean | (optional) | Sets COPPA compliance status. Required for channels targeting minors. |
| Embeddable | boolean | true | Allows the video to be embedded on external sites. |
| Public Stats Viewable | boolean | true | Makes view count publicly visible. |
| Contains Synthetic Media | boolean | false | Declare if content includes realistic AI-generated or synthetic media (per YouTube’s AI disclosure policy). |
| Paid Product Placement | boolean | false | Declare if the video contains paid product promotion. |
| Notify Subscribers | boolean | true | Notify channel subscribers about the new upload. |
Category
| Field | Valid Values | Notes |
|---|---|---|
| Category ID | String (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
| Parameter | Type | Required | Description |
|---|---|---|---|
async | string | No | Default "true". If "false", the API waits for upload completion. Passed as a query string value. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected YouTube account. |
video | File | Yes | The video file to upload. |
title | string | Yes | The title of the video. (Or youtube_title). |
description | string | No | The description of the video. (Or youtube_description). |
tags | string | string[] | No | Comma-separated tags or array of strings. |
categoryId | string | No | YouTube category ID (e.g., “22” for People & Blogs). Default: 22. |
privacyStatus | string | No | Visibility: public (default), private, or unlisted. |
scheduledDate | string | No | ISO 8601 date string for scheduled publishing (must be within 365 days). Note: Setting this forces privacyStatus to private initially. |
thumbnail | File | No | Custom thumbnail image file. |
thumbnail_url | string | No | URL of the thumbnail image (alternative to file). |
embeddable | boolean | No | Whether the video can be embedded on other sites. Default: true. |
license | string | No | youtube (Standard) or creativeCommon. Default: youtube. |
publicStatsViewable | boolean | No | Whether view counts are publicly visible. Default: true. |
madeForKids | boolean | No | Whether 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. |
selfDeclaredMadeForKids | boolean | No | Self-declaration for COPPA. This is the field that actually sets the made-for-kids status during upload. |
containsSyntheticMedia | boolean | No | Whether content is AI-generated or synthetic. Default: false. |
hasPaidProductPlacement | boolean | No | Whether the video contains paid promotion. Default: false. |
defaultLanguage | string | No | BCP-47 language code (e.g., en, fr, en-US). |
defaultAudioLanguage | string | No | BCP-47 language code for audio (e.g., en, fr). |
allowedCountries | string | No | Comma-separated list of allowed country codes (uppercase ISO 3166-1 alpha-2, e.g. US,FR). Cannot be used together with blockedCountries. |
blockedCountries | string | No | Comma-separated list of blocked country codes (uppercase ISO 3166-1 alpha-2). Cannot be used together with allowedCountries. |
recordingDate | string | No | Date when the video was recorded (ISO 8601). |
notifySubscribers | boolean | No | Whether 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"
}
}