CleanvoiceDocs
Edits

Create an Edit

Submit an audio or video file for AI-powered editing.

Endpoint

POST /v2/edits

Submit a new editing job. The job runs asynchronously — you receive an edit_id immediately, then retrieve the result by polling.

Request body

{
  "input": {
    "files": ["https://example.com/podcast.mp3"],
    "config": {
      "fillers": true,
      "long_silences": true,
      "mouth_sounds": true,
      "stutters": true,
      "breath": true,
      "remove_noise": true,
      "studio_sound": false,
      "normalize": true,
      "transcription": false,
      "summarize": false
    }
  }
}

Multi-track

For interviews or multi-speaker recordings, pass multiple URLs in the files array and set upload_type to "multitrack":

{
  "input": {
    "files": [
      "https://example.com/host.mp3",
      "https://example.com/guest.mp3"
    ],
    "upload_type": "multitrack",
    "config": {
      "fillers": true
    }
  }
}

Not sure which settings to enable? See Edit Settings for recommended presets.

Response

{ "id": "edit_abc123" }

Examples

curl -X POST https://api.cleanvoice.ai/v2/edits \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "files": ["https://example.com/episode.mp3"],
      "config": {
        "fillers": true,
        "long_silences": true,
        "mouth_sounds": true,
        "normalize": true
      }
    }
  }'
from cleanvoice import Cleanvoice

client = Cleanvoice.from_env()

# process() submits AND waits for completion
result = client.process(
    "https://example.com/episode.mp3",
    fillers=True,
    long_silences=True,
    mouth_sounds=True,
    normalize=True,
)
result.audio.download("cleaned.mp3")

# create_edit() submits without waiting
edit_id = client.create_edit(
    "https://example.com/episode.mp3",
    fillers=True,
)
print("Edit ID:", edit_id)
import { Cleanvoice } from '@cleanvoice/cleanvoice-sdk';

const client = new Cleanvoice({ apiKey: process.env.CLEANVOICE_API_KEY });

// process() submits AND waits for completion
const result = await client.process(
  'https://example.com/episode.mp3',
  {
    fillers: true,
    long_silences: true,
    mouth_sounds: true,
    normalize: true,
  }
);

// createEdit() submits without waiting
const editId = await client.createEdit(
  'https://example.com/episode.mp3',
  { fillers: true }
);
console.log('Edit ID:', editId);

Configuration reference

See Edit Settings for a full list of configuration options and recommended presets.