---
title: "Remove silences and filler words — estimate"
method: POST
path: "/v1/studio/remove-silence/estimate"
tags: ["Edit"]
---

# Remove silences and filler words — estimate

`POST /v1/studio/remove-silence/estimate`

## Request

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

Price the request without executing it. Same body as `POST /v1/studio/remove-silence`.

## Request body

- object
  - `audio` object: Voice clean-up, opt in: `denoise` (default off; `auto` cleans only when noise is found) and `enhance` — see POST /v1/studio/edit `audio`
    - `denoise` 'off' | 'auto' | 'light' | 'strong': Background-noise reduction (DeepFilterNet 3) — default `off` on edit / short / remove-silence, `auto` on clean-audio: `auto` measures the noise and reduces it only when there is some (a clean recording, a music bed or digital silence stays as it is) · `light` a gentle fixed reduction · `strong` as much as the model removes · `off` the sound as recorded. Mains hum (50/60 Hz) is notched out whenever it is found
    - `enhance` boolean: Gentle voice enhancement after the noise: a high-pass at 75 Hz, a de-esser, a 3:1 compressor and a small presence lift — each only when the measurement calls for it (a clean studio voice stays as it is)
  - `words` object[]: Your own timed words (ms) instead of a transcript
    - `id` string: Stable id (w0001…), as GET /v1/speech/transcripts/{id} returns it — anchors and cues name words by it
    - `end` number, required: ms
    - `keep` boolean: Never drop this word from the captions: a cut that leaves only a sliver of it shows it at the join (a word of your own script)
    - `text` string, required
    - `start` number, required: ms
    - `spoken` string: What was said, when the displayed text differs ("3,000" vs "three thousand")
    - `speaker` string, nullable
  - `output` object
    - `fit` 'crop' | 'blur' | 'pad': When the aspect ratio changes: crop the edges, blurred copy behind, or solid bars
    - `fps` number
    - `format` 'mp4' | 'webm' | 'mov' | 'gif' | 'mp3' | 'wav' | 'm4a' | 'jpg' | 'png'
    - `quality` 'draft' | 'standard' | 'high': high (default) = best picture; draft renders fastest for previews
    - `background` string: Bar colour for fit=pad
    - `resolution` '480' | '720' | '1080' | 'source': Short side in pixels (1080 = Full HD). `source` keeps the input size, max 1080
    - `aspect_ratio` 'original' | '9:16' | '16:9' | '1:1' | '4:5' | '4:3': 9:16 for Reels/TikTok/Shorts, 1:1 or 4:5 for feed, 16:9 for YouTube
  - `fillers` string[]
  - `cut_sound` object: A sound effect on every jump cut the engine makes (the joins after remove_silence / keep / trim); each one is reported in `elements` (kind sound, ids cut1…). Never in the first 100 ms
    - `max` integer: At most this many cut sounds — the first cuts get them
    - `url` string, uri, required: The sound effect (e.g. a whoosh from /v1/ai/sound-effects)
    - `volume` number: 1 sits just under the speech; 0.5 is a soft accent
    - `normalize` boolean: Level the effect first, so `volume` means the same for every file
    - `offset_ms` number: Shift from the cut, ms (negative = the sound starts before the join, so a whoosh peaks on it)
  - `video_url` string, uri, required: Public URL of the source video (mp4, mov, webm, mkv…) — or the `url` of a previous render
  - `padding_ms` number: Breathing room kept around speech
  - `transition` object: How the kept spans are joined (a crossfade or a dip to black at every jump cut). Omit for plain cuts
    - `ms` number: Length of the transition, ms — rounded to whole frames, never more than half of the shorter span; every join shortens the output by this much
    - `type` 'cut' | 'crossfade' | 'dip': cut = a plain jump cut (default); crossfade = the spans dissolve into each other, picture and sound; dip = the picture dips to black between them
  - `min_pause_ms` number: Silences longer than this are cut (detected in the audio)
  - `threshold_db` number: Silence level in dB (default: adapted to the video’s loudness)
  - `language_code` string: Spoken language for automatic transcription, e.g. `he`, `en`. Omit to detect
  - `transcript_id` string: Reuse a transcript from /v1/speech/transcripts (no transcription charge). Omit to transcribe automatically
  - `remove_fillers` boolean: Also cut um / uh / אה / אממ…
  - `remove_retakes` union: Cut retakes, false starts and stutters found in the words, keeping the best take of each: `true`, or { mode, judge, window_s }
    - boolean
    - object
      - `mode` 'auto' | 'last' | 'best': auto (default) = the last complete take, unless an earlier take of the same words is clearly cleaner · last = always the last complete take (standard practice) · best = the take with the highest score (complete, fluent — fewest fillers, stumbles and hesitations —, confident, steady pace)
      - `judge` boolean: When two complete takes score too close to call, a model watches just those takes and chooses — a separate POST /v1/ai/text call on the cheapest model, charged as its own line in your history (none when no group is ambiguous)
      - `window_s` number: How long after a take its retake is looked for, seconds (default 30). Several recordings of one script joined with POST /v1/studio/merge: their length

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