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": { "enabled": true },
      "long_silences": { "enabled": true },
      "mouth_sounds": { "enabled": true },
      "stutters": { "enabled": true },
      "breath": { "enabled": true },
      "remove_noise": { "enabled": true },
      "studio_sound": { "enabled": false },
      "normalize": { "enabled": true },
      "transcription": { "enabled": false },
      "summarize": { "enabled": 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": { "enabled": true }
    }
  }
}

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

Response

{
  "id": "edit_abc123",
  "status": "PENDING"
}

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": { "enabled": true },
        "long_silences": { "enabled": true },
        "mouth_sounds": { "enabled": true },
        "normalize": { "enabled": 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';

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,
    longSilences: true,
    mouthSounds: 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.