YouTube API の公開予約は監査なしでも公開された
監査を受けていない YouTube Data API のプロジェクトから、公開予約を付けて動画を上げたら、予約した時間にそのまま公開されました。YouTube のヘルプでは、監査前のプロジェクトで上げた動画は非公開のまま公開に変えられないはずで、筋トレ動画の編集から投稿までを Claude Code に任せる仕組みを作った時も、この説明に従って公開だけは YouTube Studio で手動でやっていました。
そこで、本当に公開できるのか他の動画で確かめたところ、予約を付けて上げた 12本すべてが指定の日時に公開されました。
監査前の API プロジェクトでも、publishAt の公開予約は時刻どおりに公開された
YouTube ヘルプの 非公開としてロックされた動画 と、2020年7月28日の API の改訂履歴 には、2020年7月28日以降に作られて監査を通っていない API プロジェクトから上げた動画は、非公開から変えられないと書かれています。調べて出てきた解説も、監査前は予約しても公開されないので自動化を作る前に監査を申請する、という説明だったので、私も投稿のコマンドを非公開でのアップロードまでにしていました。
ところが今の videos.insert のリファレンスには「Videos uploaded from unverified API projects are not restricted to private viewing mode.」とあり、監査前のプロジェクトでも非公開には制限されないと書かれています(2026-10-10 時点。いつからこの記述なのかは確かめられていません)。ヘルプとリファレンスで説明が食い違っています。
今の投稿のコマンドは、動画を privacyStatus: private で上げ、同じリクエストで 予約の項目 publishAt に公開の時刻を入れています。この形で上げた 12本(横長の本編 4本とショート 8本)は、今はすべてログインなしで見られます。公開されたときの条件は次のとおりです。
- API プロジェクト: 2026年9月に作成(2020年7月28日より後)で、監査は申請していない
- OAuth の同意画面: 途中で「テスト中」から「本番」に切り替えた(Google の審査は受けていない)。12本のうち 7本は「テスト中」の間に、5本は「本番」にしたあとで上げ、どちらも公開された
- チャンネル: 電話番号の確認済み(カスタムサムネイルを API で設定できている。公開との関係は分からない)
- 求めている権限:
youtube.uploadと、読み取り専用の 2つ
公開されたかどうかは、YouTube の oEmbed(埋め込み用に動画のタイトルなどを返す URL)で確かめました。ログインなしで呼べて非公開の動画には 403 を返すので、予約した動画は上げた直後に 403、予約の時刻を過ぎると 200 とタイトルが返るように変わりました。
$ curl -s -o /dev/null -w "%{http_code}\n" \
"https://www.youtube.com/oembed?url=https://youtu.be/<動画ID>&format=json"
200ログインも API の鍵も要らないので、監査を申請する前に自分のプロジェクトで 1本を予約して上げ、時刻の前後でこの応答が変わるかを見れば、同じことが起きるかを確かめられます。
同じプロジェクトから API で非公開のまま上げ、あとから Studio で予約や公開に変えた 4本も公開されています。ヘルプのとおりなら、この 4本は Studio でも公開に変えられなかったはずです。合わせて 16本のうち、公開に変えられなかった動画は 1本もありませんでした。
私の結果はリファレンスの説明どおりでした。ただ、ヘルプの説明も消されずに残っていて、YouTube がどちらに合わせるつもりなのかは分かりません。これは私のプロジェクトでの結果で、いつまで続くかも分かりません。ヘルプの説明どおりの扱いになったら、Studio でも公開に変えられなくなります。その場合でも、投稿のコマンドは YouTube が返した実際の公開状態(private のまま)と予約の時刻を動画ごとに記録しているので、自動の公開が止まったことは記録で分かります。そうなったら、監査を申請するか、その回だけ Studio の画面から手でアップロードし直します。
なお、上げたあとに予約を変えるときは Studio で行っています。Google に求める権限をアップロードと読み取りだけにしていて、動画の情報を書き換える権限を持たせていないためです。
ちなみに、リフレッシュトークンが 7日で切れるのは OAuth の同意画面が「テスト中」のときだけなので(Google の OAuth 2.0 の公式ドキュメント)、「本番」に切り替えて 7日ごとのログインも要らなくしました。本番にするにはホームページとプライバシーポリシーの URL が要りますが、Cloudflare Pages の *.pages.dev は Public Suffix List に載っているため、独自ドメインを持たずに Google の承認済みドメインにできました。
審査を通していないアプリなので、ログインの画面には「確認されていないアプリ」の警告が出ますが、本番にしてログインし直してから 7日たったあとも、ログインし直さずに動いているようです。
素材をブラウザから送ってから、編集(Claude Code に YouTube 動画編集を任せた)と確認を経てこの公開予約で上げるまでの流れは、AI で動画を送るだけで YouTube に上がる仕組みを作る にまとめています。