API وMCP

اصنع الريلز من الكود، أو من وكيل الذكاء الاصطناعي

أنشئ الريلز وتابع حالتها واطلب التعديلات عبر REST API وخادم MCP. اربط Claude أو ChatGPT أو Grok ودع وكيلك يصنع الريلز لك.

دولار واحد لكل رصيد، يُحتسب حسب الاستخدام وبجدول الأرصدة نفسه في التطبيق.

Quickstart

  1. Sign in at reelsi.ai (your first reel is free) and create a key in Settings → API.
  2. Create a reel from a public video URL. It takes 10 to 30 minutes.
  3. Poll GET /reels/{id} or pass a webhook_url. When status is ready, video.url is 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

MethodPathWhat
POST/reelsCreate. 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/reelsList, 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_url

Revisions

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