---
title: "Update a shape overlay"
method: PATCH
path: "/v1/videos/{id}/clips/{clipId}/shape-overlays/{shapeOverlayId}"
tags: ["Clips"]
---

# Update a shape overlay

`PATCH /v1/videos/{id}/clips/{clipId}/shape-overlays/{shapeOverlayId}`

## Request

- Base URL: `https://api.tella.com`
- URL: `https://api.tella.com/v1/videos/{id}/clips/{clipId}/shape-overlays/{shapeOverlayId}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/withchima/apis/tella-public-api/docs/v1/videos/:id/clips/:clipId/shape-overlays/:shapeOverlayId/patch.ts> (a function with typed inputs; its response is checked against the schema)

Update a shape overlay's outline, fill, corners, border, shadow, timing, position, size, animation, depth or stacking order. Only the fields you send are changed.

## Path parameters

- `id` string, required: Video ID
- `clipId` string, required: Clip ID
- `shapeOverlayId` string, required: Shape overlay ID

## Request body

- UpdateClipShapeOverlayRequest: Update an existing shape overlay. Only provided fields change.
  - `animation` OverlayAnimationInput: How the overlay enters and leaves; when set it replaces `transition`. Each side describes the hidden state the overlay moves from on the way in and back to on the way out. An omitted side stays as it is. `{intro: {preset: 'slide_up'}, outro: {preset: 'fade'}}` is a complete animation; on text, `{textIntro: {preset: 'slide_up', text: {unit: 'words'}}}` brings the words in one by one.
    - `intro` OverlayAnimationSideInput: One side of an overlay animation. A side starts from its `preset` (or from the side as it is) and the fields you give adjust it.
      - `blur` number: Blur of the hidden state in pixels.
      - `clip` boolean: Clip the motion to the overlay's box, so it wipes in like a mask.
      - `durationMs` number: How long the side plays, in ms (50 to 5000). On a text side, how long each unit plays. Defaults to 500.
      - `easing` OverlayAnimationEasingInput: How the side accelerates. Without it a new side slows down into place on the way in and speeds up on the way out.
        - `bezier` union[]: For `custom`: the handles. Defaults to the side's current curve.
          - union
            - number
            - number
            - number
            - number
        - `curve` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'bounce' | 'overshoot' | 'impulse' | 'swing' | 'custom' | 'spring', required: How a side accelerates. `linear` keeps one speed. `smooth`, `natural`, `slow_down`, `accelerate`, `elastic`, `bounce`, `overshoot`, `impulse` and `swing` are shaped by `intensity`. `custom` follows `bezier`, `spring` follows `spring`.
        - `intensity` number: How strongly the curve shapes the motion, 0 to 1. Only curves with an intensity use it. Defaults to 0.5.
        - `spring` OverlayAnimationSpring: Spring physics. The spring sets the side's `durationMs`: it lasts until the spring comes to rest.
          - `damping` number, required
          - `mass` number, required
          - `stiffness` number, required
      - `moveX` number: Horizontal offset of the hidden state, as a fraction of the overlay's width (of a line's height on a text side); positive is right.
      - `moveY` number: Vertical offset of the hidden state, as a fraction of the overlay's height (of a line's height on a text side); positive is down.
      - `opacity` number: Opacity of the hidden state, 0 to 1.
      - `preset` 'fade' | 'slide_up' | 'slide_down' | 'slide_left' | 'slide_right' | 'mask_up' | 'mask_down' | 'grow' | 'shrink' | 'blur' | 'blur_slide_up': A ready-made side, the same as the editor's Animate presets. A `slide_*` or `mask_*` arrow is the direction the overlay travels, so a `slide_up` intro rises into place and a `slide_up` outro rises away.
      - `rotate` number: Clockwise rotation of the hidden state in degrees.
      - `scale` number: Scale of the hidden state; 1 is its resting size.
      - `text` OverlayAnimationTextInput: On `textIntro`/`textOutro` only: which units play the side, each in turn. Required on a new text side.
        - `delayMs` number: How long after one unit the next starts, in ms (0 to 2000). Defaults to 100.
        - `order` 'forward' | 'backward' | 'center' | 'edges' | 'random': Which unit goes first. `random` uses the same shuffle every time. Defaults to `forward`.
        - `smoothing` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'overshoot' | 'impulse' | 'swing': Eases the delays across the units. Defaults to `linear`.
        - `unit` 'letters' | 'words' | 'lines', required: What animates on its own.
    - `motionBlur` boolean: Blur the overlay along its motion while it moves, scales or turns. Defaults to true.
    - `outro` OverlayAnimationSideInput: One side of an overlay animation. A side starts from its `preset` (or from the side as it is) and the fields you give adjust it.
      - `blur` number: Blur of the hidden state in pixels.
      - `clip` boolean: Clip the motion to the overlay's box, so it wipes in like a mask.
      - `durationMs` number: How long the side plays, in ms (50 to 5000). On a text side, how long each unit plays. Defaults to 500.
      - `easing` OverlayAnimationEasingInput: How the side accelerates. Without it a new side slows down into place on the way in and speeds up on the way out.
        - `bezier` union[]: For `custom`: the handles. Defaults to the side's current curve.
          - union
            - number
            - number
            - number
            - number
        - `curve` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'bounce' | 'overshoot' | 'impulse' | 'swing' | 'custom' | 'spring', required: How a side accelerates. `linear` keeps one speed. `smooth`, `natural`, `slow_down`, `accelerate`, `elastic`, `bounce`, `overshoot`, `impulse` and `swing` are shaped by `intensity`. `custom` follows `bezier`, `spring` follows `spring`.
        - `intensity` number: How strongly the curve shapes the motion, 0 to 1. Only curves with an intensity use it. Defaults to 0.5.
        - `spring` OverlayAnimationSpring: Spring physics. The spring sets the side's `durationMs`: it lasts until the spring comes to rest.
          - `damping` number, required
          - `mass` number, required
          - `stiffness` number, required
      - `moveX` number: Horizontal offset of the hidden state, as a fraction of the overlay's width (of a line's height on a text side); positive is right.
      - `moveY` number: Vertical offset of the hidden state, as a fraction of the overlay's height (of a line's height on a text side); positive is down.
      - `opacity` number: Opacity of the hidden state, 0 to 1.
      - `preset` 'fade' | 'slide_up' | 'slide_down' | 'slide_left' | 'slide_right' | 'mask_up' | 'mask_down' | 'grow' | 'shrink' | 'blur' | 'blur_slide_up': A ready-made side, the same as the editor's Animate presets. A `slide_*` or `mask_*` arrow is the direction the overlay travels, so a `slide_up` intro rises into place and a `slide_up` outro rises away.
      - `rotate` number: Clockwise rotation of the hidden state in degrees.
      - `scale` number: Scale of the hidden state; 1 is its resting size.
      - `text` OverlayAnimationTextInput: On `textIntro`/`textOutro` only: which units play the side, each in turn. Required on a new text side.
        - `delayMs` number: How long after one unit the next starts, in ms (0 to 2000). Defaults to 100.
        - `order` 'forward' | 'backward' | 'center' | 'edges' | 'random': Which unit goes first. `random` uses the same shuffle every time. Defaults to `forward`.
        - `smoothing` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'overshoot' | 'impulse' | 'swing': Eases the delays across the units. Defaults to `linear`.
        - `unit` 'letters' | 'words' | 'lines', required: What animates on its own.
    - `textIntro` OverlayAnimationSideInput: One side of an overlay animation. A side starts from its `preset` (or from the side as it is) and the fields you give adjust it.
      - `blur` number: Blur of the hidden state in pixels.
      - `clip` boolean: Clip the motion to the overlay's box, so it wipes in like a mask.
      - `durationMs` number: How long the side plays, in ms (50 to 5000). On a text side, how long each unit plays. Defaults to 500.
      - `easing` OverlayAnimationEasingInput: How the side accelerates. Without it a new side slows down into place on the way in and speeds up on the way out.
        - `bezier` union[]: For `custom`: the handles. Defaults to the side's current curve.
          - union
            - number
            - number
            - number
            - number
        - `curve` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'bounce' | 'overshoot' | 'impulse' | 'swing' | 'custom' | 'spring', required: How a side accelerates. `linear` keeps one speed. `smooth`, `natural`, `slow_down`, `accelerate`, `elastic`, `bounce`, `overshoot`, `impulse` and `swing` are shaped by `intensity`. `custom` follows `bezier`, `spring` follows `spring`.
        - `intensity` number: How strongly the curve shapes the motion, 0 to 1. Only curves with an intensity use it. Defaults to 0.5.
        - `spring` OverlayAnimationSpring: Spring physics. The spring sets the side's `durationMs`: it lasts until the spring comes to rest.
          - `damping` number, required
          - `mass` number, required
          - `stiffness` number, required
      - `moveX` number: Horizontal offset of the hidden state, as a fraction of the overlay's width (of a line's height on a text side); positive is right.
      - `moveY` number: Vertical offset of the hidden state, as a fraction of the overlay's height (of a line's height on a text side); positive is down.
      - `opacity` number: Opacity of the hidden state, 0 to 1.
      - `preset` 'fade' | 'slide_up' | 'slide_down' | 'slide_left' | 'slide_right' | 'mask_up' | 'mask_down' | 'grow' | 'shrink' | 'blur' | 'blur_slide_up': A ready-made side, the same as the editor's Animate presets. A `slide_*` or `mask_*` arrow is the direction the overlay travels, so a `slide_up` intro rises into place and a `slide_up` outro rises away.
      - `rotate` number: Clockwise rotation of the hidden state in degrees.
      - `scale` number: Scale of the hidden state; 1 is its resting size.
      - `text` OverlayAnimationTextInput: On `textIntro`/`textOutro` only: which units play the side, each in turn. Required on a new text side.
        - `delayMs` number: How long after one unit the next starts, in ms (0 to 2000). Defaults to 100.
        - `order` 'forward' | 'backward' | 'center' | 'edges' | 'random': Which unit goes first. `random` uses the same shuffle every time. Defaults to `forward`.
        - `smoothing` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'overshoot' | 'impulse' | 'swing': Eases the delays across the units. Defaults to `linear`.
        - `unit` 'letters' | 'words' | 'lines', required: What animates on its own.
    - `textOutro` OverlayAnimationSideInput: One side of an overlay animation. A side starts from its `preset` (or from the side as it is) and the fields you give adjust it.
      - `blur` number: Blur of the hidden state in pixels.
      - `clip` boolean: Clip the motion to the overlay's box, so it wipes in like a mask.
      - `durationMs` number: How long the side plays, in ms (50 to 5000). On a text side, how long each unit plays. Defaults to 500.
      - `easing` OverlayAnimationEasingInput: How the side accelerates. Without it a new side slows down into place on the way in and speeds up on the way out.
        - `bezier` union[]: For `custom`: the handles. Defaults to the side's current curve.
          - union
            - number
            - number
            - number
            - number
        - `curve` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'bounce' | 'overshoot' | 'impulse' | 'swing' | 'custom' | 'spring', required: How a side accelerates. `linear` keeps one speed. `smooth`, `natural`, `slow_down`, `accelerate`, `elastic`, `bounce`, `overshoot`, `impulse` and `swing` are shaped by `intensity`. `custom` follows `bezier`, `spring` follows `spring`.
        - `intensity` number: How strongly the curve shapes the motion, 0 to 1. Only curves with an intensity use it. Defaults to 0.5.
        - `spring` OverlayAnimationSpring: Spring physics. The spring sets the side's `durationMs`: it lasts until the spring comes to rest.
          - `damping` number, required
          - `mass` number, required
          - `stiffness` number, required
      - `moveX` number: Horizontal offset of the hidden state, as a fraction of the overlay's width (of a line's height on a text side); positive is right.
      - `moveY` number: Vertical offset of the hidden state, as a fraction of the overlay's height (of a line's height on a text side); positive is down.
      - `opacity` number: Opacity of the hidden state, 0 to 1.
      - `preset` 'fade' | 'slide_up' | 'slide_down' | 'slide_left' | 'slide_right' | 'mask_up' | 'mask_down' | 'grow' | 'shrink' | 'blur' | 'blur_slide_up': A ready-made side, the same as the editor's Animate presets. A `slide_*` or `mask_*` arrow is the direction the overlay travels, so a `slide_up` intro rises into place and a `slide_up` outro rises away.
      - `rotate` number: Clockwise rotation of the hidden state in degrees.
      - `scale` number: Scale of the hidden state; 1 is its resting size.
      - `text` OverlayAnimationTextInput: On `textIntro`/`textOutro` only: which units play the side, each in turn. Required on a new text side.
        - `delayMs` number: How long after one unit the next starts, in ms (0 to 2000). Defaults to 100.
        - `order` 'forward' | 'backward' | 'center' | 'edges' | 'random': Which unit goes first. `random` uses the same shuffle every time. Defaults to `forward`.
        - `smoothing` 'linear' | 'smooth' | 'natural' | 'slow_down' | 'accelerate' | 'elastic' | 'overshoot' | 'impulse' | 'swing': Eases the delays across the units. Defaults to `linear`.
        - `unit` 'letters' | 'words' | 'lines', required: What animates on its own.
  - `border` ShapeBorder, nullable
    - `color` string, required: Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase #RRGGBBAA.
    - `width` number, required: Artboard pixels, drawn inside the outline.
  - `corners` 'none' | 'regular' | 'squircle': Shape of the solid background behind the text.
  - `depth` 'front' | 'behind_presenter': Where the overlay sits relative to the presenter: the person in the clip's camera recording, or in its uploaded footage when the clip has no camera. `front` paints over everything. `behind_presenter` paints it behind the person but over everything else: in any layout the person is matted out of their footage and redrawn above the overlay. Fullscreen and framed layouts keep the recorded room around them; a cut-out layout replaces the room with the clip background. New overlays start on `front`. Without a presenter the overlay paints in front either way.
  - `depthChanges` object[]: Changes of `depth` over the overlay's own time, each held until the next: `atMs` after the overlay starts it moves to that depth, so one overlay can pass in front of the presenter and back behind them (a ring orbiting their head, a title they step in front of). `depth` is where it starts. On updates, omit it to leave the changes as they are; `[]` removes them. Absent in responses while the overlay holds one depth.
    - `atMs` number, required: Ms after the overlay starts.
    - `depth` 'front' | 'behind_presenter', required: Where the overlay sits relative to the presenter: the person in the clip's camera recording, or in its uploaded footage when the clip has no camera. `front` paints over everything. `behind_presenter` paints it behind the person but over everything else: in any layout the person is matted out of their footage and redrawn above the overlay. Fullscreen and framed layouts keep the recorded room around them; a cut-out layout replaces the room with the clip background. New overlays start on `front`. Without a presenter the overlay paints in front either way.
  - `dimensions` OverlayDimensions: Overlay size in artboard pixels. Absolute (not a percentage) so the overlay shape never distorts when the artboard dimensions change. Both sides must be greater than 0 — the renderer lays the overlay out into this box, so a zero or negative side has no valid meaning.
    - `height` number, required
    - `width` number, required
  - `durationMs` integer
  - `fill` ClipBackground: Clip background. Use type = 'solid' with `color`, type = 'image' or 'video' with `sourceId` (from `POST /v1/sources`) or an exact catalog URL from `GET /v1/backgrounds`, type = 'gradient' with `gradientColor1`, `gradientColor2`, `gradientAngle`, type = 'shaderGradient' with `shaderGradientPreset`, or type = 'ambient'.
    - `color` string, nullable: Hex color string. Required when type = 'solid'.
    - `gradientAngle` integer, nullable: Linear gradient angle in degrees. Required when type = 'gradient'.
    - `gradientColor1` string, nullable: Hex color string. Required when type = 'gradient'.
    - `gradientColor2` string, nullable: Hex color string. Required when type = 'gradient'.
    - `imageUrl` string, uri, nullable: Hosted image URL. Present in responses and accepted as input only when copied exactly from `GET /v1/backgrounds`; otherwise pass `sourceId`.
    - `shaderGradientPreset` string, nullable: Animated gradient preset from `GET /v1/backgrounds`. Required when type = 'shaderGradient'.
    - `sourceId` string, nullable: Source ID from `POST /v1/sources` (`kind: image` for type = 'image', `kind: video` for type = 'video'). Required for image/video backgrounds unless using an exact URL from `GET /v1/backgrounds`. A video background source must have its file uploaded, be 20 MB or smaller, and not be an audio or auto capture source; it is also saved to your uploaded video backgrounds, like an upload in the editor. Input-only.
    - `type` 'solid' | 'gradient' | 'image' | 'video' | 'shaderGradient' | 'ambient', required: Background variant. `ambient`: the clip's screen, else its camera, heavily blurred; no other fields. `shaderGradient`: an animated gradient set by `shaderGradientPreset`; echoing a non-preset one unchanged keeps it.
    - `videoDurationSeconds` number, nullable: Video background duration in seconds. Read-only: derived from the uploaded source or catalog entry on input.
    - `videoUrl` string, uri, nullable: Hosted video URL. Present in responses and accepted as input only when copied exactly from `GET /v1/backgrounds`; otherwise pass `sourceId`.
  - `path` string: A custom outline as SVG path data (`d`) in a 0–100 box; it stretches with the overlay box. Sending it makes the shape a `path`. Closed subpaths (ending in Z) are filled; an open path shows only its `border`, drawn centred on the line.
  - `point` OverlayPoint: Top-left corner of the overlay, as a percentage of the video canvas (0-100). Relative so the anchor survives video aspect ratio changes.
    - `xPct` number, required
    - `yPct` number, required
  - `shadow` 'none' | 'subtle' | 'deep': Drop shadow, matching the editor's Shadow menu. It falls from the background box when the text has one, else from the letters.
  - `shapeType` 'square' | 'circle' | 'triangle' | 'diamond' | 'star' | 'hexagon' | 'arrow' | 'path': The outline, stretched to fill the overlay box: a non-square box makes a rectangle or an oval. `path` draws the overlay's own `path`.
  - `startTimeMs` integer: Start time. Milliseconds on the clip playback timeline (with cuts applied).
  - `transition` 'smooth' | 'hard_cut': How one thing gives way to the next: `smooth` eases across the change, `hard_cut` swaps instantly.
  - `zIndex` integer: Stacking position among the clip's image, video and text overlays: 0 is the backmost. `depth` applies first — a `behind_presenter` overlay stays behind the presenter whatever its zIndex — so the order only matters among overlays at the same depth. Lottie overlays share the stack but aren't listed, so listed values can skip a number. A value past the top moves the overlay to the front; the other overlays keep their relative order.

## Response `200`

OK

- ClipShapeOverlayResponse: A shape overlay on a clip
  - `shapeOverlay` ClipShapeOverlay, required: A shape overlay on a clip: a square, circle, star… filled with any clip background.
    - `border` ShapeBorderOutput, nullable, required
      - `color` string, required: Hex color in #RRGGBB or #RRGGBBAA form. Responses use uppercase #RRGGBBAA.
      - `width` number, required: Artboard pixels, drawn inside the outline.
    - `corners` 'none' | 'regular' | 'squircle', required: Shape of the solid background behind the text.
    - `depth` 'front' | 'behind_presenter', required: Where the overlay sits relative to the presenter: the person in the clip's camera recording, or in its uploaded footage when the clip has no camera. `front` paints over everything. `behind_presenter` paints it behind the person but over everything else: in any layout the person is matted out of their footage and redrawn above the overlay. Fullscreen and framed layouts keep the recorded room around them; a cut-out layout replaces the room with the clip background. New overlays start on `front`. Without a presenter the overlay paints in front either way.
    - `depthChanges` object[]: Changes of `depth` over the overlay's own time, each held until the next: `atMs` after the overlay starts it moves to that depth, so one overlay can pass in front of the presenter and back behind them (a ring orbiting their head, a title they step in front of). `depth` is where it starts. On updates, omit it to leave the changes as they are; `[]` removes them. Absent in responses while the overlay holds one depth.
      - `atMs` number, required: Ms after the overlay starts.
      - `depth` 'front' | 'behind_presenter', required: Where the overlay sits relative to the presenter: the person in the clip's camera recording, or in its uploaded footage when the clip has no camera. `front` paints over everything. `behind_presenter` paints it behind the person but over everything else: in any layout the person is matted out of their footage and redrawn above the overlay. Fullscreen and framed layouts keep the recorded room around them; a cut-out layout replaces the room with the clip background. New overlays start on `front`. Without a presenter the overlay paints in front either way.
    - `dimensions` OverlayDimensionsOutput, required: Overlay size in artboard pixels. Absolute (not a percentage) so the overlay shape never distorts when the artboard dimensions change. Both sides must be greater than 0 — the renderer lays the overlay out into this box, so a zero or negative side has no valid meaning.
      - `height` number, required
      - `width` number, required
    - `durationMs` number, required
    - `fill` ClipBackgroundOutput, required: Clip background. Use type = 'solid' with `color`, type = 'image' or 'video' with `sourceId` (from `POST /v1/sources`) or an exact catalog URL from `GET /v1/backgrounds`, type = 'gradient' with `gradientColor1`, `gradientColor2`, `gradientAngle`, type = 'shaderGradient' with `shaderGradientPreset`, or type = 'ambient'.
      - `color` string, nullable: Hex color string. Required when type = 'solid'.
      - `gradientAngle` integer, nullable: Linear gradient angle in degrees. Required when type = 'gradient'.
      - `gradientColor1` string, nullable: Hex color string. Required when type = 'gradient'.
      - `gradientColor2` string, nullable: Hex color string. Required when type = 'gradient'.
      - `imageUrl` string, uri, nullable: Hosted image URL. Present in responses and accepted as input only when copied exactly from `GET /v1/backgrounds`; otherwise pass `sourceId`.
      - `shaderGradientPreset` string, nullable: Animated gradient preset from `GET /v1/backgrounds`. Required when type = 'shaderGradient'.
      - `sourceId` string, nullable: Source ID from `POST /v1/sources` (`kind: image` for type = 'image', `kind: video` for type = 'video'). Required for image/video backgrounds unless using an exact URL from `GET /v1/backgrounds`. A video background source must have its file uploaded, be 20 MB or smaller, and not be an audio or auto capture source; it is also saved to your uploaded video backgrounds, like an upload in the editor. Input-only.
      - `type` 'solid' | 'gradient' | 'image' | 'video' | 'shaderGradient' | 'ambient', required: Background variant. `ambient`: the clip's screen, else its camera, heavily blurred; no other fields. `shaderGradient`: an animated gradient set by `shaderGradientPreset`; echoing a non-preset one unchanged keeps it.
      - `videoDurationSeconds` number, nullable: Video background duration in seconds. Read-only: derived from the uploaded source or catalog entry on input.
      - `videoUrl` string, uri, nullable: Hosted video URL. Present in responses and accepted as input only when copied exactly from `GET /v1/backgrounds`; otherwise pass `sourceId`.
    - `id` string, required: Shape overlay ID
    - `name` string, nullable, required
    - `path` string, nullable, required: SVG path data in a 0–100 box, for shapeType `path`; null otherwise.
    - `point` OverlayPointOutput, required: Top-left corner of the overlay, as a percentage of the video canvas (0-100). Relative so the anchor survives video aspect ratio changes.
      - `xPct` number, required
      - `yPct` number, required
    - `shadow` 'none' | 'subtle' | 'deep', required: Drop shadow, matching the editor's Shadow menu. It falls from the background box when the text has one, else from the letters.
    - `shapeType` 'square' | 'circle' | 'triangle' | 'diamond' | 'star' | 'hexagon' | 'arrow' | 'path', required: The outline, stretched to fill the overlay box: a non-square box makes a rectangle or an oval. `path` draws the overlay's own `path`.
    - `startTimeMs` number, required
    - `transition` 'smooth' | 'hard_cut', required: How one thing gives way to the next: `smooth` eases across the change, `hard_cut` swaps instantly.
    - `zIndex` integer, required: Stacking position among the clip's image, video and text overlays: 0 is the backmost. `depth` applies first — a `behind_presenter` overlay stays behind the presenter whatever its zIndex — so the order only matters among overlays at the same depth. Lottie overlays share the stack but aren't listed, so listed values can skip a number.

## Other responses

- `400`: The request was malformed or contained invalid parameters.
- `401`: Authentication is required. Provide a valid API key.
- `403`: You don't have permission to access this resource.
- `404`: The requested resource was not found.
- `409`: The request conflicts with the resource's current state, e.g. an Idempotency-Key whose first request is still in progress. Retry once it settles.
- `429`: You have exceeded the rate limit. Please slow down.
- `500`: An unexpected error occurred
- `501`: The requested operation is not implemented.
- `503`: A dependency was unavailable and the request was not executed. Safe to resend unchanged after the Retry-After delay.

## Changes

> 71 revisions in range; 1 not diffed.

- **2026-10-28** `458e1aabe63c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/withchima/apis/tella-public-api/changes/v1/videos/:id/clips/:clipId/shape-overlays/:shapeOverlayId/patch.md)

---

[API](https://skmtc.dev/withchima/apis/tella-public-api.md) - [All operations](https://skmtc.dev/withchima/apis/tella-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/withchima/apis/tella-public-api/revisions/a500b6d75f79?raw)
