---
title: "Plan a creator-style reel (title + subtitles, labels, do/don't board, numbered points, product review)"
method: POST
path: "/v1/studio/reel-style"
tags: ["Edit"]
---

# Plan a creator-style reel (title + subtitles, labels, do/don't board, numbered points, product review)

`POST /v1/studio/reel-style`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/studio/reel-style`
- Auth: HTTP bearer

Turns the word timings of a talking-head video into ONE ready body for POST /v1/studio/edit in one of four formats measured on a CapCut creator's Reels: `headline` (a designed opening title, one quiet line of subtitles, big italic-serif beats with a punch-in), `labels` (every short phrase on a solid coloured label), `board` (pill rows that fill with the items the speaker lists — one column or ❌ / ✅) `chapters` (a number on a starburst and the point's name at the top for every point, captions on yellow labels) — and `review`, a Hebrew product-review Reel (a price counting up in green, a whip into a red twist, tall condensed subtitles mid-frame, a product card with the qualities ticked as they are said, the product in a frame over the blurred speaker, your clips as b-roll, a coupon card; its own picks: `hook`, `card`, `spotlight`, `clips` + `broll`, `coupon`). All of them anchor every element to a word of the video's transcript (`at` / `during`) — the render cuts the pauses from the audio and lands each one on its word's frame — put a soft music bed ≈ 13 dB under the voice and, when the speaker ends with a call to action, his outro (the words one at a time after a warm flash, and a white message card). It answers at once with the numbered words (with ids), the plan's timeline, warnings and the picker call for a cheap model. Recipes: /skills/full-headline.md · full-labels.md · full-board.md · full-chapters.md · full-review.md

**Billing:** Read request — the plan is free; the render is POST /v1/studio/edit · **Rate limit:** 60/min

## Headers

- `Idempotency-Key` string
- `X-Tag` string

## Request body

- object
  - `cta` object, nullable: The first word of the closing call to action → his outro (one word at a time + a message card)
    - `word` integer, required
  - `cut` union: The silence cut; false keeps every pause
    - false
    - object
      - `from` 'audio' | 'words': audio = the render finds the pauses in the sound and cuts them; every element rides along on its words. words = the plan cuts from the word timings (only with real gaps) and sends `keep` spans
      - `padding_ms` number
      - `min_pause_ms` number
  - `card` object, nullable: review: the product card — a grey card, the product photo on top, the qualities ticked one by one as he says them
    - `items` object[], required: The product's qualities as he names them (2–6 words each)
      - `to` integer, required: last word (index)
      - `from` integer, required: first word (index)
  - `face` object: Where the face is in the 9:16 frame: x = its centre (0…1), top / bottom = % of the height. The text stays off it
    - `x` number
    - `top` number
    - `bottom` number
  - `hand` boolean: labels: hand-written labels (Amatic SC — Hebrew, Latin and Cyrillic), each a little tilted, and tilted stickers — a scrapbook
  - `hook` object: review: the opening — every part appears on its own words
    - `line` object, required: The hook phrase (2–5 words): huge white italic, typed in
      - `to` integer, required: last word (index)
      - `from` integer, required: first word (index)
    - `punch` object, nullable: The twist right after it (1–3 words: a question, a verdict): huge red italic after a whip
      - `to` integer, required: last word (index)
      - `from` integer, required: first word (index)
    - `number` object, nullable: A price or number said in the opening: a big green number that counts up
      - `to` integer, required: last word (index)
      - `from` integer, required: first word (index)
      - `text` string: How the number is shown ("₪5,500") — the digits he says
  - `seed` integer
  - `broll` object[]: review: where each clip covers the speaker (a span of words)
    - `to` integer, required
    - `clip` integer, required: Index into `clips`
    - `from` integer, required
  - `clips` object[]: review: your own b-roll of the product (clips or photos) — the picker places them
    - `url` string, uri, required
    - `type` 'video' | 'image': Detected from the file name when omitted
    - `about` string, required: What it shows, for the picker
  - `icons` object
    - `burst` string, uri: The starburst behind a chapter number
    - `check` string, uri: ✅ for the board's header
    - `cross` string, uri: ❌ for a 'don't' column
  - `lists` object[]: board: what the speaker enumerates — each item a span of words, filled in when it is said
    - `items` object[], required
      - `to` integer, required
      - `from` integer, required
      - `column` union
        - 0
        - 1
    - `header` string: The list's name (column 0)
    - `header2` string: Column 1's name — two columns only
  - `music` object
    - `url` string, uri, required
    - `volume` number: Omit: ≈ 13 dB under the measured voice
  - `speed` number
  - `style` 'headline' | 'labels' | 'board' | 'chapters' | 'review', required: headline · labels · board · chapters — see /skills/full-<style>.md
  - `title` object: The opening title, written from what is said
    - `sub` string
    - `tag` string
    - `text` string, required
    - `until_word` integer: The title stays until this word is said (default: the end of the first sentence, 2.2–5.5 s)
  - `words` object[]: Or the video's timed words yourself (ms, the video's clock)
    - `id` string: Stable id (w0001…); given in order when missing
    - `end` number, required: ms
    - `text` string, required
    - `start` number, required: ms
    - `spoken` string
    - `speaker` string, nullable
  - `coupon` object, nullable: review: a discount code or a keyword to write — a dark card with the code in green
    - `code` string, required
    - `word` integer, required: The word where the code is said
    - `label` string: The line over it ("קוד הנחה:")
  - `sounds` object: Two effects, each reused (review: five, the free CC0 kit when omitted)
    - `pop` string, uri
    - `cash` string, uri: review: the price counts up
    - `ding` string, uri: review: a tick on the card
    - `glitch` string, uri: review: the card arrives
    - `whoosh` string, uri
  - `source` object: The video's length and frame rate. The endpoint fills it (a probe of the video)
    - `fps` number, required
    - `duration` number, required: seconds
  - `palette` 'orange' | 'blue' | 'purple' | 'yellow' | 'paper': labels: the label colour
  - `product` object: review: the product
    - `name` string
    - `aspect` '4:3' | '1:1' | '3:4' | '16:9' | '9:16' | '4:5': The photo's shape (it is cropped to it; default 4:3)
    - `image_url` string, uri: A photo of the product (JPG / PNG) — the card and the spotlight
  - `chapters` object[]: chapters: where each point starts and its name
    - `word` integer, required
    - `title` string, required
  - `emphasis` object[]: headline / labels: the beats in big type (1–3 words each)
    - `to` integer, required: last word (index)
    - `from` integer, required: first word (index)
  - `stickers` object[]
    - `url` string, uri: A transparent PNG — POST /v1/stock/icon
    - `icon` string: The picker's icon name (kept for your records; `url` is what is drawn)
    - `size` number
    - `word` integer, required
  - `takeaway` object, nullable: board: the line the video builds to — one big peach word and the rest under it
    - `to` integer, required: last word (index)
    - `from` integer, required: first word (index)
  - `spotlight` object, nullable: review: the product in a frame over the blurred speaker while he names it (needs `product.image_url`)
    - `to` integer, required: last word (index)
    - `from` integer, required: first word (index)
    - `label` string: The blue label over the photo (default: the span's words)
  - `video_url` string, uri, required: The source video (a public link or an upload's url)
  - `resolution` '720' | '1080'
  - `voice_lufs` number
  - `corrections` object[]: Fix a misheard word by its index ("" removes a word that was not said)
    - `text` string, required
    - `word` integer, required
  - `cut_audio_url` string, uri: A WAV of the voice (POST /v1/studio/convert with `output.format: "wav"`, or a sound-only pass of POST /v1/studio/remove-silence): the voice is measured there so the music sits ≈ 13 dB under it
  - `transcript_id` string: The transcript of the video itself (POST /v1/speech/transcripts on its url): every element is anchored to its words, and the render cuts the pauses around them

## Response `200`

Completed

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
