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