SKIP TO CONTENT ↓
EARLY ACCESS · MODEL IN TRAINING

The RCM 1 API.

Send raw footage in. Get a finished cut back — with every editing decision on the record.

DECISION-PROVENANCE EDITING · OUR OWN MODEL · NEVER A WRAPPER

QUICKSTARTFULL REFERENCE
EARLY ACCESS · MODEL IN TRAINING

The contract is live. The model is not — yet.

RCM 1 direct inference has not shipped. POST /api/model/v1/edit validates your key and your request for real, then answers 503 MODEL_NOT_DEPLOYED carrying the live deployment status. Nothing on this surface fakes inference. The endpoint arms when the model clears our quality bar; the request and response shapes below are final, so what you build today works unchanged that day. Editing works today over MCP — request_edit runs the same queue the web app uses, fulfilled by the Real Cut bench while the model trains.

QUICKSTART

REST

POST /api/model/v1/edit
curl -X POST https://realcut.ai/api/model/v1/edit \
  -H "Authorization: Bearer rc_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"project_id":"proj_your_project_id","brief":"45s vertical short, hook first, keep the laugh","aspect":"9:16"}'
THE RESPONSE TODAY — MODEL IN TRAINING
{
  "error": "MODEL_NOT_DEPLOYED",
  "message": "RCM 1 direct inference is not live: no model version is deployed yet.",
  "active_version": null,
  "inference_worker_armed": false,
  "retryable": true,
  "use_instead": "POST /api/mcp tool request_edit (or the web app) — the bench-fulfilled queue, live today.",
  "as_of": "2026-07-11T00:00:00.000Z"
}
THE RESPONSE WHEN RCM 1 IS LIVE — CONTRACT-FINAL
{
  "job_id": "job_sample123",
  "status": "queued",
  "model_version": "RCM-1.0.x",
  "credits_quoted": 12,
  "credits_remaining": 388,
  "poll_after_s": 5
}
THE CONTRACT, LIVE NOW — NO AUTH
curl https://realcut.ai/api/model/v1/edit

MCP

WORKS END-TO-END TODAY · BENCH-FULFILLED · SAME QUEUE AS THE APP
claude mcp add --transport http realcut https://realcut.ai/api/mcp --header "Authorization: Bearer rc_live_YOUR_KEY"

The working-today flow, over MCP:

create_project → submit_footage → request_edit → get_edit_status → get_edit → refine_edit → export_edit

No SDK on hand: the same call as raw JSON-RPC.
curl -X POST https://realcut.ai/api/mcp \
  -H "Authorization: Bearer rc_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"request_edit","arguments":{"project_id":"proj_your_project_id","brief":"45s vertical short, hook first, keep the laugh"}}}'

KEYS

Mint a key from this account, or reuse the one you already have — one key works on both fronts.

SERVERPOST https://realcut.ai/api/mcp · 0.1 · LIVE

CHECKING ACCESS…

THE BLOCKS BELOW CARRY A PLACEHOLDER — MINT A KEY TO FILL THEM IN.

CLAUDE CODE · ONE COMMAND
claude mcp add --transport http realcut https://realcut.ai/api/mcp --header "Authorization: Bearer rc_live_YOUR_KEY"

One paste in a terminal. The server lands under the name realcut.

CURSOR · MCP.JSON
{
  "mcpServers": {
    "realcut": {
      "url": "https://realcut.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer rc_live_YOUR_KEY"
      }
    }
  }
}

The JSON is the entry for .cursor/mcp.json. Minting a key turns this into a one-click install button.

CLAUDE DESKTOP · CONFIG
{
  "mcpServers": {
    "realcut": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://realcut.ai/api/mcp",
        "--header",
        "Authorization:${RC_MCP_AUTH}"
      ],
      "env": {
        "RC_MCP_AUTH": "Bearer rc_live_YOUR_KEY"
      }
    }
  }
}

Settings → Developer → Edit Config, merge this into claude_desktop_config.json, then restart the app. Desktop connectors authenticate with OAuth only, so this config bridges through mcp-remote — it needs Node installed.

MINT ON ANY ACCOUNT · SHOWN ONCE · SHA256-STORED

UP TO 10 ACTIVE KEYS · REVOKE ANY TIME

ONE KEY, BOTH FRONTS — REST + MCP

LIMITS & QUOTAS

What exists, and only what exists.

TODAY

