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.
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 case | Why isolate first |
|---|---|
| Pre-processing for transcription | Clean audio before sending it to speech-to-text for better accuracy. |
| Voice cloning preparation | Isolate clean speech for better voice cloning results. |
| Podcast production | Remove background noise from podcast recordings. |
| Call quality enhancement | Improve audio quality in telephony applications. |
How it works
Voice isolation is an asynchronous, job-based pipeline in three moves:
| Step | Call | What happens |
|---|---|---|
| 1 · Submit the file | POST /denoise | Send a multipart/form-data body with the audio field. The response returns a jobId and a denoiseId. |
| 2 · Track progress | GET /denoise/{denoiseId}/progress | Open an SSE connection to receive processing, done, and error events in real time. See Job status. |
| 3 · Retrieve the result | GET /denoise | The done event carries the url of the denoised audio. You can also list past jobs and their final URLs. |
Limits & formats
One upload field, hard caps on size and duration.
| Limit | Value |
|---|---|
| Maximum file size | 200 MB |
| Maximum duration | 15 minutes |
| Audio formats | WAV, MP3, M4A, FLAC, OGG |
| Video containers | mp4, mov, mkv, webm, avi, m4v — treated as video; the audio track is extracted before denoising. All other extensions are treated as audio. |
Submit a denoise job
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.
| Field | Type | Required | Description |
|---|---|---|---|
audio | File | Yes | Audio or video file to denoise (max 200 MB, max 15 minutes duration). |
| Field | Type | Description |
|---|---|---|
jobId | string | Identifier of the queued background job. Mirrors denoiseId. |
denoiseId | string (UUID) | Unique identifier of the denoising record. Use this with the progress and list endpoints. |
done event) or can be fetched from the list endpoint below once the record's status is success.List denoise history
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
offset | integer (≥ 0) | No | Number of records to skip from the start of the result set. |
limit | integer (≥ 1) | No | Maximum number of records to return. Omit to return all records. |
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Denoising record id (same value as denoiseId returned by POST /denoise). |
user_id | string | Owner of the record. |
transaction_id | string | null | Wallet transaction id associated with billing for this job, if any. |
audio_url | string | null | URL of the denoised audio. null until the job reaches success. |
original_audio_url | string | URL of the originally uploaded file. |
file_name | string | Original file name as submitted by the client. |
audio_duration | number | Duration of the source audio in seconds. |
audio_size | number | Size of the source file in bytes. |
audio_format | string | Lower-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. |
error | string | null | Error message if status is failed. |
created_at | string (ISO 8601) | Creation timestamp. |
updated_at | string (ISO 8601) | Last update timestamp. |
Errors
Errors come back as JSON with an errorCode and a human-readable errorMessage.
| Status | Code | Message |
|---|---|---|
| 400 Bad Request | 400xx | audio is required and must be a file |
| 400 Bad Request | 400xx | File size exceeds the maximum limit of 200MB. File size: <n>MB |
| 400 Bad Request | 400xx | Duration exceeds the maximum limit of 15 minutes. Duration: <n> minutes |
| 400 Bad Request | 400xx | offset must be a non-negative number · limit must be a positive number (list endpoint) |
| 401 Unauthorized | 40101 | Invalid or missing API key |
| 402 Payment Required | 40201 | Insufficient wallet balance |
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.
