---
title: "Upload Video"
method: POST
path: "/accounts/{account_id}/launch/drafts/{draft_id}/upload-video"
tags: ["launch"]
---

# Upload Video

`POST /accounts/{account_id}/launch/drafts/{draft_id}/upload-video`

## Request

- Base URL: `https://api.meetadmiral.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.meetadmiral.com/accounts/{account_id}/launch/drafts/{draft_id}/upload-video`
- Auth: none declared

Publish a picked Studio video to YouTube (UNLISTED) and stamp the
returned id onto the draft's plan.

SCOPE-GATED end to end: flag-gated (video_campaign_enabled_for) so the
endpoint is invisible to accounts the reviewer hasn't opted in, and the
upload itself needs the youtube.upload scope, which is only granted on
the flag-gated re-consent path. Until Google verifies that scope, a real
call returns Google's insufficient-permission error verbatim (502) —
that's the honest state, not a fake success. The campaign builder does
NOT depend on this: a youtube_video_id can also be pasted directly (the
editor's paste box, and the reviewer's live smoke).

## Path parameters

- `draft_id` string, uuid, required
- `account_id` string, uuid, required

## Request body

- UploadVideoRequest
  - `video_media_id` string, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/meetadmiral/apis/admiral-api.md) · [All operations](https://skmtc.dev/meetadmiral/apis/admiral-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meetadmiral/apis/admiral-api/revisions/3cf1ee58ce50?raw)
