---
title: "Apply direct edits to scenes by id"
method: POST
path: "/videos/{id}/edits"
---

# Apply direct edits to scenes by id

`POST /videos/{id}/edits`

## Request

- Base URL: `https://clypmint.com/api/v1`
- URL: `https://clypmint.com/api/v1/videos/{id}/edits`
- Auth: HTTP bearer

Apply exact edits without a Clypmint model round. Read get_project_context first. Canvas ops: output_frame {frame: {ratio: 9:16, 16:9, 1:1 or 4:5, fit}} reshapes this video ("make it vertical"); fit subject (the default) follows the subject, contain keeps the whole picture with bars (only when they ask to fit or keep everything in), cover fills; optional x/y (0-1, with fit cover only) move the centre of the filled frame; add: true makes the shape an extra output and keeps this one ("a square version too"); frame: null alone (no second op) is the original shape again ("undo the crop"); layout moves/scales/rotates a returned element ID using its units; element changes supported text/color/hidden; put_overlay adds or updates timed text/images with none/fade/slide/pop animation; remove_overlay removes an added element. Use only returned editable capabilities and existing canvas image assetIds. These are the manual editor operations and preserve authored animation. Music: {op:"music",enabled:false} removes only added music; enabled:true with track (one of Clypmint's own tracks, never claimed when posted: bright-house (upbeat), lofi-desk (calm), tech-forward (tech), documentary-pulse (story), gym-phonk (energetic), acoustic-morning (warm), soft-piano (emotional), funk-pop (fun), night-suspense (mystery), rise-up (inspiring)) or with music_staging_key from import_asset (a song of their own). Optional level_db (-36 to 0 relative to source audio) and beat_sync:true for source-shot action montages; other editing clocks refuse beat sync explicitly. Scene ops: remove, remove_layer, replace_screen, set_text, swap_picture (an existing picture key), move, add, cut_words, emphasis, captions, sound, scene_sounds. remove and cut_words take footage time out of the video; to delete a graphic and keep the footage and captions under it use remove_layer {layer: graphic}, to delete a zoom or camera move remove_layer {layer: camera}, and to shorten or lengthen a graphic move its scene to fewer or more words. scene_sounds replaces the scene cue list (empty removes added cues): choose names from scenes.soundOptions, optional on from soundWords.index and gain -36 to -10 dB. It preserves speech; global sound mute still applies. Batch up to 40 ops: all apply or all refuse. Native canvas changes save a playable project; export separately for a video file. Older timeline operations may require rendering; unsupported native operations refuse without rebuilding the project. Set base_version and output_id from context. Hook openings use revise_video. Free, up to 30 a day. Preserve operation_id and exact arguments on retries. Cost: Free: no credits and no change round. Same as the MCP tool apply_edits.

## Path parameters

- `id` string, required

## Request body

- object
  - `base_version` string: The version the edits are for; the current one when left out.
  - `output_id` string: One output (a hook, a Short, a format) from check_video; the main film when left out.
  - `operation_id` string: A stable ID for this request. Preserve it on retries. Use a new ID only for a deliberate new request.
  - `ops` union[], required
    - union
      - object
        - `op` 'remove', required
        - `scene_id` string, required: A scene id (sceneId) from get_project_context.
      - object
        - `op` 'remove_layer', required
        - `scene_id` string, required: A scene id (sceneId) from get_project_context.
        - `layer` 'graphic' | 'camera', required
      - object
        - `op` 'replace_screen', required
        - `scene_id` string, required: A scene id (sceneId) from get_project_context.
        - `screen` object, required: A screen in the shape get_project_context shows for that scene.
      - object
        - `op` 'set_text', required
        - `scene_id` string, required: A scene id (sceneId) from get_project_context.
        - `path` string, required: Which text, e.g. 'screen.title'.
        - `text` string, required
      - object
        - `op` 'swap_picture', required
        - `scene_id` string, required: A scene id (sceneId) from get_project_context.
        - `asset_id` string, required: A picture key this version already uses (a scene's picture from get_project_context), not a library asset id.
      - object
        - `op` 'move', required
        - `scene_id` string, required: A scene id (sceneId) from get_project_context.
        - `words` integer[], required: [first, last] word numbers from the transcript in get_project_context.
      - object
        - `op` 'add', required
        - `after` string, nullable, required: A scene id (sceneId) from get_project_context.
        - `scene` object, required: The new scene, shaped like the others.
      - object
        - `op` 'cut_words', required
        - `words` integer[], required: [first, last] word numbers from the transcript in get_project_context.
      - object
        - `op` 'emphasis', required
        - `add` integer[]
        - `remove` integer[]
      - object
        - `op` 'captions', required
        - `captions` object, required
          - `size` string
          - `position` string
          - `style` string
      - object
        - `op` 'music', required
        - `enabled` boolean, required
        - `music_staging_key` string
        - `track` 'bright-house' | 'lofi-desk' | 'tech-forward' | 'documentary-pulse' | 'gym-phonk' | 'acoustic-morning' | 'soft-piano' | 'funk-pop' | 'night-suspense' | 'rise-up'
        - `beat_sync` boolean
        - `level_db` number
      - object
        - `op` 'sound', required
        - `sound_effects` boolean, required
        - `intensity` 'subtle' | 'punchy'
      - object
        - `op` 'scene_sounds', required
        - `scene_id` string, required: A scene id (sceneId) from get_project_context.
        - `cues` object[], required
          - `name` string, required
          - `on` integer
          - `gain` number
          - `offset` number
      - object
        - `op` 'output_frame', required
        - `frame` object, nullable, required
          - `ratio` '9:16' | '16:9' | '1:1' | '4:5', required
          - `fit` 'subject' | 'cover' | 'contain'
          - `x` number
          - `y` number
        - `add` boolean
      - object
        - `op` 'put_overlay', required
        - `overlay` union, required
          - object
            - `id` string, required
            - `start` number, required
            - `end` number, required
            - `x` number, required
            - `y` number, required
            - `width` number, required
            - `height` number, required
            - `rotation` number
            - `animation` 'none' | 'fade' | 'slide' | 'pop'
            - `hidden` boolean
            - `kind` 'text', required
            - `text` string, required
            - `font` 'Inter-Medium' | 'Poppins-SemiBold' | 'Roboto', required
            - `fontSize` number, required
            - `color` string, required
            - `align` 'left' | 'center' | 'right'
          - object
            - `id` string, required
            - `start` number, required
            - `end` number, required
            - `x` number, required
            - `y` number, required
            - `width` number, required
            - `height` number, required
            - `rotation` number
            - `animation` 'none' | 'fade' | 'slide' | 'pop'
            - `hidden` boolean
            - `kind` 'image', required
            - `assetId` string, required
          - object
            - `id` string, required
            - `start` number, required
            - `end` number, required
            - `x` number, required
            - `y` number, required
            - `width` number, required
            - `height` number, required
            - `rotation` number
            - `animation` 'none' | 'fade' | 'slide' | 'pop'
            - `hidden` boolean
            - `kind` 'video', required
            - `assetId` string, required
            - `sourceIn` number
      - object
        - `op` 'remove_overlay', required
        - `id` string, required
      - object
        - `op` 'layout', required
        - `element` string, required
        - `layout` object, nullable, required
          - `x` number, required
          - `y` number, required
          - `scale` number, required
          - `rotation` number, required
      - object
        - `op` 'element', required
        - `element` string, required
        - `edit` object, nullable, required
          - `text` string
          - `color` string
          - `hidden` boolean

## Response `200`

Apply direct edits to scenes by id

- Result: The tool result, as the MCP tool of the same name returns it.

## Other responses

- `400`: The request is invalid. The message names each field to fix.
- `401`: A valid bearer token (API key or OAuth access token) is required.
- `402`: This account has no allowance left for this, or does not include it. error.checkout_url is where to add it.
- `403`: This needs publishing permission (scope clypmint.publish), or is not open on this account yet.
- `404`: The video, upload, memory or calendar was not found in this account.
- `409`: Busy: an upload or edit is already running, the video changed, or too many upload links are waiting.
- `413`: The request body is too large.
- `422`: Clypmint could not apply it as asked; error.problems names each part.
- `429`: A daily limit was reached (direct edits, caption fixes, upload links).
- `501`: This is not available on Clypmint yet; the message says what to use instead.
- `503`: Clypmint is busy. Try again in a moment.

---

[API](https://skmtc.dev/clypmint/apis/clypmint-api.md) · [All operations](https://skmtc.dev/clypmint/apis/clypmint-api/llms.txt) · [OpenAPI document](https://skmtc.dev/clypmint/apis/clypmint-api/revisions/dde4982718df?raw)
