Skip to main content
Voice Changer is speech-to-speech: it re-records a source file in a different voice while preserving delivery, pacing, and timing. It is asynchronous and uses its own endpoints — not /audio/queue, and not text-to-speech or voice cloning. Choose a voice-changer model, request a price quote, queue the conversion, then poll until Venice returns the converted audio.
A queued conversion is charged immediately. If the queue response is lost, poll /audio/voice-changer/retrieve with the same queue_id. Do not queue the same recording again.

Choose a model

Voice-changer models are returned by GET /models?type=music with model_spec.voice_changer set to true. There is no ?type=voice-changer filter. The examples below use elevenlabs-voice-changer.
Check each model’s metadata before setting optional fields: Unsupported fields cause an HTTP 400 response. Recordings longer than max_source_audio_duration_seconds are rejected with HTTP 422 before any charge.

Conversion flow

1. Get a price quote

Voice Changer is billed from the length of the source recording, rounded up to the next whole minute. Quote the length you expect to send; the charge is computed from the length Venice measures when the recording is queued.
The response contains the estimated cost in USD and the duration the quote was computed for:

2. Queue the conversion

Supply the source recording exactly one of two ways: as a multipart file upload, or as an audio_url in a JSON body. Supplying both, or neither, is rejected. When you pass a URL, Venice fetches and validates the bytes itself and forwards only those bytes to the provider — the URL is never handed onward.
Optional fields, when the model reports support:
  • remove_background_noise — strip background noise before conversion
  • seed — integer ≥ 0 for a reproducible result
A successful request returns the model, a queue ID, and the measured source length:
Save model and queue_id; the retrieve and complete endpoints require them. Compare duration_seconds to your quote if you need to reconcile the estimate against the billed length.
Queue is not safe to retry. A successful queue request has already been charged.

3. Poll and download

Call /audio/voice-changer/retrieve with the values from the queue response:
Inspect the response Content-Type: A processing response looks like this:
Both timing values are milliseconds. A completed response also includes x-venice-audio-format, x-venice-audio-duration, x-venice-inference-time, x-venice-model-id, and x-venice-model-name. If the provider fails the conversion, the charge is refunded automatically and the error body includes credits_refunded. Polling again replays the same result rather than refunding twice. To delete stored media in the same call that returns the audio, set delete_media_on_completion to true on retrieve. The audio cannot be retrieved again afterwards.

Complete example

This Python example quotes a conversion, uploads a source file, polls every five seconds, and saves the result as MP3.
The quote endpoint does not require authentication, but queue, retrieve, and complete requests do.