Skip to main content
POST
Applies a batch of cutting operations to a project and returns the updated project. The batch is atomic: either every op applies or none does, so a refused batch leaves the project untouched. A batch holds 1 to 50 ops, applied in order, each against the result of the one before it.

Operations

Ops are objects with a snake_case type. set_sequence takes at most 200 segments. Get source ranges for speech from Get Editor Transcript; get clip ids and timeline positions from Get Editor Project.

Concurrency

Pass expected_updated_at with the updated_at you last read. If the project changed since, the batch is refused with 409 editor_conflict: read the project again, rebuild your ops against the new state, and retry with a new Idempotency-Key. While Vira (the Genviral assistant) is editing the same project, edits are refused with 409 editor_locked. Wait a few seconds and retry.

Idempotency

Idempotency-Key is required and is scoped to the API key (or MCP grant) that sends it.
  • Retrying with the same key and the same body returns the original result and never applies the batch twice.
  • Reusing a key with a different body returns 409 idempotency_key_reused.
  • A refused batch (for example 422 clip_not_found) does not consume its key.

Path Parameters

string (UUID)
required
The project id.

Body Parameters

object[]
required
1 to 50 operations, applied in order and atomically.
string
The updated_at you last read (ISO 8601). The batch is refused with editor_conflict if the project changed since.

Response

Returns 200 with the updated project, in the same shape as Get Editor Project. Any earlier render is no longer current for the new cut.

Error Responses

  • 400 invalid_json - request body is not valid JSON
  • 400 invalid_request - Idempotency-Key header is missing or longer than 255 characters
  • 401 - authentication failed (missing/invalid/revoked token)
  • 404 project_not_found - the project does not exist in the key scope
  • 409 editor_locked - Vira is editing this project right now; retry shortly
  • 409 editor_conflict - the project changed since expected_updated_at; read it again
  • 409 idempotency_key_reused - this Idempotency-Key was already used with a different body
  • 409 request_in_progress - an identical request with this key is still being processed; retry shortly
  • 422 invalid_payload - body failed validation (see issues)
  • 422 invalid_op - an op is not valid for the project; the message says how to correct it
  • 422 clip_not_found - an op names a clip_id that is not in the project
  • 422 asset_not_found - an op names an asset_id that is not in the project
  • 422 out_of_range - a time or range falls outside the clip, asset, or timeline
  • 422 invalid_document - the resulting cut would not be a valid project