Remove silence
Every recording has pauses that made sense to the person speaking and add nothing for the person listening later — a thinking gap, a paused microphone, a long stretch before someone finally says the useful part. This endpoint finds those gaps and cuts them out so the recording moves at the pace of what's actually being said.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
Where the dead air comes from
Unscripted recordings are full of it: a solo narrator gathering their thoughts mid-sentence, a remote interview with a laggy connection, a voice memo someone left running while they walked away. None of that silence is a mistake exactly, it's just a byproduct of how people actually talk and record, but it makes for a worse listening experience and a longer file than the content deserves. audio.remove_silence targets that specific waste without touching the speech around it.
How the cut is decided
POST /audio/remove-silence with your file, and the task runs asynchronously, returning a task_id right away. The result — a version of the file with the silent stretches removed — arrives by signed webhook or through a signed link valid for 24 hours. The detection works on quiet stretches below a threshold rather than on any fixed pause length, so a natural half-second breath between sentences is left alone while a ninety-second dead spot gets cut.
Tighter is not always better
Removing every pause too aggressively can make speech sound rushed or robotic, which is a real tradeoff every audio editor learns to respect — a little breathing room between sentences is part of how natural speech reads to a listener. The goal here isn't zero silence, it's removing the dead air that serves no purpose, which is a meaningfully different target and one this endpoint is tuned toward.
What it saves further down the line
Shorter files transcribe faster and cheaper, summarize more accurately because there's less nothing for a model to wade through, and simply take less of a listener's time — three real gains from one pass. Podcast editors run it before final mastering to tighten interviews without manually scrubbing a waveform for silent gaps, and voice-memo apps run it automatically on every recording so users never notice the dead air was ever there. Priced per request plus per minute of the source file, it's cheap enough to run on every recording by default rather than reserving it for the ones someone remembers to clean up.
What you can do with it
Tightening an unscripted interview
A podcast producer removes long thinking pauses from a raw interview recording before it goes to the editor for final mastering.
Cleaning up remote voice memos
A note-taking app strips dead air from voice memos automatically so playback stays tight even if the recording ran while the user was distracted.
Shorter, cheaper transcription runs
A transcription pipeline removes silence before sending audio downstream, cutting both processing time and per-minute transcription costs.
Faster review of long recordings
A legal team removes silent gaps from a recorded deposition so reviewers spend less time waiting through pauses that carry no content.
FAQ
How do I remove silence from audio with the API?
POST the file to /audio/remove-silence, keep the returned task_id, and collect the cleaned file by webhook or a signed link valid for 24 hours.
Is the remove silence API free?
No, there is no free tier or trial; it costs $0.077 per request plus $0.0045 per minute of source audio, and a failed task is never charged.
Will it cut off natural pauses in speech?
It targets stretches of dead air below a quiet threshold, not every short pause, so normal breathing room between sentences is generally preserved.
What formats does it accept?
The common ones — MP3, WAV, OGG, M4A and FLAC; check the endpoint reference for the current full list.
Can I adjust how aggressive the silence removal is?
Check the endpoint reference for available sensitivity parameters if you need tighter or looser silence detection than the default.
Does removing silence reduce transcription cost too?
Yes, a shorter file after silence removal generally means less processing time and lower cost for any downstream per-minute service like transcription.
Is this endpoint live yet?
It's in deployment now and not yet accepting jobs; check the endpoint status before pointing production traffic at it.
Is my audio kept after processing?
No, source files and results are deleted after the retention window and are never used for training.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/audio/remove-silence \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"audio":"https://ejemplo.com/audio.mp3"}'const res = await fetch("https://api.kit.forhosting.com/audio/remove-silence", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"audio": "https://ejemplo.com/audio.mp3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/remove-silence",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"audio": "https://ejemplo.com/audio.mp3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/remove-silence", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"audio":"https://ejemplo.com/audio.mp3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"audio":"https://ejemplo.com/audio.mp3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/remove-silence", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"audio": "https://ejemplo.com/audio.mp3"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.remove_silence",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 200 |
max_minutes | 180 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |