Skip to main content
Send a recording, get it back with background voices and noise removed — for archives, call recordings before listening or sharing, or as a cleaner input for your own processing. Files only (not live audio); runs on CPU on the server. What happens to a file:
  1. The voices are analysed exactly as voice_isolation=true does for a transcription: the person who speaks first is kept (or, with reference_voiceprint, the stored person, even if someone else speaks first).
  2. A second voice is confirmed → the voice isolation model removes the other voices over the whole file (conditioned on the kept person’s voiceprint), then a 48 kHz speech enhancement model removes the noise. isolation: "voice+noise".
  3. No second voice (or remove_voices=false) → speech enhancement only. isolation: "noise".
The answer always has exactly the duration of the input. One person is kept. On a conversation recorded in one channel (agent and customer in the same mono file) the other party counts as a second voice and is removed. To clean such a recording without losing anyone, send remove_voices=false (noise removal only).
Synchronous answer (no webhook_url, audio up to 120 s): the audio itself, with headers X-Isolation (voice+noise | noise), X-Audio-Seconds, X-Processing-Time, X-Sample-Rate. A file longer than 120 s without webhook_url → 400 ("audio longer than 120 s: send webhook_url for an asynchronous job"). When the server is already cleaning other files, a synchronous request waits up to 30 s for its turn, then 503 (retry, or use a job). Processing time: about 13–16 seconds per minute of audio on our servers (voice analysis included; one cleanup at a time per server so transcriptions are not slowed down). A 2-minute file answers in ~30 s; a 60-minute file takes ~13–16 minutes as a job (jobs wait in line behind each other).

Asynchronous: webhook_url

Exactly like asynchronous transcription — same limits (20 jobs per key, 4 hours of audio, 1 GB upload), signatures, retries and webhook_metadata:
202:
Webhook (event isolation.completed / isolation.failed, header X-Mihu-Event):
The webhook does not carry the audio: download it from audio_url (relative to the API base URL, e.g. https://stt.eu.mihu.ai) with the same API key before expires_at. Only the API key (tenant) that created the job sees it; any other key gets 404.

Billing and data retention

  • Billed like a file transcription: the audio duration, once — on the synchronous answer or on the 202 (X-Audio-Seconds). Status reads, downloads and deletes are not billed.
  • The uploaded recording is deleted as soon as it has been processed. The isolated audio is kept for 1 hour after completion (expires_at) only so you can download it, then deleted automatically; DELETE removes it earlier. Synchronous requests keep nothing. Everything stays on the server of the region you call.

Quality — what to expect

Measured on 92 synthetic Turkish mixtures (FLEURS speech, DEMAND / MUSAN noise; leak = level of what is left of the unwanted sound, relative to the kept voice; lower is better):
  • On telephone (8 kHz) recordings a quieter background voice is often not confirmed as a second voice; the file then gets noise removal only (X-Isolation: noise).
  • Works best on wideband recordings where the voices take turns. Simultaneous speech and telephone audio are the hard cases: the other voice gets quieter but is not fully removed. Equal-level voices of the same gender are the hardest.
  • voice+noise costs some quality of the kept voice (artefacts in words that overlap the other voice); clean speech passes almost unchanged on the noise path.
  • Without reference_voiceprint the first speaker is kept. If someone else speaks first (e.g. an agent greeting before the customer), send the voiceprint of the person you want.
  • The voice+noise output is band-limited to 8 kHz (the voice isolation model works at 16 kHz); the noise path keeps the full band of a 48 kHz recording.
  • Music: vocals may be kept as speech.
  • Safety net: where recognised words of the kept person would come out silenced (the model can mistake speech for noise when a recording changes character, e.g. wideband audio followed by a telephone line), that stretch is redone in short pieces or, failing that, left without noise removal rather than losing the speech.