Quickstart
- Sign in at reelsi.ai (your first reel is free) and create a key in Settings → API.
- Create a reel from a public video URL. It takes 10 to 30 minutes.
- Poll
GET /reels/{id}or pass awebhook_url. Whenstatusisready,video.urlis the MP4.
curl -X POST https://reelsi.ai/api/v1/reels \
-H "Authorization: Bearer $REELSI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042" \
-d '{
"kind": "video",
"video_url": "https://example.com/me-talking.mp4",
"prompt": "20 seconds, strongest moment first, bold captions",
"language": "en",
"webhook_url": "https://yourapp.com/hooks/reelsi"
}'{
"id": "ECyNEgGpzv8grt5y900d",
"object": "reel",
"status": "queued",
"progress": 2,
"kind": "video",
"prompt": "20 seconds, strongest moment first, bold captions",
"language": "en",
"credits_charged": 3,
"video": null,
"versions": [],
"revisions": []
}Authentication
Every call sends Authorization: Bearer rsk_live_…. Keys belong to one account, spend its credits and can be revoked any time in Settings. Keep them on your server, never in a browser or app bundle. Base URL: https://reelsi.ai/api/v1.
Credits
API usage is billed at $1 per credit, with the same credit table as the app: video reel 3, one clip from long content 2, a revision 2. Credits are taken when the job starts and returned automatically if production fails or a revision cannot be applied. Free accounts can run video reels, long-content clips and revisions; other modes need a purchase.
curl https://reelsi.ai/api/v1/credits -H "Authorization: Bearer $REELSI_API_KEY"
# → { "object": "credits", "balance": 26, "paid_account": true,
# "prices": { "saas_video_reel": 3, "saas_long_clip": 2, "saas_chat_edit": 2, … } }Reels
| Method | Path | What |
|---|---|---|
| POST | /reels | Create. kind: video (default) or long_clip; video_url or upload_id; optional prompt, language (en he ar ru fr es pt de it), webhook_url. |
| GET | /reels | List, newest first (?limit=1..100). |
| GET | /reels/{id} | Status: queued → working → ready (or review: a final human check; failed: credits returned). |
curl https://reelsi.ai/api/v1/reels/ECyNEgGpzv8grt5y900d \
-H "Authorization: Bearer $REELSI_API_KEY"{
"id": "ECyNEgGpzv8grt5y900d",
"status": "ready",
"progress": 100,
"video": {
"url": "https://…/reel.mp4",
"poster_url": "https://…/reel.jpg",
"duration": 21.4,
"version": 1
},
"versions": [ { "version": 1, "url": "https://…/reel.mp4" } ],
"revisions": []
}Uploads
For a local file (up to 3 GB) ask for signed URLs and upload the parts straight to storage; the file never passes through our API servers.
# 1. ask for signed URLs
curl -X POST https://reelsi.ai/api/v1/uploads -H "Authorization: Bearer $REELSI_API_KEY" \
-H "Content-Type: application/json" -d '{ "filename": "talk.mp4", "bytes": 52428800 }'
# → { "upload_id": "…", "part_bytes": 41943040, "parts": [ { "part": 1, "method": "PUT", "url": "…" }, … ] }
# 2. PUT each part in order (bytes [i*part_bytes, (i+1)*part_bytes))
curl -X PUT "<parts[0].url>" -H "Content-Type: application/octet-stream" --data-binary @part-1
# 3. create the reel with { "upload_id": "…" } instead of video_urlRevisions
Ask for a change in plain words on a ready reel: captions (size, on/off), pace, length, order, music. One revision runs at a time; the result appears as a new entry in versions. If it cannot be done automatically its status is unsupported and the 2 credits come back.
curl -X POST https://reelsi.ai/api/v1/reels/ECyNEgGpzv8grt5y900d/revisions \
-H "Authorization: Bearer $REELSI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: rev-1" \
-d '{ "text": "Make the captions bigger and the pace faster" }'Webhooks
Pass webhook_url (public https) on create. Events: reel.ready, reel.failed, revision.ready, revision.failed. Answer with any 2xx; failures are retried with backoff for up to a day. Verify the signature with the secret from Settings → API.
POST https://yourapp.com/hooks/reelsi
Reelsi-Signature: t=1792622400,v1=5f2b…
{ "id": "evt_…", "type": "reel.ready", "created": 1792622400, "data": { "id": "ECyNEgGpzv8grt5y900d", "status": "ready", "video": { … } } }import crypto from "node:crypto";
// Express / Next.js: use the RAW body string
export function verifyReelsi(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 || ""));
}Errors, idempotency and limits
Errors are { error: { code, message } } with the HTTP status: 400 invalid, 401 key, 402 insufficient_credits / needs_purchase, 404, 409 not_ready / edit_in_progress, 429 rate_limited. Send an Idempotency-Key on every POST that costs credits: a retry with the same key returns the same reel and is never charged twice. Limits per key: 120 reads and 20 writes a minute.
HTTP/1.1 402 Payment Required
{ "error": { "code": "insufficient_credits", "message": "Not enough credits for this action…", "balance": 1, "needed": 3 } }MCP for agents (Claude, ChatGPT, Grok)
Endpoint https://reelsi.ai/mcp (Streamable HTTP), the same API key as Bearer. Tools: get_credits, create_upload, create_reel (with dry_run to quote without charging), get_reel, list_reels, revise_reel.
Claude Code
claude mcp add --transport http reelsi https://reelsi.ai/mcp \
--header "Authorization: Bearer rsk_live_…"Claude Desktop
{
"mcpServers": {
"reelsi": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://reelsi.ai/mcp",
"--header", "Authorization: Bearer ${REELSI_API_KEY}"],
"env": { "REELSI_API_KEY": "rsk_live_…" }
}
}
}OpenAI Responses API / Grok (xAI)
// OpenAI Responses API or xAI (Grok) with remote MCP tools
{
"model": "…",
"tools": [{
"type": "mcp",
"server_label": "reelsi",
"server_url": "https://reelsi.ai/mcp",
"headers": { "Authorization": "Bearer rsk_live_…" },
"require_approval": "never"
}],
"input": "Make a 20 second reel from https://example.com/talk.mp4"
}ChatGPT custom connectors sign in with OAuth, which is not available yet for Reelsi. Until then use the REST API from a GPT Action with Bearer auth.
Raw JSON-RPC
curl -X POST https://reelsi.ai/mcp -H "Authorization: Bearer $REELSI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"create_reel",
"arguments":{"video_url":"https://example.com/talk.mp4","dry_run":true}}}'