---
title: "Plan a kinetic-typography edit (CapCut style) — estimate"
method: POST
path: "/v1/studio/kinetic/estimate"
tags: ["Edit"]
---

# Plan a kinetic-typography edit (CapCut style) — estimate

`POST /v1/studio/kinetic/estimate`

## Request

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

Price the request without executing it. Same body as `POST /v1/studio/kinetic`.

## Request body

- object
  - `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 (`remove_silence` with these numbers); every element rides along on its words. words = the plan cuts from the word timings and sends `keep` spans (only for transcripts with real gaps between words — Hebrew timings run into each other)
      - `padding_ms` number
      - `min_pause_ms` number
  - `face` object: Where the face is in the 9:16 frame: x = its centre (0…1), top/bottom = % of the height. The words stay off it; zooms centre on it
    - `x` number
    - `top` number
    - `bottom` number
  - `hook` boolean: The first phrase as a big title in the top band
  - `keep` object[]: `cut.from: "words"` only: seconds of the source the cut must keep — speech the transcript missed
    - `end` number, required
    - `start` number, required
  - `seed` integer: Another seed = another rotation of fonts, positions and effects
  - `music` object: The music bed (never ducked)
    - `url` string, uri, required
    - `volume` number: Omit: levelled ≈ 10 dB under the voice (measured from `cut_audio_url` / `voice_lufs`; 0.3 when unknown)
  - `speed` number: Play faster (1.1 = +10 %). The references talk ≈ 3.5–4.5 words/s; a slower speaker (< 2.8) reads tighter at 1.1
  - `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
  - `accent` string
  - `scenes` object[]: A black typography card (1.2–2.5 s, the speaker hidden, the voice goes on) on the phrase with this word — the thesis
    - `word` integer, required
  - `sounds` object: The sound kit — each file is reused for every moment of its kind
    - `pop` string, uri
    - `riser` string, uri
    - `glitch` string, uri
    - `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
  - `emphasis` integer[]: Indices of the key words (one per phrase gets the big display type). Omit to pick the longest word of each phrase
  - `stickers` object[]: Emoji stickers next to the words they illustrate
    - `url` string, uri, required: A PNG with transparency — e.g. POST /v1/stock/icon with an emoji icon
    - `size` number: % of the width (default 22)
    - `word` integer, required
  - `video_url` string, uri, required: The source video (a public link or an upload's url)
  - `resolution` '720' | '1080': 720 = the references' 720×1280 and 25 % cheaper
  - `voice_lufs` number: The voice's integrated loudness, if you know it (the endpoint measures `cut_audio_url`)
  - `corrections` object[]: Fix a misheard word: its index in the words list and the right text ("" removes a word that was not said — one word heard as two)
    - `text` string, required
    - `word` integer, required
  - `cut_audio_url` string, uri: A WAV of the voice, to set the music level by (POST /v1/studio/convert with `output.format: "wav"`, or the sound-only pass of POST /v1/studio/remove-silence): the voice's loudness is measured there so the music sits ≈ 10 dB under it. Omit: 0.3
  - `transcript_id` string: The transcript of the video itself (POST /v1/speech/transcripts on its url): every element of the plan is anchored to its words, and the render cuts the pauses around them

## Response `200`

Estimate

- Estimate
  - `operation` string
  - `estimated_credits` number
  - `credits_to_reserve` number
  - `estimated_usage` object
  - `note` string, nullable
  - `balance` object
    - `available` number
  - `sufficient` boolean

---

[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)
