Developers
API and MCP
Start clipping projects from YouTube links, check on them and download the finished clips from your own scripts or from an AI agent. The API is part of the free, invite-only beta and acts with your account and your credits.
Authentication
Create a key under Settings → API keys. The full key is shown once; we store only a hash of it. Send it with every request:
Authorization: Bearer mc_live_...A missing, unknown or revoked key answers 401. Revoke a key in Settings and it stops working right away. You can have up to 10 active keys.
Endpoints
POST /api/v1/projects: create a project from a YouTube link.GET /api/v1/projects: your projects, newest first (up to 50).GET /api/v1/projects/{id}: status, options and clips of one project.GET /api/v1/clips/{id}/download?format=mp4|srt|vtt|thumb: redirects (302) to a download link that is valid for five minutes.
The machine-readable description is at /api/v1/openapi.json (OpenAPI 3.1).
Create a project
curl -X POST https://clip.devmiro.cloud/api/v1/projects \
-H "Authorization: Bearer $MIROCLIPS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"clip_length": "auto",
"max_clips": 6,
"rights_confirmed": true
}'
# 201 Created
{ "id": "3f1c2e4d-5a6b-4c7d-8e9f-0a1b2c3d4e5f" }source_url(required): a YouTube video link. Uploads are only possible in the app.clip_length(required):auto,0-1,1-3or3-5minutes.rights_confirmed(required): must betrue. You confirm that you own the video or have permission to use it, including the rights of people shown in it.focus_prompt: what the AI should look for, up to 300 characters.max_clips:3,6or12(default 12).language: the spoken language as a two-letter code (en, de, es, fr, it, pt, nl, pl, tr, ja, ko), or leave it out to auto-detect.caption_style:bold,karaoke(default) orminimal.enhance_audio:truefor neural speech noise removal (RNNoise) and loudness normalisation.aspect_ratio:9:16vertical (default),1:1square,4:5portrait or16:9landscape.clip_mode: how clips are picked.speechuses the transcript,visualscores sampled frames of the video (sports, gameplay, vlogs without much talking),auto(default) switches to visual when a video has little speech.apply_brand_kit:truerenders the clips with your brand kit (logo, caption colors and font, intro and outro). Save a brand kit in the settings first; without one the request is refused with409 no_brand_kit. The kit as it is at render time applies, and an intro or outro makes each clip file (and its duration) that much longer; the SRT and VTT files are shifted to match.layout:singleis one crop that follows the person who is speaking, estimated from mouth movement.splitstacks two people, each crop following its own face; it works with9:16only, and clips without two people on screen together get one crop.auto(default) splits when two people are on screen together for most of a 9:16 clip.resolution:1080p(default) or4k. 4K renders at twice the format size (2160x3840 for 9:16) only when the source is 4K and fits the size limit; otherwise the clip is rendered at 1080p. Each clip inGET /api/v1/projects/{id}reports its realoutput_widthandoutput_height.
Projects created through the API work exactly like the ones from the app: they hold credits until the video's real length is known and count towards the limit of 10 new projects per hour.
Check the status
curl https://clip.devmiro.cloud/api/v1/projects/3f1c2e4d-5a6b-4c7d-8e9f-0a1b2c3d4e5f \
-H "Authorization: Bearer $MIROCLIPS_API_KEY"
{
"id": "3f1c2e4d-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"status": "done",
"error": null,
"clips": [
{ "id": "e3a1cc98-...", "title": "Why pricing pages fail", "score": 91,
"start_s": 312.4, "end_s": 371.9, "status": "ready" }
],
...
}status moves from queued to processing to done or failed; a failed project carries an error with a code and a plain-language message. Polling every 30 seconds is enough.
Download a clip
curl -L -o clip.mp4 \
"https://clip.devmiro.cloud/api/v1/clips/e3a1cc98-e8ff-4040-b807-8d70dc91ca73/download?format=mp4" \
-H "Authorization: Bearer $MIROCLIPS_API_KEY"Clips with status ready can be downloaded. srt and vtt return the captions of the clip, thumb its 1280×720 title thumbnail (JPEG). Clips rendered before captions files or thumbnails existed answer 404 with captions_missing or thumbnail_missing until they are re-rendered in the app.
Errors
{ "error": { "code": "rate_limited", "message": "At most 10 projects per hour. Try again in 1200 seconds." } }400 invalid_request: the body or a parameter is invalid; the message names the field.401 unauthorized: missing, unknown or revoked key.402 insufficient_credits: not enough credits for the video.404 not_found: no such project or clip, or it belongs to another account.409 no_brand_kit:apply_brand_kitistruebut the account has no saved brand kit.429 rate_limited: more than 10 new projects in the last hour; theRetry-Afterheader says how many seconds to wait.503 intake_paused: new projects are paused for a moment.500 internal_erroror502 internal_error(a download could not be signed): something failed on our side; retry shortly.
MCP server
The MiroClips MCP server lets agents such as Claude use the API as tools: create_project, list_projects, get_project and get_clip_download_url. It is a small Node.js program (Node 22 or newer) that runs on your machine over stdio and calls the API with your key.
It is not published to npm yet; during the beta we send the build on request at hello@clip.devmiro.cloud. Then add it to Claude Desktop (claude_desktop_config.json) or Claude Code (.mcp.json):
{
"mcpServers": {
"miroclips": {
"command": "node",
"args": ["/path/to/miroclips-mcp/dist/index.js"],
"env": {
"MIROCLIPS_API_KEY": "mc_live_...",
"MIROCLIPS_API_URL": "https://clip.devmiro.cloud"
}
}
}
}