MULTILINGUAL VOICE CLONING API

Your voice. Ready for another language.

Prepare an authorized recording once. Reuse its voice ID to turn your text into speech—without recording every line again.

10 synthesis languages$8 / 1M charactersMP3 / WAV
Your authorized recording

Record · upload · invite the speaker

Prepare oncevoice_idReuse for new text
EnglishenChinesezhGermandeJapanesejaFrenchfrSpanishesKoreankoPortugueseptRussianruItalianit

Workflow illustration. This does not translate your text.

LISTEN TO THE RESULT

One voice. Three languages. Hear the difference.

These recordings were generated through the live API using the published Rowan preset. Compare them with its original reference before trying your own authorized voice.

Rowan

Published preset · same prepared voice

REAL AUDIO
INPUT TEXT

Every small step opens a new door. Listen, learn, and tell your own story.

5.1s · 74 charactersDownload audio ↓
Node.js · same voice, explicit text language
const examples = [
  { language: 'en', text: 'Every small step opens a new door. Listen, learn, and tell your own story.' },
  { language: 'zh', text: '每一个小小的进步,都会打开一扇新的门。认真聆听,不断学习,讲述属于你自己的故事。' },
  { language: 'ja', text: '小さな一歩が、新しい扉を開きます。耳を傾け、学び、自分だけの物語を語りましょう。' },
];

for (const example of examples) {
  const { audio } = await client.generate({
    voice: 'rowan',
    ...example,
    output_format: 'mp3',
  });
  await writeFile(example.language + '.mp3', audio);
}

Generation excerpt; install the client and configure your server-side key first. Each language has its own input text. The API does not translate it.

Client installation and complete quickstart →

Recorded 14 September 2026 · clone-v1 · MP3 · speed 1. These are saved demonstration outputs, not new generations on playback. One preset and three short texts are not a quality benchmark or a guarantee for other recordings. Pronunciation, accent and similarity vary; assess your target-language content before publishing.

01 / A BETTER REFERENCE

The clone starts with what it hears.

One clean, representative voice is the starting point. These are preparation checks, not a promise of a perfect voice match.

REFERENCE CHECKLIST

3–30seconds

Current worker duration guidance. Follow upload validation if your file is rejected.

WAVMP3M4AWEBMOGGFLAC

Common containers; the API validates supported audio MIME types and file contents.

1

One person, one natural voice

Use consistent volume and a style representative of the voice you want.

2

Clean speech, without a soundtrack

Remove overlapping speakers, long silences and obvious clipping. Do not cover noise with music.

3

Accurate text, if supplied

reference_text is optional and accepts up to 600 Unicode code points; do not supply a different script.

4

Permission for this intended use

Use your own voice or keep explicit speaker permission for cloning and the planned application.

02 / VOICE ≠ LANGUAGE

Same voice ID. Your text sets the language.

Examples of request inputs, not recordings or a translation demo. You supply the translated script when you need another language.

中文language: 'zh'

每一个故事,都值得被听见。

voice: voiceIdsame ready voice
日本語language: 'ja'

すべての物語には、届けたい声があります。

voice: voiceIdsame ready voice
Españollanguage: 'es'

Cada historia merece ser escuchada.

voice: voiceIdsame ready voice
What to check

Listen to names, numbers, rhythm and speaker similarity in each language. Accent and pronunciation can vary. Short or mixed-language input may need an explicit language or separate requests; selecting a language does not translate the text.

03 / FROM JOB TO FILE

Know what is waiting—and what to save.

Voice preparation and speech generation are different operations. Switching a ready ID skips preparation, not inference.

  1. 01processing → ready

    Prepare the voice once

    Save the ready voice ID in its workspace and region.

  2. 02queued → running

    Submit your text

    Keep the job ID and Idempotency-Key. Up to 500 characters per queued task.

  3. 03succeeded → download

    Save the output

    Download MP3/WAV before result_expires_at. A retained download is not another generation.

A good fit

Pre-generated product guidance, short lessons, localization snippets and scripted dialogue assembled by your app.

Not included today

Realtime calls, streaming, native multi-speaker orchestration or emotion control. Longer content needs splitting and audio assembly.

FROM RECORDING TO API

Clone once. Generate as often as you need.

  1. Start with a permitted recording

    Use your own voice, upload a permitted file or send a recording invitation from the console. Keep the recording clear and the transcript accurate.

  2. Wait until the voice is ready

    Registration prepares the reference for synthesis. Store the returned voice ID; switching between prepared voices does not require another registration.

  3. Send text in the target language

    Reuse the voice ID with text and its language. The SDK handles routing and queued-job waiting, then returns the generated audio.

Node.js · generation excerpt
import { VoiceAPI } from '@castreader/voice-api';
import { writeFile } from 'node:fs/promises';

const client = new VoiceAPI();
// Use the ID of your ready, authorized clone.
const voiceId = 'YOUR_VOICE_ID';

const { audio } = await client.generate({
  voice: voiceId,
  text: '每一个故事,都值得被听见。',
  language: 'zh',
  output_format: 'mp3',
});

// Same voice ID. Different input text.
const english = await client.generate({
  voice: voiceId,
  text: 'Every story deserves to be heard.',
  language: 'en',
  output_format: 'mp3',
});

