Summary
The YouTube Data API v3 videos.insert and videos.update endpoints expose several important fields on the status resource that yutu video insert and yutu video update currently don't wrap. This forces users to bypass yutu and call the YouTube API directly whenever they need to set any of these fields.
Would love to see them added as flags in a future release — especially containsSyntheticMedia, which is becoming mandatory for AI-generated content under YouTube's updated policy.
Missing fields
| Field |
API location |
Why it matters |
selfDeclaredMadeForKids |
status.selfDeclaredMadeForKids |
The real audience declaration (COPPA compliance). The existing --forKids flag maps to status.madeForKids which is a read-only computed field — setting it via the API doesn't actually work. Users want to set selfDeclaredMadeForKids and let YouTube derive madeForKids from it. |
containsSyntheticMedia |
status.containsSyntheticMedia |
The Altered Content / AI-generated disclosure field (announced by YouTube March 2024). Mandatory for videos that use AI-generated voices, faces, or synthetic scenes. Not setting this when required is a policy violation. |
recordingDate |
recordingDetails.recordingDate |
Lets creators set when the video was recorded (affects some sorting/filtering in Studio). |
topicDetails.topicIds / topicCategories |
topicDetails.* |
Lets creators tag videos with YouTube's topic taxonomy (different from tags). |
Current workaround (what users are doing)
Bypass yutu for these fields by calling the YouTube Data API directly. Minimum viable Python script using stdlib urllib:
import json, urllib.request, urllib.parse
# 1. Refresh OAuth access token using client_secret.json + youtube.token.json
# 2. GET /videos?id=VIDEO_ID&part=status
# 3. Modify status.containsSyntheticMedia = True (or whatever field)
# 4. PUT /videos?part=status with the updated resource
~80 lines. Works fine but defeats the point of having yutu.
Proposed CLI additions
# Insert
yutu video insert --file video.mp4 --title X --privacy public \\
--selfDeclaredMadeForKids=false \\
--containsSyntheticMedia=true \\
--recordingDate=2026-04-10T12:00:00Z
# Update
yutu video update --id VIDEO_ID \\
--containsSyntheticMedia=true
All boolean flags default to the YouTube API default (false / unset) to preserve backward compatibility.
Why this matters for AI creator tools
A growing share of YouTube content uses AI-generated voices (ElevenLabs), images (Midjourney, Gemini, Stable Diffusion), or full scenes (Veo, Kling, Sora). YouTube's Altered Content policy requires disclosing this at upload time. Any creator tool that uploads AI-generated content to YouTube NEEDS to be able to set containsSyntheticMedia — otherwise the creator is in policy violation.
Given yutu's positioning as "The AI-powered toolkit that grows your YouTube channel on autopilot", this feels like an important gap to close.
Offer to contribute
I'd be happy to open a PR adding --containsSyntheticMedia and --selfDeclaredMadeForKids flags to both video insert and video update if the maintainer agrees on the approach. Let me know if you'd prefer a single PR or separate ones per field.
Context: user shipping AI-generated Shorts to the Zero Tax Tags YouTube channel, discovered this gap while trying to disclose AI-generated yacht imagery in a marine-registration short.
Summary
The YouTube Data API v3
videos.insertandvideos.updateendpoints expose several important fields on thestatusresource thatyutu video insertandyutu video updatecurrently don't wrap. This forces users to bypass yutu and call the YouTube API directly whenever they need to set any of these fields.Would love to see them added as flags in a future release — especially
containsSyntheticMedia, which is becoming mandatory for AI-generated content under YouTube's updated policy.Missing fields
selfDeclaredMadeForKidsstatus.selfDeclaredMadeForKids--forKidsflag maps tostatus.madeForKidswhich is a read-only computed field — setting it via the API doesn't actually work. Users want to setselfDeclaredMadeForKidsand let YouTube derivemadeForKidsfrom it.containsSyntheticMediastatus.containsSyntheticMediarecordingDaterecordingDetails.recordingDatetopicDetails.topicIds/topicCategoriestopicDetails.*Current workaround (what users are doing)
Bypass yutu for these fields by calling the YouTube Data API directly. Minimum viable Python script using stdlib
urllib:~80 lines. Works fine but defeats the point of having yutu.
Proposed CLI additions
All boolean flags default to the YouTube API default (
false/ unset) to preserve backward compatibility.Why this matters for AI creator tools
A growing share of YouTube content uses AI-generated voices (ElevenLabs), images (Midjourney, Gemini, Stable Diffusion), or full scenes (Veo, Kling, Sora). YouTube's Altered Content policy requires disclosing this at upload time. Any creator tool that uploads AI-generated content to YouTube NEEDS to be able to set
containsSyntheticMedia— otherwise the creator is in policy violation.Given yutu's positioning as "The AI-powered toolkit that grows your YouTube channel on autopilot", this feels like an important gap to close.
Offer to contribute
I'd be happy to open a PR adding
--containsSyntheticMediaand--selfDeclaredMadeForKidsflags to bothvideo insertandvideo updateif the maintainer agrees on the approach. Let me know if you'd prefer a single PR or separate ones per field.Context: user shipping AI-generated Shorts to the Zero Tax Tags YouTube channel, discovered this gap while trying to disclose AI-generated yacht imagery in a marine-registration short.