YouTubePilot

API, CLI and MCP

Everything the Studio does in the browser, you can do from Claude Code, Cursor, Codex, a shell script or your own app: cut pauses and ums, burn in captions, write titles, description and chapters, clip Shorts, and read your niche research.

Quick start

  1. Create an API key at Studio → API & MCP. Keys start with ytp_. Treat them like a password.
  2. Pick how you want to connect: MCP for AI agents, the CLI for your terminal, or the REST API.
  3. Edits use the same minutes as the website: the length of the raw video you upload.

MCP server

The server speaks the Model Context Protocol over streamable HTTP at https://youtubepilot.com/mcp. Authenticate with your key as a bearer token.

Claude Code

claude mcp add --transport http youtubepilot https://youtubepilot.com/mcp \
  --header "Authorization: Bearer ytp_YOUR_KEY"

Then ask in plain words, for example: “Edit ~/Movies/take3.mov with razor cuts and green captions, give me 3 Shorts, and pick the best title for my niche.” Claude uploads the file with create_upload, waits with get_edit and downloads the results.

Cursor, Windsurf and other clients

{
  "mcpServers": {
    "youtubepilot": {
      "url": "https://youtubepilot.com/mcp",
      "headers": { "Authorization": "Bearer ytp_YOUR_KEY" }
    }
  }
}

Tools

ToolWhat it does
create_uploadStarts an edit for a local file. Returns an upload URL and a ready-to-run curl command; the edit starts when the upload completes.
edit_videoEdits a video from a direct link (Dropbox, Google Drive, S3 or any https file). YouTube links are not supported.
get_editProgress while it runs; when done, download links (valid 24 hours), stats, titles, description with chapters, tags, thumbnail text, hook feedback and Shorts.
rerender_editRenders again with new settings. Reuses the transcript and uses no extra minutes.
list_editsRecent edits and minutes left.
list_workspaces, get_ideas, get_gaps, askYour niche research: video ideas backed by competitor breakouts, topics you haven’t covered, and answers from competitors’ transcripts.

CLI

ytpilot is a single Python file (3.8+, no dependencies).

curl -fsSL https://youtubepilot.com/install.sh | sh
ytpilot login ytp_YOUR_KEY
ytpilot edit video.mp4

It uploads in resumable 16 MB chunks, shows progress, and saves the edited MP4, captions.srt, transcript.txt, the Shorts and package.json (titles, description, chapters, tags) into video-ytpilot/ next to your file.

ytpilot edit take.mov --pauses razor --captions boxed --highlight green --shorts 2
ytpilot edit take.mov --no-fillers --captions none -o final.mp4
ytpilot edit take.mov --json          # machine-readable result for agents and scripts
ytpilot list                          # recent edits and minutes left
ytpilot ideas | ytpilot gaps | ytpilot ask "what are people asking about pricing?"

Set YOUTUBEPILOT_API_KEY instead of ytpilot login in CI.

REST API

Base URL https://youtubepilot.com. Send Authorization: Bearer ytp_… on every request. Bodies and responses are JSON, except the upload, which is raw bytes.

1. Create the edit

curl -s https://youtubepilot.com/api/edits \
  -H "Authorization: Bearer $YTP" -H "Content-Type: application/json" \
  -d '{"name": "take.mp4", "size": 734003200, "settings": {"pauses": "tight"}}'
# → {"edit": {"id": 42, "state": "uploading", ...}, "upload_url": ".../api/edits/42/upload", "chunk_size": 16777216}

2. Upload

PUT the bytes at ?offset=N. Send the whole file at once, or in chunks. If a chunk is sent at the wrong offset you get 409 with received (the bytes already stored), so you can resume. Add &start=1 to start the edit as soon as the last byte arrives, or call POST /api/edits/42/start.

curl -X PUT "https://youtubepilot.com/api/edits/42/upload?offset=0&start=1" \
  -H "Authorization: Bearer $YTP" --data-binary @take.mp4

3. Poll

curl -s https://youtubepilot.com/api/edits/42 -H "Authorization: Bearer $YTP"
# state: uploading → queued → processing → done (or error)

Other endpoints

Endpoint
POST /api/edits/import{"url", "settings"}: edit from a direct link.
GET /api/editsRecent edits and your allowance.
POST /api/edits/{id}/rerender{"settings"}: render again with new settings.
DELETE /api/edits/{id}Delete the edit and its files now.
GET /api/edits/{id}/files/{name}Download an output. Links returned to API keys are signed (?t=) and work without a header for 24 hours.

Edit settings

KeyValuesDefault
pausesnatural (keeps a breath), tight, razor (jump cuts), offtight
fillerstrue cuts “um”, “uh”, “erm” and similar on the exact syllabletrue
captionspop (word-by-word highlight), clean, boxed, nonepop
highlightyellow, green, red, cyan, whiteyellow
uppercasePop captions in capitalstrue
shorts0 to 5 vertical clips (Free: 1)3
languageauto or a two-letter code such as en, es, hiauto

Results

A finished edit has video_url, files (MP4, SRT, TXT), shorts (each with url, title, hook, duration), stats (source_duration, duration, removed, cuts, fillers_removed) and package:

{
  "titles": [{"title": "...", "why": "..."}],          // 5 options
  "description": "...", "description_full": "... with chapters",
  "chapters": [{"t": 0, "title": "..."}],
  "tags": ["..."], "thumbnail_text": ["..."],
  "hook": {"score": 7, "note": "..."},                 // your first 30 seconds
  "pinned_comment": "...",
  "niche_titles_used": 12                              // breakout titles from your niche it learned from
}

Titles are modeled on your competitors’ breakout videos when you have a niche workspace.

Limits