Clipsteady
For developers

Async by design.
Signed on the way back.

Clipping a two-hour video is not a request/response problem, so we do not pretend it is. You submit and get an id straight away, then either poll or let a signed webhook find you.

Endpoints

POST /api/v1/shorts Submit a job. Returns a request id immediately with status "queued".
GET /api/v1/shorts/{id} Progress percentage and the stage it is currently on.
GET /api/v1/shorts/{id}/clips Finished clips with signed download URLs, scores and hooks, strongest first.
GET /api/v1/requests Your jobs, paginated.
DELETE /api/v1/shorts/{id} Remove a job and its clips.

Authenticate with X-Api-Key. Keys are shown once when you create them and stored hashed — we cannot recover one for you, only issue a new one.

Webhooks

Pass a webhook_url when you submit and we POST the finished job to it. Every delivery carries an HMAC-SHA256 signature computed over the exact raw body — verify it before trusting the payload.

X-Clipsteady-Event: clip_job.completed
X-Clipsteady-Signature: <hmac-sha256 of raw body>

hash_hmac('sha256', $raw, $secret)

MCP server

Point Claude Code, Claude Desktop, Cursor or n8n at our MCP server and an agent can make clips with no integration code at all. Already using a competitor's MCP server? The tool names match — change the environment variables and it keeps working.

{
  "mcpServers": {
    "clipsteady": {
      "command": "npx",
      "args": ["-y", "@clipsteady/mcp-server"],
      "env": { "CLIPSTEADY_API_KEY": "sk_…" }
    }
  }
}

A whole job, end to end

# 1. submit — returns immediately
curl -sX POST https://api.clipsteady.com/api/v1/shorts \
  -H "X-Api-Key: $CLIPSTEADY_KEY" \
  -d source_url="https://youtube.com/watch?v=..." \
  -d caption_template=karaoke \
  -d webhook_url="https://you.example/hooks/clipsteady"
{ "id": "9f2c8b14-…", "status": "queued" }

# 2. poll, if you would rather not run a webhook
curl -s https://api.clipsteady.com/api/v1/shorts/9f2c8b14-… \
  -H "X-Api-Key: $CLIPSTEADY_KEY"
{ "status": "processing", "progress_pct": 60, "current_step": "reframing" }

# 3. collect — sorted strongest first
curl -s https://api.clipsteady.com/api/v1/shorts/9f2c8b14-…/clips \
  -H "X-Api-Key: $CLIPSTEADY_KEY"
[ { "virality_score": 92, "hook_title": "…", "download_url": "…" } ]