JsonCutDocs
Projects & Schema

Validate and submit a complete source

Assemble a portable project, validate it before saving and render it through the focused V2 API.

The API validates every project version before persistence. Invalid markup, unsafe code, incompatible media, broken bindings or impossible timing never replace the latest valid source.

Rendered output

Agent review loop

A complete multi-scene project that can be saved, patched, reviewed in Studio and rendered headlessly.

Video1920 × 108015 secondsEditable V2 source

Complete compact source

{
  "format": "jsoncut-html",
  "version": 1,
  "id": "launch-loop",
  "name": "Launch loop",
  "compositionKind": "video",
  "canvasBackground": "#090a0dff",
  "width": 1920,
  "height": 1080,
  "fps": 30,
  "duration": 6,
  "html": "<section id=\"intro\" data-jc-clip data-jc-kind=\"scene\" data-jc-start=\"0\" data-jc-duration=\"6\" data-jc-track=\"0\"><h1 id=\"headline\" data-jc-clip data-jc-kind=\"text\" data-jc-start=\"0.25\" data-jc-duration=\"5.5\" data-jc-track=\"2\" data-jc-bind-text=\"headline\">See the result</h1></section>",
  "css": "#intro{position:absolute;inset:0;background:radial-gradient(circle at 70% 30%,#3a1f0d,#090a0d 52%)}#headline{position:absolute;left:120px;top:360px;width:1200px;height:300px;display:flex;align-items:center;margin:0;color:white;font:850 132px/.9 Inter,sans-serif}",
  "variables": [
    { "id": "headline", "label": "Headline", "type": "string", "default": "See the result" }
  ],
  "values": { "headline": "Build once. Ship everywhere." },
  "customBlocks": []
}

Create the project

curl -X POST "$JSONCUT_API/api/v2/projects" \
  -H "X-API-Key: $JSONCUT_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @project.json

Validate before a write

Check these invariants in a client or Agent before submission:

  1. stable, unique IDs on every editable layer;
  2. explicit non-negative start, positive duration and integer track;
  3. image projects contain no timed video, audio, captions or keyframes;
  4. child intervals stay inside the owning scene or group;
  5. every media reference belongs to the workspace and matches its layer kind;
  6. every binding targets a declared compatible variable;
  7. every custom layer has one matching customBlocks entry;
  8. transition endpoints and keyframe values are valid.

Validation errors are returned as actionable client errors rather than generic server failures. For request and response schemas, open the V2 API reference.

Standard render-safe limits

ResourceLimit
Active canvas3840 × 2160
Frame rate60 FPS
Duration1200 seconds
Editable clips800
Variables250
Combined HTML, CSS and custom-block source5 MiB

These are source safety limits, not plan quotas. Plan-specific concurrency, bulk-row and storage entitlements are returned by the live product and API contract.

Common invalid sources

FindingCorrective action
Duplicate or missing clip IDGive every editable layer one stable unique ID
Unknown bindingDeclare the variable or correct the binding name and type
Image contains animation or audioRemove video-only timing and keep every image layer at 0..1
Transition source is not adjacentUse the preceding overlapping clip or remove the explicit source
Unsafe HTML or CSSRemove executable tags, handlers, imports and JavaScript URLs
Custom block has no custom layerAdd one matching data-jc-kind="custom" layer, or remove the block

Review before spending render credits

Studio and MCP provide preflight and visual review for a committed project before a final export. Public API submissions validate the source, version, inputs and output combination before queueing; invalid submissions return 422 Validation Failed. Review one representative output before starting a large template batch.