Audio Voice isolation

Voice isolation

Separate clean speech from background noise. Upload once, track the job as it runs, and get back a URL to the denoised audio — ready for transcription, voice cloning, or anything downstream.

1

What it does

Voice isolation is AI-powered noise removal that preserves natural speech characteristics. It accepts both audio and video files — video uploads have their audio track extracted automatically. Typical jobs:

Use caseWhy isolate first
Pre-processing for transcriptionClean audio before sending it to speech-to-text for better accuracy.
Voice cloning preparationIsolate clean speech for better voice cloning results.
Podcast productionRemove background noise from podcast recordings.
Call quality enhancementImprove audio quality in telephony applications.
2

How it works

Voice isolation is an asynchronous, job-based pipeline in three moves:

StepCallWhat happens
1 · Submit the filePOST /denoiseSend a multipart/form-data body with the audio field. The response returns a jobId and a denoiseId.
2 · Track progressGET /denoise/{denoiseId}/progressOpen an SSE connection to receive processing, done, and error events in real time. See Job status.
3 · Retrieve the resultGET /denoiseThe done event carries the url of the denoised audio. You can also list past jobs and their final URLs.
3

Limits & formats

One upload field, hard caps on size and duration.

LimitValue
Maximum file size200 MB
Maximum duration15 minutes
Audio formatsWAV, MP3, M4A, FLAC, OGG
Video containersmp4, mov, mkv, webm, avi, m4v — treated as video; the audio track is extracted before denoising. All other extensions are treated as audio.
4

Submit a denoise job

Submit denoise jobPOST/denoise

Queues an audio (or video) file for voice isolation. The endpoint accepts the upload, persists the original, creates a pending record, and enqueues a background job. Authenticate with your API key in the x-api-key header. Content type is multipart/form-data.

FieldTypeRequiredDescription
audioFileYesAudio or video file to denoise (max 200 MB, max 15 minutes duration).
curl
curl -X POST "https://api.munsit.com/api/v1/denoise" \ -H "x-api-key: YOUR_API_KEY" \ -F "audio=@input_audio.wav"
Response · 200 OK
{ "jobId": "5b1d2f7e-3f81-4c2a-9c5d-7a2e91b4c7a1", "denoiseId": "5b1d2f7e-3f81-4c2a-9c5d-7a2e91b4c7a1" }
FieldTypeDescription
jobIdstringIdentifier of the queued background job. Mirrors denoiseId.
denoiseIdstring (UUID)Unique identifier of the denoising record. Use this with the progress and list endpoints.
Async workflow. This endpoint only enqueues the job. The denoised audio URL is delivered via the progress SSE endpoint (done event) or can be fetched from the list endpoint below once the record's status is success.
5

List denoise history

List denoise historyGET/denoise

Returns the authenticated user's denoising records ordered by most recently created first. Use this to retrieve the final audio URL of completed jobs, monitor pending jobs, or paginate through historical results.

ParameterTypeRequiredDescription
offsetinteger (≥ 0)NoNumber of records to skip from the start of the result set.
limitinteger (≥ 1)NoMaximum number of records to return. Omit to return all records.
curl
curl -X GET "https://api.munsit.com/api/v1/denoise?offset=0&limit=20" \ -H "x-api-key: YOUR_API_KEY"
Response · 200 OK
[ { "id": "5b1d2f7e-3f81-4c2a-9c5d-7a2e91b4c7a1", "user_id": "user_123", "transaction_id": "txn_abc", "audio_url": "https://cdn.munsit.com/denoising/user_123/5b1d2f7e_denoised.wav", "original_audio_url": "https://cdn.munsit.com/denoising/user_123/5b1d2f7e_original.wav", "file_name": "meeting.wav", "audio_duration": 312.4, "audio_size": 10485760, "audio_format": "wav", "source_type": "audio", "status": "success", "error": null, "created_at": "2026-05-12T10:14:02.000Z", "updated_at": "2026-05-12T10:14:55.000Z" } ]
FieldTypeDescription
idstring (UUID)Denoising record id (same value as denoiseId returned by POST /denoise).
user_idstringOwner of the record.
transaction_idstring | nullWallet transaction id associated with billing for this job, if any.
audio_urlstring | nullURL of the denoised audio. null until the job reaches success.
original_audio_urlstringURL of the originally uploaded file.
file_namestringOriginal file name as submitted by the client.
audio_durationnumberDuration of the source audio in seconds.
audio_sizenumberSize of the source file in bytes.
audio_formatstringLower-cased file extension of the source file (e.g. wav, mp4).
source_type"audio" | "video"Whether the upload was an audio file or a video container.
status"pending" | "success" | "failed"Current job status.
errorstring | nullError message if status is failed.
created_atstring (ISO 8601)Creation timestamp.
updated_atstring (ISO 8601)Last update timestamp.
6

Errors

Errors come back as JSON with an errorCode and a human-readable errorMessage.

StatusCodeMessage
400 Bad Request400xxaudio is required and must be a file
400 Bad Request400xxFile size exceeds the maximum limit of 200MB. File size: <n>MB
400 Bad Request400xxDuration exceeds the maximum limit of 15 minutes. Duration: <n> minutes
400 Bad Request400xxoffset must be a non-negative number · limit must be a positive number (list endpoint)
401 Unauthorized40101Invalid or missing API key
402 Payment Required40201Insufficient wallet balance
7

Next steps

The job is queued — now watch it finish, then put the clean audio to work.

Working with an AI assistant? Every page is available as Markdown: add .md to the URL, or send an Accept: text/markdown header. For the whole documentation in one request, point it at llms-full.txt; the page index is llms.txt. Or use Copy Page, top right.