Create a voice clone
Clone a voice from a workspace-owned audio sample and save it. The result is a voice_id that POST /v1/audio/minimax-speech-hd, POST /v1/audio/minimax-speech-turbo, and POST /v1/audio/qwen3-tts accept. You must accept the current media-rights statement in the body: roasOS records that consent before it prices, reserves, or runs anything. Choose minimax-voice-clone for the widest language coverage; the provider holds the voice and deletes it after 7 days unless a MiniMax call uses it. Choose qwen3-voice-clone when you do not want a provider-held voice: roasOS stores the speaker embedding, and nothing expires.
Clone a voice from a workspace-owned audio sample and save it. The result is a voice_id that POST /v1/audio/minimax-speech-hd, POST /v1/audio/minimax-speech-turbo, and POST /v1/audio/qwen3-tts accept. You must accept the current media-rights statement in the body: roasOS records that consent before it prices, reserves, or runs anything. Choose minimax-voice-clone for the widest language coverage; the provider holds the voice and deletes it after 7 days unless a MiniMax call uses it. Choose qwen3-voice-clone when you do not want a provider-held voice: roasOS stores the speaker embedding, and nothing expires.
Authorization
bearerAuth API key authentication. Use your API key as the bearer token: Authorization: Bearer roasos_sk_...
In: header
Header Parameters
A unique string that makes retries safe. Any value 16-255 characters; reuse it only when retrying the exact same request.
^[A-Za-z0-9._:-]+$16 <= length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/voices" \ -H "Idempotency-Key: stringstringstri" \ -H "Content-Type: application/json" \ -d '{ "audio_url": "http://example.com", "media_rights": { "accepted": true, "statement_version": 0, "policy_version": "string" } }'{ "data": { "kind": "quote", "quote_id": "3c071a1d-db86-46a7-9dc8-72ba3fbca992", "credits": 0, "expires_at": "string", "pricing_version": "string", "confirmation": { "property1": null, "property2": null } }}List voices
Every saved voice this workspace owns, newest first. A MiniMax voice carries the date the provider deletes it unless a MiniMax text-to-speech call uses it; a Qwen voice never expires.
Delete a voice
Delete a saved MiniMax voice and its preview clip. A Qwen voice is removed together with its private speaker embedding by the engine deletion lifecycle, so this endpoint refuses it rather than delete the record and leave the embedding.