await writeFile('chinese.mp3', audio);
await writeFile('english.mp3', english.audio);

Install the SDK and set CASTREADER_API_KEY first. Each successful generation is metered separately.

Install the Node.js or Python client →

Registration fields and complete quickstart →

PAY FOR GENERATION, NOT A SUBSCRIPTION

$8 / million characters.

One usage price for supported synthesis languages. Available trial characters are used first; waiting and downloading a retained result do not add another generation charge.

Calculate your cost →

FOR AI-ASSISTED DEVELOPMENT

Prepare once. Integrate with a reusable voice.

Keep the voice, workspace and region together. Change the text and its language for each generation. Inspect real samples before deciding if similarity meets your needs.

Integration map · not a complete program
const job = await client.createJob({
  model: 'clone-v1', voice_id: readyVoiceId,
  text: '欢迎回来。', language: 'zh',
  output_format: 'mp3'
}, { idempotencyKey: savedKey });

01Recording & voice preparation

What should I record for a useful clone?

Use one speaker in a quiet setting, speaking naturally. Avoid music, overlapping speakers, echo, clipping and long silent sections. A representative speaking style is more useful than an exaggerated performance.

The current worker’s duration guidance is 3–30 seconds. Use a clean excerpt and follow the console’s validation result. If you provide a transcript, it must match the recording; the optional reference_text field accepts up to 600 Unicode code points.

Upload formats and fields →
Why does first-time preparation take longer than switching voices?

Registration validates and processes the reference and prepares the voice for inference. Only a ready voice can be used for generation. Reusing that voice ID avoids repeating the registration step.

Generation is still a separate task with a queue. This deployment allows 1 concurrent generation per workspace; switching IDs does not eliminate queueing or model inference. There is no promised preparation or generation latency.

Understand queued jobs →
How many private voices can I keep?

The current workspace limit is two active private voices and 5 registrations per UTC day. Built-in defaults do not use these private voice slots. Processing and deleting voices still count until their status changes.

Deleting a voice does not restore the day’s registration allowance. When you receive voice_registration_limit, check GET /v1/models and the console instead of retrying the upload in a loop.

Voice limits and status values →
Who can use or delete my private clone?

Private clones are scoped to the workspace and require a currently authorized API key and voice permission. They are not published in the public gallery. Voice recordings are not automatically copied between processing regions.

Deleting a voice immediately blocks new generation and access to its retained downloads; artifact cleanup then happens asynchronously. Reference data remains until deletion completes. Audio, consent and billing records have different retention rules.

Storage, consent and deletion →

02Languages & generated results

Can I fix names and numbers, or control speed, pauses and emotion?

MP3 supports speed from 0.5 to 2; WAV uses speed 1. Categories do not set emotion. The public API does not expose pronunciation dictionaries, phoneme/SSML controls, timed pause tags or emotion instructions.

Proofread input and write ambiguous numbers, abbreviations or dates in the intended spoken form. Try a short, clearly punctuated sentence in the correct language. These are practical workarounds, not pronunciation guarantees; each new successful generation is metered.

Supported request controls →
Does a private clone mean zero retention or a no-training guarantee?

No: workspace privacy describes access control, not zero retention. Voice references and prepared artifacts remain until deletion; audio and recoverable job input expire within the published retention window. Usage and consent records are kept separately.

This public offering does not publish an enterprise zero-retention or no-training contractual guarantee. If you require those commitments or specific residency/compliance terms, obtain written confirmation before sending sensitive recordings. Do not infer a certification or training policy from “private”.

Actual retention and access rules →
Does cloning translate text or reproduce an identical voice in every language?

No automatic translation is performed. Pass target-language text and a matching language code. The source recording, interface locale and synthesis language are separate choices.

Cross-language synthesis aims to preserve speaker characteristics, but accent, pronunciation and similarity can vary with the recording and language. Test names, numbers and representative sentences; no identity match or native-level pronunciation is guaranteed.

Supported languages and limits →
Can I build an audiobook or a multi-speaker conversation?

You can build a pre-generated workflow: divide a script into passages of at most 500 characters, choose a ready voice for each passage, generate sequentially and assemble the audio in your application.

This is application-side orchestration, not a native multi-speaker endpoint. Current delivery is MP3/WAV files; live conversations, streaming output, emotion controls and guaranteed seamless long-form joins are not included.

Workflow capabilities →
What should I do if generation times out or my connection drops?

Save the job ID and the original Idempotency-Key before waiting. A queued job survives closing the browser. Query that job or retry the identical input with the same key instead of submitting a new generation immediately.

Read the terminal status and error before changing the recording or text. Rejected or failed work is not charged; any active reservation is released after execution is confirmed stopped. An expired result returns 410 and is not regenerated under the old key.

Error codes and safe retries →
What do I get back, and how long can I download it?

You receive MP3 or WAV audio with request and usage information. Results are private and retained for up to 24 hours in this deployment; follow result_expires_at and download into your own authorized storage before it expires.

Downloading the same retained result does not create another generation charge. Optional v3 timings are currently for English, may contain word groups and may be unavailable; they are not guaranteed multilingual subtitles.

Audio results and timestamp support →