---
title: "焼き上がった動画を YouTube に投稿する（消費なし）"
method: POST
path: "/api/v1/projects/{projectId}/upload"
tags: ["projects"]
---

# 焼き上がった動画を YouTube に投稿する（消費なし）

`POST /api/v1/projects/{projectId}/upload`

## Request

- Base URL: `https://app.yukkurigen.com`
- URL: `https://app.yukkurigen.com/api/v1/projects/{projectId}/upload`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

## Path parameters

- `projectId` string, required

## Request body

- object
  - `renderId` string, required: 投稿する完了済みレンダーのID。API キーからは、クレジットを使って書き出したもの（完成・creditsCharged > 0・返金なし）だけ
  - `title` string, required
  - `description` string
  - `tags` string[]
  - `privacyStatus` 'private' | 'unlisted' | 'public'
  - `notifySubscribers` boolean
  - `thumbnailUrl` string, uri

## Response `200`

投稿ジョブを作った

- object
  - `success` boolean
  - `jobId` string

## Other responses

- `400`: チャンネル未設定・YouTube 未連携・リクエスト不正
- `401`: 認証が必要（code: unauthenticated）
- `403`: APIキーに youtube:upload スコープが無い・他人のチャンネル（code: insufficient_scope / forbidden）、または API キーから、クレジットを使って書き出していないレンダーを投稿しようとした（code: render_not_paid。reason: not_charged / refunded / failed / not_completed。nextStep に利用者への案内）
- `404`: プロジェクトまたは renderId が見つからない
- `409`: API キーから、まだ焼いている途中のレンダーを投稿しようとした（code: render_not_ready）。進捗で done かつ outputFile を確かめてから呼び直す
- `429`: 回数の上限（1人1日10本まで〔直近24時間〕・同じ renderId は3回まで。どちらも失敗した分は数えない。失敗も含めた試行は1人1日20回まで）。1日の上限・試行の上限なら Retry-After に待つ秒数
- `500`: ジョブ作成に失敗

## Changes

- **2026-10-20** `ba5f36b016da`: 2 info
  - added the media type `application/json` for the response with the status `403`
  - added the non-success response with the status `409`

[Operation history](https://skmtc.dev/yukkurigen/apis/yukkurigen-ai-operated-api/changes/api/v1/projects/:projectId/upload/post.md)

---

[API](https://skmtc.dev/yukkurigen/apis/yukkurigen-ai-operated-api.md) · [All operations](https://skmtc.dev/yukkurigen/apis/yukkurigen-ai-operated-api/llms.txt) · [OpenAPI document](https://skmtc.dev/yukkurigen/apis/yukkurigen-ai-operated-api/revisions/ba5f36b016da?raw)
