Text to speech
Synthesize speech from text with a preset or cloned voice.
Primary agent path
Use the Universal Skill with the MCP tool beatra.speech.synthesize. The tool
is billable and returns an asynchronous task.
- Pick a voice first:
beatra.voices.listreturns preset and cloned voices withvoice_idand preview URLs. - If a model, language, format, or price matters, call
beatra.models.listwithcapability: "text_to_speech". Otherwise usemodel: "auto"or omitmodel. - Create one opaque
client_request_idand submit the final arguments once. - Poll the returned task with
beatra.tasks.getuntil it is terminal.
AI guide
MCP integration guide for AI
For custom API integrations, copy this guide into Claude, Codex, or another coding assistant.
Tool arguments
voice accepts any voice_id from voices;
preset and cloned voices behave the
same. Streaming and real-time conversation are not part of this capability.
Models, controls, and cost
Common controls are input (required, ≤50,000 characters), voice
(required), language, format (default mp3; also wav/flac/opus/pcm),
speed (0.5–2.0), volume (>0–10), pitch (−12–12), emotion, and
sample_rate. Use each only according to the selected model's metadata.
beatra.models.list is the current source for selectable models, supported
languages, formats, sample rates, and customer prices. Do not copy a model
catalog or price table into an agent prompt.
Speech is prepaid from the request estimate and billed linearly by weighted characters (quoted per 1,000): each Han ideograph counts as 2 and every other character counts as 1.
Languages
language is an optional provider-neutral BCP-47 tag such as zh-CN,
yue-HK, or en-US. Beatra matches the primary language subtag against the
selected model; omit the field to let the voice or model detect the language.
An unsupported language is rejected instead of being silently replaced.
Current speech models cover the 40 languages below;
constraints.supported_languages from beatra.models.list is the live,
model-specific source.
| Code | Language | Code | Language |
|---|---|---|---|
zh | Chinese | tr | Turkish |
yue | Cantonese | nl | Dutch |
en | English | uk | Ukrainian |
es | Spanish | th | Thai |
fr | French | pl | Polish |
ru | Russian | ro | Romanian |
de | German | el | Greek |
pt | Portuguese | cs | Czech |
ar | Arabic | fi | Finnish |
it | Italian | hi | Hindi |
ja | Japanese | bg | Bulgarian |
ko | Korean | da | Danish |
id | Indonesian | he | Hebrew |
vi | Vietnamese | ms | Malay |
fa | Persian | sk | Slovak |
sv | Swedish | hr | Croatian |
fil | Filipino | hu | Hungarian |
no | Norwegian | sl | Slovenian |
ca | Catalan | nn | Nynorsk |
ta | Tamil | af | Afrikaans |
Task status and recovery
queued and running are not failures. Keep polling the same task_id; never
submit a replacement because work is still running. On a lost create response,
retry the identical arguments with the same client_request_id. If any input
changes, use a new ID. Failed tasks automatically refund the charged credits.
Return the audio artifact, resolved model, and charged credits only from the
terminal task response; artifact URLs are CDN addresses — copy them to your own
storage promptly.
REST API
Direct protocol integrations may use POST /v1/audio/speech and the shared
task endpoints. Follow the generated API operation.
Skill + MCP is the recommended integration; use REST for custom, non-agent
applications.