API & MCP

Generate faceless videos programmatically. Build content farms, agency pipelines, and AI agents - with a REST API and an MCP server.

Authentication

Create an API key in Settings β†’ API. Pass it as a Bearer token. Keys are prefixed fl_.

Authorization: Bearer fl_your_api_key_here

Generate a video

POST /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" }

Poll status

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 }
# }

Publish a video

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, ... }] }

List your videos

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" }

MCP server

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_..." }
    }
  }
}

Full content-farm example

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

Parameters

FieldTypeDefault
topicstring (required)-
languagestring (BCP-47, e.g. en, fr, es, de...)en
durationnumber (10-90 seconds)30
stylestory | education | documentary | asmr | brainrot | ugcstory
voicecatalog id (adam, charlotte, will, audrey, bryan, jett, amber, vanessa, kai, or native voices per language) | clone:<id>charlotte
musicnone | cinematic | upbeat | educational | dramaticnone
pacingslow | normal | fastnormal

Errors & rate limits

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: 1735689600

OpenAPI spec

Machine-readable spec for generating a client SDK or wiring up Zapier/Make/a custom GPT:

https://reeloop.ai/api/v1/openapi.json

Build on Reeloop.

Get an API key and generate your first video programmatically.

Start for free β†’

3 free videos Β· no credit card