API и MCP

Создавайте рилс из кода или через своего AI-агента

Создавайте рилсы, проверяйте статус и просите правки через REST API и MCP-сервер. Подключите Claude, ChatGPT или Grok, и агент будет делать рилсы за вас.

$1 за кредит, оплата по использованию, та же таблица кредитов, что и в приложении.

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