MakeAIClips API
Generate viral short-form clips from video files, YouTube URLs, or Twitch clips programmatically.
Copy for your Agent
Copy this complete reference and paste it into your AI agent's context. Contains everything needed to use the MakeAIClips API.
For AI Agents
MakeAIClips is agent-compatible. File upload is the primary method. URL jobs support YouTube and Twitch clip links when upload is not available.
⚡ Quick Flow
POST /api/v1/clips/uploadwith multipart form-data and avideofile- Fallback: use
POST /api/v1/clipswith a YouTube or Twitch clip URL - Poll
GET /api/v1/clips/:job_idevery 3s until complete
🎨 Style Parameters
caption_style: karaoke-yellow, white-shadow, boxed, gradient-bold, subtitle-documentary, typewriter, cinematic, nonetitle_style: bold-center, top-bar, pill, gradient-bg, nonetitle_duration: 5, 10, 30, half, fullclip_duration: short, medium, longnum_clips: 1-10quality: high, medium, low
Recommended: upload a video file directly
curl -X POST https://makeaiclips.live/api/v1/clips/upload \ -H "Authorization: Bearer mak_live_YOUR_KEY" \ -F "video=@my_video.mp4" \ -F "caption_style=karaoke-yellow" \ -F "title_style=pill" \ -F "title_duration=10" \ -F "clip_duration=medium" \ -F "num_clips=3" \ -F "quality=high"
💡 File upload is the recommended method. YouTube downloads may be intermittently blocked. If you hit extraction issues, upload the video directly or use the Chrome extension from the dashboard.
Authentication
Every request requires an API key. Get yours from the API Key page in your dashboard.
Add this header to every request:
Authorization: Bearer mak_live_your_api_key_here
Base URL
https://makeaiclips.live/api/v1
Create Clip Job
/api/v1/clipsCreate a job from a supported URL. This endpoint accepts YouTube URLs and Twitch clip URLs. For highest reliability, prefer the file upload endpoint below.
✅ URL support: send a YouTube video URL or a Twitch clip URL in the youtube_url field. You can also include source_title if you want a custom display name on the job.
JSON Body
| Field | Type | Required | Description |
|---|---|---|---|
youtube_url | string | Yes | YouTube URL or Twitch clip URL. |
source_title | string | No | Optional source title to store with the job. |
caption_style | string | No | karaoke-yellow (default), white-shadow, boxed, gradient-bold, subtitle-documentary, typewriter, cinematic, none |
title_style | string | No | bold-center (default), top-bar, pill, gradient-bg, none |
title_duration | string | No | 5 (default), 10, 30, half, full |
clip_duration | string | No | short (15-30s), medium (30-90s), long (60-120s) |
num_clips | number | No | 1-10, default 3 |
quality | string | No | high, medium, low |
Response
{
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "processing",
"clips_remaining": 4
}File Upload (Recommended)
/api/v1/clips/uploadSubmit a local video file as multipart form-data. This is the recommended endpoint because it avoids the extraction failures that can happen with third-party platforms.
Multipart form-data fields:
video(file, required)caption_style,title_style,title_duration,clip_duration,num_clips,quality
curl -X POST https://makeaiclips.live/api/v1/clips/upload \ -H "Authorization: Bearer mak_live_your_key" \ -F "video=@my_video.mp4" \ -F "caption_style=karaoke-yellow" \ -F "num_clips=3"
Get Job Status
/api/v1/clips/:job_idPoll this endpoint every 3 to 5 seconds until status is complete or failed.
{
"job_id": "a1b2c3d4-...",
"status": "complete",
"progress": "Done!",
"clips": [
{
"clip_index": 1,
"download_url": "/api/v1/clips/a1b2.../download/1",
"duration_seconds": 45.2,
"hook_title": "The Secret Nobody Talks About"
}
]
}/api/v1/clipsList recent jobsCheck Usage
/api/v1/usage{
"plan": "pro",
"clips_used": 23,
"clips_limit": 100,
"clips_remaining": 77,
"resets_at": "2026-04-01T00:00:00.000Z"
}/api/v1/keys/regenerateRegenerate your API keyError Handling
| Code | Meaning |
|---|---|
400 | Bad request — missing video or unsupported URL |
401 | Unauthorized — missing or invalid API key |
404 | Job not found |
429 | Clip limit reached — upgrade your plan |
502 | Backend unavailable — try again in 1 minute |
503 | Service temporarily overloaded |
Rate Limits & Plans
Free
10/mo
$0/month
Pro
100/mo
$20/month
Studio
300/mo
$50/month
Credits consumed equal num_clips on both POST /api/v1/clips and POST /api/v1/clips/upload. Credits reset monthly.
Python Example
import requests
import time
API_KEY = "mak_live_your_key"
BASE = "https://makeaiclips.live/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
with open("my_video.mp4", "rb") as f:
job = requests.post(
f"{BASE}/clips/upload",
files={"video": f},
data={"caption_style": "karaoke-yellow", "num_clips": "3"},
headers=HEADERS
).json()
while True:
result = requests.get(f"{BASE}/clips/{job['job_id']}", headers=HEADERS).json()
if result["status"] == "complete":
break
if result["status"] == "failed":
raise RuntimeError(result.get("error"))
time.sleep(3)Node.js Example
const API_KEY = "mak_live_your_key";
const BASE = "https://makeaiclips.live/api/v1";
const formData = new FormData();
formData.append("video", fs.createReadStream("my_video.mp4"));
formData.append("caption_style", "karaoke-yellow");
formData.append("num_clips", "3");
const { job_id } = await fetch(`${BASE}/clips/upload`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}` },
body: formData
}).then((r) => r.json());cURL Examples
Create a clip job (file upload)
curl -X POST https://makeaiclips.live/api/v1/clips/upload \ -H "Authorization: Bearer mak_live_your_key" \ -F "video=@my_video.mp4" \ -F "caption_style=karaoke-yellow" \ -F "num_clips=3"
Create a clip job (YouTube or Twitch URL)
curl -X POST https://makeaiclips.live/api/v1/clips \
-H "Authorization: Bearer mak_live_your_key" \
-H "Content-Type: application/json" \
-d '{"youtube_url": "https://clips.twitch.tv/FamousClipSlug", "source_title": "My stream highlight"}'Check job status
curl https://makeaiclips.live/api/v1/clips/YOUR_JOB_ID \ -H "Authorization: Bearer mak_live_your_key"
Chrome Extension
The MakeAIClips Chrome extension enables direct YouTube link support inside the dashboard. It handles downloads through the user's browser session and IP, which helps bypass the server-side restrictions that can affect YouTube extraction.
Install it from /extension. Use it when you want dashboard-based YouTube clipping without downloading the source file manually.