Voice Cloning

Create custom voice clones from audio samples, then use them with TTS.
Clone limits
FreeProPremium
1 clone5 clones20 clones

Typical workflow

Voice cloning is a two-step process: prepare a sample, then create the clone.

End-to-end example
const { sample, error: sampleErr } = await sonus.voices.prepareSample({
  url: 'https://example.com/voice-sample.mp3',
})
if (sampleErr) throw sampleErr

const { voice, error: voiceErr } = await sonus.voices.create({
  name: 'My Voice',
  audio: sample.audio,
  format: sample.format,
  sampleRate: sample.sampleRate,
})
if (voiceErr) throw voiceErr

const { sound, error: ttsErr } = await sonus.tts.generate({
  text: 'Hello in my cloned voice!',
  voiceId: voice.id,
})

sample is { audio, format, sampleRate }. sound is { id, name, audioKey, audioUrl }.

sonus.voices.prepareSample({ url })

Download and normalize an audio sample for cloning.

NameTypeRequiredDescription
urlstringyesURL to an audio file (3–40 seconds)
const { sample, error } = await sonus.voices.prepareSample({
  url: 'https://example.com/voice-sample.mp3',
})

sonus.voices.create({ name, audio, format, sampleRate, ... })

Create a voice clone from a prepared sample.

NameTypeRequiredDescription
namestringyesName for the voice clone
audiostringyesBase64-encoded audio from prepareSample
formatstringyesAudio format from prepareSample
sampleRatenumberyesSample rate from prepareSample
skipAsrbooleannoSkip automatic speech recognition (default: false)
const { voice, error } = await sonus.voices.create({
  name: 'My Custom Voice',
  audio: sample.audio,
  format: sample.format,
  sampleRate: sample.sampleRate,
})

voice is { id, name }.

sonus.voices.list()

List all your voice clones.

const { voices, error } = await sonus.voices.list()

VoiceClone is { id, name, referenceText, createdAt }.

sonus.voices.delete(id)

Delete a voice clone by ID.

const { ok, error } = await sonus.voices.delete('voice_abc123')
Copyright © 2026