---
title: "Create Clip Finish"
method: POST
path: "/runs/{run_id}/clips/{clip_id}/finish"
---

# Create Clip Finish

`POST /runs/{run_id}/clips/{clip_id}/finish`

## Request

- Base URL: `https://www.clipzyn.com/v1`
- URL: `https://www.clipzyn.com/v1/runs/{run_id}/clips/{clip_id}/finish`
- Auth: HTTP bearer

Queue the vertical edit for ONE clip in the named styles (v2 §4.5).
Costs finishing quota only when work is queued. Idempotent per
(clip, style): styles the clip already has finished are skipped; all-skipped
returns {queued:false, already:true} at $0. Call only after the run completes.
Recover from run_not_ready by waiting for terminal progress, clip_not_found by listing
clips, and feature_not_entitled by dropping the style or upgrading. For rate_limited or
service_unavailable, wait retry_after_sec and retry once.

## Path parameters

- `run_id` string, required
- `clip_id` string, required

## Request body

- FinishRequest
  - `styles` string[], required
  - `banner_mode` string, nullable
  - `banner_text` string, nullable
  - `hook` HookRef: A P2-1 hook address: pick a generated hook by (lane, rank). The banner TEXT is resolved SERVER-side from the clip's persisted hook set (never client text -- the model-output trust boundary).
    - `lane` string, required
    - `rank` integer, required

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

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