Generate faceless videos programmatically. Build content farms, agency pipelines, and AI agents - with a REST API and an MCP server.
Create an API key in Settings β API. Pass it as a Bearer token. Keys are prefixed fl_.
Authorization: Bearer fl_your_api_key_herePOST /api/v1/generate - returns a jobId immediately. Generation runs async (~2-4 min).
curl -X POST https://reeloop.ai/api/v1/generate \
-H "Authorization: Bearer fl_..." \
-H "Content-Type: application/json" \
-d '{
"topic": "The mystery of the Bermuda Triangle",
"language": "en",
"duration": 30,
"style": "documentary",
"voice": "bryan"
}'
# β { "jobId": "uuid", "status": "processing" }GET /api/v1/status/{jobId} - returns video URLs as clips finish.
curl https://reeloop.ai/api/v1/status/{jobId} \
-H "Authorization: Bearer fl_..."
# β {
# "status": "completed",
# "videoUrls": ["https://.../clip1.mp4", ...],
# "audioUrl": "https://.../voiceover.mp3",
# "progress": { "total": 5, "completed": 5, "failed": 0 }
# }POST /api/v1/publish - post a finished video to your connected YouTube/TikTok/Instagram accounts. No more falling back to the dashboard to publish what you generated via the API.
curl -X POST https://reeloop.ai/api/v1/publish \
-H "Authorization: Bearer fl_..." \
-H "Content-Type: application/json" \
-d '{ "jobId": "uuid", "platforms": ["youtube", "tiktok"] }'
# β { "results": [{ "platform": "youtube", "ok": true, ... }] }GET /api/v1/videos - cursor-paginated, newest first.
curl "https://reeloop.ai/api/v1/videos?limit=20" \
-H "Authorization: Bearer fl_..."
# β { "videos": [{ "jobId": "...", "status": "completed", "finalVideoUrl": "..." }], "nextCursor": "2026-06-01T00:00:00Z" }Plug Reeloop into Cursor, Claude, ChatGPT, or n8n. The MCP endpoint exposes generate_video, get_video_status, publish_video, list_videos, and list_connected_platforms tools - the whole generate-to-publish loop, no dashboard required.
{
"mcpServers": {
"reeloop": {
"url": "https://reeloop.ai/api/mcp",
"headers": { "Authorization": "Bearer fl_..." }
}
}
}Generate β poll β done, in Python. Wrap in a cron for a daily video machine.
import requests, time
KEY = "fl_..."
H = {"Authorization": f"Bearer {KEY}"}
# 1. Generate
r = requests.post("https://reeloop.ai/api/v1/generate",
headers=H, json={"topic": "Daily Stoic wisdom", "style": "education"})
job = r.json()["jobId"]
# 2. Poll until ready
while True:
s = requests.get(f"https://reeloop.ai/api/v1/status/{job}", headers=H).json()
if s["status"] in ("completed", "failed"):
break
time.sleep(15)
print(s["videoUrls"]) # β your finished clips| Field | Type | Default |
|---|---|---|
| topic | string (required) | - |
| language | string (BCP-47, e.g. en, fr, es, de...) | en |
| duration | number (10-90 seconds) | 30 |
| style | story | education | documentary | asmr | brainrot | ugc | story |
| voice | catalog id (adam, charlotte, will, audrey, bryan, jett, amber, vanessa, kai, or native voices per language) | clone:<id> | charlotte |
| music | none | cinematic | upbeat | educational | dramatic | none |
| pacing | slow | normal | fast | normal |
Errors use a consistent envelope, and every response carries rate-limit headers:
// 4xx / 5xx body
{ "error": { "code": "out_of_credits", "message": "No credits remaining" } }
// Response headers on every request
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1735689600Machine-readable spec for generating a client SDK or wiring up Zapier/Make/a custom GPT:
https://reeloop.ai/api/v1/openapi.jsonGet an API key and generate your first video programmatically.
Start for free β3 free videos Β· no credit card