10 active keys per userRevoke one to mint another.
Credits are the only quotaOne meter with the product; plans include credits — see pricing. Top-ups: $10 for 40 credits.
Bytes never travel through the APIFootage arrives by URL fetch or a presigned PUT.
Request body: 4.5MB JSON ceilingA platform limit, not a design choice — send footage by URL or presigned PUT instead.
One open edit job per projectA second request while one is open is refused until it settles.
Reads are free, alwaysPace polling by poll_after_s in every job response.

AT ARM

Per-key rate limitsNumbers publish when the endpoint arms. rate_limited is already a reserved error code in the shipped contract — build the handler now.
Plan-level REST gating enforcedStudio carries REST access. While dormant, nothing is charged and no plan gate runs.

DECISION PROVENANCE

The reason this API exists.

Every finished edit returns its decisions: source clip, in and out timecodes, transcript, the rationale for every kept segment, and what was deliberately dropped and why. Available today over MCP.

Inside the product, edits already stream this feed live. API access to the stream is bound to the job-poll surface when RCM 1 arms — documented now so integrations can plan for it.

THE GLASS VOCABULARY — THE SAME EVENTS THE MODEL TRAINS ON

stage_reachedDual-writes into the job’s stage — never a feed row by itself.
footage_openedThe fulfiller opened a source asset.
segment_viewedA playback or scrub pass over a segment.
segment_flaggedA verdict — approved, rejected, or uncertain — on a segment.
sequence_attempt_startedA new ordering attempt began.
cut_placedA clip placed on the timeline.
cut_adjustedA placed clip’s edge trimmed.
sequence_evaluatedA verdict on a completed attempt.
sequence_abandonedAn attempt set aside.
variation_completedOne output variation finished.
stream_truncatedServer-only: the per-job row cap was hit.
ONE REAL EVENT — segment_flagged, verbatim shape
{
  "seq": 1,
  "at": "2026-07-09T00:00:04.000Z",
  "type": "segment_flagged",
  "label": "Segment 1 flagged",
  "reason": "Clean framing, matches the brief",
  "verdict": "approved",
  "conf": "clear",
  "refs": {
    "assetId": "asset_1",
    "srcInS": 1,
    "srcOutS": 4
  }
}

PRICING PREVIEW

EARLY-ACCESS PRICING PREVIEW — SUBJECT TO CHANGE AT GA

1 CREDIT = 1 EDIT-MINUTE. THE API BILLS THE SAME UNIT THE PRODUCT BILLS.

PACKS — EARLY-ACCESS PREVIEW

USDCREDITS$/EDIT-MIN
$100500 credits$0.200
$5002800 credits$0.179
$200013000 credits$0.154

CALLS RETURN 503 MODEL_NOT_DEPLOYED UNTIL RCM 1 CLEARS OUR QUALITY BAR. KEYS MINT TODAY; THE CONTRACT IS LIVE.

Plans include the same credits — see pricing. API packs are on sale: the credits work today over MCP and the app. Direct REST inference (POST /api/model/v1/edit) stays 503 until RCM 1 arms.

FULL PRICE LIST →

Enterprise

CUSTOM POOLS · INVOICING · SECURITY REVIEW

Custom credit pools and terms for teams past Studio scale — invoicing, procurement, security review, single sign-on conversations. Nothing is promised here that is not built; write to us and we answer with the current truth.

zan@realcut.ai

VERSIONING

The REST surface is path-versioned (/v1); within v1, changes are additive only — fields are never removed or retyped. A breaking change ships as /v2, with at least 12 months of v1 support from the announcement.

Full versioning + deprecation promise →

No webhooks today. Every accepted mutation returns a job_id and each status response carries poll_after_s — that is the pacing contract. If webhooks ship they will be additive and announced on this page.

Is the API live?

The contract is. POST /api/model/v1/edit answers 503 MODEL_NOT_DEPLOYED until RCM 1 clears our quality bar. Keys mint on any account; read tools answer on every key. Ordering or refining edits over MCP needs a plan with full MCP access (Connect, Pro, or Studio) — MCP editing works today through the same bench-fulfilled queue the app uses.

What does it cost?

The same credits as the product — 1 credit = 1 edit-minute, one meter. API pack pricing on this page is an early-access preview and subject to change at GA. Packs are on sale now — credits work today over MCP and the app; only direct REST inference stays dormant until RCM 1 arms.

Will my integration break when the model goes live?

No. The request and response schemas published here are the final v1 contract, and the dormant 503 is a documented response, not a placeholder. Changes within v1 are additive only.

What can an agent do today?

Everything except direct model inference: create projects, submit footage by URL or presigned upload, request and refine edits, read every decision and its rationale, and export finished files. rcm1_edit answers with live deployment status until the model arms.

More on pricing →