yt_upload_draft
Upload a local MP4/MOV file to YouTube Studio as a private draft, optionally adding a thumbnail, pinned comment, or future publish schedule.
Instructions
Upload a local MP4/MOV video file to YouTube Studio via YouTube Data API v3 (videos.insert, costs ~1,600 daily quota units) and optionally attach a custom thumbnail (thumbnails.set) and top-level pinned comment (commentThreads.insert). Requires channel OAuth2 with youtube.upload scope. Non-idempotent: each call creates a new YouTube video resource and returns {videoId, studioUrl, watchUrl, privacyStatus, publishAt}. Defaults to privacy_status='private' (unpublished draft); when publish_at (ISO 8601 future timestamp) is provided, privacy_status is forced to 'private' until YouTube automatically publishes the video at publish_at. Inline parameters (title, description, tags, hashtags, pinned_comment) override values parsed from spec_path.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | YouTube SEO keyword tags (combined length up to 500 characters). | |
| title | No | Video title (1–100 characters). Required unless spec_path provides a '## Title' section. | |
| hashtags | No | Hashtags to append to the end of description (e.g. ['#AINews', '#Shorts']). | |
| language | No | BCP-47 language code for defaultLanguage and defaultAudioLanguage (default: 'en'). | en |
| spec_path | No | Optional local path to a Markdown upload spec file ('## Title', '## Description', '## Tags', '## Pinned comment') used as fallback when inline fields are omitted. | |
| publish_at | No | Optional future ISO 8601 timestamp with timezone offset for scheduled publication (e.g. '2026-11-04T18:00:00+01:00'). Forces privacy_status='private' until release. | |
| video_path | Yes | Absolute local filesystem path to a readable MP4 or MOV video file to upload. | |
| category_id | No | YouTube numeric category ID (default: '28' for Science & Technology). | 28 |
| description | No | Video description (up to 5,000 characters). Hashtags from 'hashtags' are appended if not already present. | |
| made_for_kids | No | COPPA selfDeclaredMadeForKids flag (default: false). | |
| pinned_comment | No | Top-level comment text to post on the video when auto_post_comment is true. | |
| privacy_status | No | Initial visibility in YouTube Studio (default: 'private'). Forced to 'private' whenever publish_at is set. | private |
| thumbnail_path | No | Optional absolute local path to a PNG/JPG custom thumbnail image (<=2MB, requires verified YouTube account). | |
| auto_post_comment | No | If true and pinned_comment is non-empty, immediately posts pinned_comment as a top-level comment (requires video to allow comments). | |
| contains_synthetic_media | No | YouTube Studio altered/synthetic media disclosure flag (status.containsSyntheticMedia, default: false). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | ||
| watchUrl | Yes | ||
| publishAt | No | ||
| studioUrl | Yes | ||
| privacyStatus | No |