The request body accepts two encodings: application/json (prompt / avatar as data URLs) or multipart/form-data (prompt / avatar as files, train_params / extra_params / vcover as JSON strings, booleans as "true" / "false"). Multipart allows at most 2 files of 100 MB each (exceeded → UPLOAD_TOO_LARGE); the reference audio itself is capped at 100 MB (exceeded → VOICE_PROMPT_TOO_LARGE) and must contain at least 3 seconds of speech.modelVersion defines the capability envelope. It defaults to v3.0 when omitted — not to the newest v4.0. Recommended values:v3.0 — professional cloning is supported; if the account has not been granted professional-cloning access the call returns 403 — contact sales to enable it. A professional clone must also name a concrete language; auto is rejected
v4.0 (Preview) — controllable (instruct) path only, so lora, isTest and vcover are all rejected
Illegal values return VOICE_MODEL_VERSION_INVALID — they are not silently downgraded.Capability mismatches may share the code VALIDATION_BAD_PARAMS; tell them apart by message.
The returned voice is not necessarily usable yet: status may still be creating — poll GET /api/voice/{id} until it becomes pending. Professional clones come back as lora-pending / lora-awaiting and only reach lora-success once training finishes.May return RATE_LIMIT_* (HTTP 429). Read Retry-After and retry with exponential backoff. See the "Errors" document.Professional-cloning quota is consumed before the voice is created and further processing begins, and is refunded automatically if any later step fails.Deprecated alias: /api/tts/voice. See the site document "Versions and migration".
A professional-clone (lora) submission goes straight into training.
See the Errors document for the full code reference. Always use the X-Vocu-App-Request-Id response header when troubleshooting.