---
title: "Update Clip Settings"
method: PUT
path: "/api/v1/projects/{project_id}/clips/{clip_id}/settings"
tags: ["Export"]
---

# Update Clip Settings

`PUT /api/v1/projects/{project_id}/clips/{clip_id}/settings`

## Request

- Base URL: `https://api.clipmaster.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.clipmaster.app/api/v1/projects/{project_id}/clips/{clip_id}/settings`
- Auth: HTTP bearer

Save clip settings (style, emojis, zoom, logo, progress bar).

The frontend calls this as the user edits. On export, the backend
loads these settings automatically — no need to send them again.

## Path parameters

- `project_id` integer, required
- `clip_id` integer, required

## Request body

- ClipSettings: Full clip editor state — saved per clip, loaded on export. All fields optional; defaults applied at render time.
  - `captions` CaptionsConfig
    - `enabled` boolean, nullable
    - `style` string, nullable
    - `words` CaptionWord[], nullable
      - `text` string, required
      - `start` number, required
      - `end` number, required
      - `highlight` boolean, nullable
    - `position` 'top' | 'center' | 'bottom', nullable
    - `positionY` number, nullable
    - `uppercase` boolean, nullable
    - `karaoke` boolean, nullable
    - `overrides` CaptionOverrides
      - `fontFamily` string, nullable
      - `fontSize` integer, nullable
      - `color` string, nullable
      - `highlightColor` string, nullable
      - `strokeColor` string, nullable
      - `strokeWidth` integer, nullable
      - `backgroundColor` string, nullable
  - `emojis` object[], nullable
  - `zoom` object[], nullable
  - `logo` LogoConfig
    - `enabled` boolean, nullable
    - `imageUrl` string, nullable
    - `position` 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right', nullable
    - `opacity` number, nullable
    - `scale` number, nullable
  - `progressBar` ProgressBarConfig
    - `enabled` boolean, nullable
    - `color` string, nullable
    - `position` 'top' | 'bottom', nullable
    - `height` integer, nullable
  - `output` AppApiExportSchemasOutputConfig
    - `width` integer, nullable
    - `height` integer, nullable
    - `fps` integer, nullable
  - `smartCrop` SmartCropConfig
    - `enabled` boolean, nullable
    - `camera_log` SmartCropKeyframe[], nullable
      - `timestamp_ms` integer, required
      - `camera_center_x` integer, required
      - `movement_speed` 'static' | 'slow' | 'medium' | 'fast' | 'instant', required
    - `stackEnabled` boolean, nullable
    - `stackedSegments` StackedSegment[], nullable
      - `start_ms` integer, required
      - `end_ms` integer, required
      - `speakers` SpeakerPane[], required
        - `slot` integer, required
        - `center_x` integer, required
        - `center_y` integer, required
  - `gifs` object[], nullable
  - `sfx` object[], nullable
  - `orientation` 'original' | 'vertical' | 'horizontal' | 'square', nullable

## Response `200`

Successful Response

- ClipSettingsResponse
  - `clip_id` integer, required
  - `settings` ClipSettings: Full clip editor state — saved per clip, loaded on export. All fields optional; defaults applied at render time.
    - `captions` CaptionsConfig
      - `enabled` boolean, nullable
      - `style` string, nullable
      - `words` CaptionWord[], nullable
        - `text` string, required
        - `start` number, required
        - `end` number, required
        - `highlight` boolean, nullable
      - `position` 'top' | 'center' | 'bottom', nullable
      - `positionY` number, nullable
      - `uppercase` boolean, nullable
      - `karaoke` boolean, nullable
      - `overrides` CaptionOverrides
        - `fontFamily` string, nullable
        - `fontSize` integer, nullable
        - `color` string, nullable
        - `highlightColor` string, nullable
        - `strokeColor` string, nullable
        - `strokeWidth` integer, nullable
        - `backgroundColor` string, nullable
    - `emojis` object[], nullable
    - `zoom` object[], nullable
    - `logo` LogoConfig
      - `enabled` boolean, nullable
      - `imageUrl` string, nullable
      - `position` 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right', nullable
      - `opacity` number, nullable
      - `scale` number, nullable
    - `progressBar` ProgressBarConfig
      - `enabled` boolean, nullable
      - `color` string, nullable
      - `position` 'top' | 'bottom', nullable
      - `height` integer, nullable
    - `output` AppApiExportSchemasOutputConfig
      - `width` integer, nullable
      - `height` integer, nullable
      - `fps` integer, nullable
    - `smartCrop` SmartCropConfig
      - `enabled` boolean, nullable
      - `camera_log` SmartCropKeyframe[], nullable
        - `timestamp_ms` integer, required
        - `camera_center_x` integer, required
        - `movement_speed` 'static' | 'slow' | 'medium' | 'fast' | 'instant', required
      - `stackEnabled` boolean, nullable
      - `stackedSegments` StackedSegment[], nullable
        - `start_ms` integer, required
        - `end_ms` integer, required
        - `speakers` SpeakerPane[], required
          - `slot` integer, required
          - `center_x` integer, required
          - `center_y` integer, required
    - `gifs` object[], nullable
    - `sfx` object[], nullable
    - `orientation` 'original' | 'vertical' | 'horizontal' | 'square', nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/clipmaster/apis/semantic-video-clip-ai-agent.md) · [All operations](https://skmtc.dev/clipmaster/apis/semantic-video-clip-ai-agent/llms.txt) · [OpenAPI document](https://skmtc.dev/clipmaster/apis/semantic-video-clip-ai-agent/revisions/c9b8333cd22b?raw)
