Skip to content

Voice cloning HTTP API reference

Use the HTTP API to create, list, query, update, and delete cloned voices. User guide: Voice cloning.

Service endpoint

International

If you select the International deployment scope, model inference compute resources are dynamically scheduled worldwide, excluding the Chinese mainland. Static data is stored in your selected region. Supported region: Singapore.

POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization

Chinese mainland

If you select the Chinese mainland deployment scope, model inference compute resources are restricted to the Chinese mainland. Static data is stored in your selected region. Supported region: China (Beijing).

POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization

Request headers

ParameterTypeRequiredDescription
AuthorizationstringYesAuthentication token in the format Bearer . Replace with your actual API key.
Content-TypestringYesMedia type of the request body. Set to application/json for CosyVoice/Qwen-TTS, or application/json; charset=utf-8 for MiniMax.

Create a voice

Request body

This example uses the Singapore region endpoint. For the Beijing region, use: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization.

## CosyVoice voice cloning

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
 "model": "voice-enrollment",
 "input": {
 "action": "create_voice",
 "target_model": "cosyvoice-v3-plus",
 "prefix": "myvoice",
 "url": "https://your-audio-url.wav",
 "language_hints": \["en"\]
 }
}'

## Qwen voice cloning

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
 "model": "qwen-voice-enrollment",
 "input": {
 "action": "create",
 "target_model": "qwen3-tts-vc-realtime-2026-01-15",
 "preferred_name": "myvoice",
 "audio": {"data": "data:audio/mpeg;base64,{base64_encoded_audio}"}
 }
}'
   **model **`*string*`* ***(required)**

The voice cloning model. Valid values:

  • voice-enrollment: CosyVoice voice cloning.
  • qwen-voice-enrollment: Qwen voice cloning.

**input **object* *(required) The input parameters. Properties

action *string** *(required) The action type.

  • CosyVoice (voice-enrollment): Set to create_voice.
  • Qwen (qwen-voice-enrollment): Set to create.

target_model *string** *(required) The text-to-speech (TTS) model that drives the cloned voice. It must match the model you specify when calling the TTS API; otherwise, synthesis fails.

url *string** *(conditionally required)

**

**Important ** Applies only to CosyVoice voice cloning (when model is voice-enrollment).

The URL of the audio file for voice cloning. The URL must be publicly accessible.

audio *object** *(conditionally required)

**

**Important ** Applies only to Qwen voice cloning (when model is qwen-voice-enrollment).

The audio data. Two submission methods are supported:

  • Data URL (Base64-encoded): Format is {"data": "data:{mime_type};base64,{base64_encoded_data}"}. Supported MIME types: audio/wav, audio/mpeg, and audio/mp4.
  • Audio URL: Format is {"data": "https://your-audio-url.wav"}. The URL must be publicly accessible without authentication.

text *string** *(optional)

**

**Important ** Applies only to Qwen voice cloning (when model is qwen-voice-enrollment).

The transcript of the audio, used to improve cloning quality.

prefix *string** *(conditionally required)

**

**Important ** Applies only to CosyVoice (when model is voice-enrollment).

A prefix for the voice name. Only alphanumeric characters are allowed, with a maximum length of 10 characters. The resulting voice name follows this format: {target_model}-{prefix}-{unique_id}.

preferred_name *string** *(conditionally required)

**

**Important ** Applies only to Qwen voice cloning (when model is qwen-voice-enrollment).

A prefix for the voice name. Only alphanumeric characters and underscores are allowed, with a maximum length of 16 characters.

language_hints *array\[string\]** *(optional)

**

**Important ** Applies only to CosyVoice voice cloning (when model is voice-enrollment). Supported only by cosyvoice-v3.5-plus, v3.5-flash, v3-plus, and v3-flash.

Helps the model identify the language of the sample audio to extract voice features more accurately and improve cloning quality. If the specified language doesn't match the actual audio language (for example, setting en when the audio is in Chinese), the system ignores this value and detects the language automatically. This parameter is an array, but the current version processes only the first element. Valid values vary by model:

  • cosyvoice-v3-plus: <li>zh: Chinese
  • en: English
  • fr: French
  • de: German
  • ja: Japanese
  • ko: Korean
  • ru: Russian </li>
  • cosyvoice-v3.5-plus, cosyvoice-v3.5-flash, cosyvoice-v3-flash: <li>zh: Chinese
  • en: English
  • fr: French
  • de: German
  • ja: Japanese
  • ko: Korean
  • ru: Russian
  • pt: Portuguese
  • th: Thai
  • id: Indonesian
  • vi: Vietnamese </li> Default: ["zh"].

language *string** *(optional)

**

**Important ** Applies only to Qwen voice cloning (when model is qwen-voice-enrollment).

The language of the audio provided in audio.data. If you use this parameter, make sure the specified language matches the actual language of the audio used for cloning. Valid values:

  • zh: Chinese
  • en: English
  • de: German
  • it: Italian
  • pt: Portuguese
  • es: Spanish
  • ja: Japanese
  • ko: Korean
  • fr: French
  • ru: Russian Default: zh.

max_prompt_audio_length *float** *(optional)

**

**Important ** Applies only to CosyVoice voice cloning (when model is voice-enrollment). Supported only by cosyvoice-v3.5-plus, v3.5-flash, and v3-flash.

The maximum duration (in seconds) of the reference audio after preprocessing. Valid values: [3.0, 30.0]. Longer durations produce better results. Default: 10.0.

enable_preprocess *boolean** *(optional)

**

**Important ** Applies only to CosyVoice voice cloning (when model is voice-enrollment). Supported only by cosyvoice-v3.5-plus, v3.5-flash, and v3-flash.

Whether to enable audio preprocessing (noise reduction, audio enhancement, and volume normalization). Enable this for recordings with background noise. Disable it for recordings in quiet environments to preserve the original voice characteristics. Default: false.

Response body

## CosyVoice voice cloning

json
{
 "output": {
 "voice_id": "cosyvoice-v3.5-plus-myvoice-xxxxxx"
 },
 "usage": {
 "count": 1
 },
 "request_id": "xxxx-xxxx-xxxx"
}

## Qwen voice cloning

json
{
 "output": {
 "voice": "yourVoice",
 "target_model": "qwen3-tts-vc-realtime-2026-01-15"
 },
 "usage": {
 "count": 1
 },
 "request_id": "xxxx-xxxx-xxxx"
}

**

**Important ** CosyVoice returns the voice_id field, while Qwen returns the voice field. Qwen voice cloning may also return the fallback_mode and fallback_reason fields.

**request_id ***string* The unique identifier of this request.

**output ***object* The data returned by the model. Properties

**voice_id / voice ***string* The voice ID. CosyVoice returns voice_id, while Qwen returns voice. Use this value directly in the voice parameter of the TTS API.

**target_model ***string*

**

**Important ** Returned only by Qwen.

The TTS model that drives the cloned voice.

**fallback_mode ***boolean*

**

**Important ** Applies only to Qwen voice cloning (when model is qwen-voice-enrollment).

Whether the voice was created in fallback mode. A value of true indicates that the audio quality was poor or didn't match the provided text, and the cloning quality may be reduced.

**fallback_reason ***string*

**

**Important ** Returned only when fallback_mode is true.

The reason for the fallback. Possible values include no_merged_segments (unable to merge audio segments) and no_valid_asr_segments (severe mismatch between audio and text).

**usage ***object* Usage information for this request. Properties

count *integer* The number of voices created. Always 1.

Query voice list

Request body

This example uses the Singapore region endpoint. For the Beijing region, use: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization.

## CosyVoice

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
 "model": "voice-enrollment",
 "input": {
 "action": "list_voice",
 "prefix": "myvoice",
 "page_size": 10,
 "page_index": 0
 }
}'

## Qwen voice cloning

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
 "model": "qwen-voice-enrollment",
 "input": {
 "action": "list",
 "page_size": 10,
 "page_index": 0
 }
}'
   **model **`*string*`* ***(required)**

The voice cloning model. Valid values:

  • voice-enrollment: CosyVoice voice cloning.
  • qwen-voice-enrollment: Qwen voice cloning.

**input **object* *(required) The input parameters. Properties

action *string** *(required) The action type. CosyVoice: list_voice. Qwen: list.

prefix *string** *(optional)

**

**Important ** Applies only to CosyVoice.

Filters voices by name prefix.

page_index *integer** *(optional) The page index.

page_size *integer** *(optional) The number of entries per page.

Response body

## CosyVoice

json
{
 "output": {
 "voice_list": \[
 {
 "voice_id": "cosyvoice-v3.5-plus-myvoice-xxxxxx",
 "gmt_create": "2024-12-11 13:38:02",
 "gmt_modified": "2024-12-11 13:38:02",
 "status": "OK"
 }
 \]
 },
 "usage": {
 "count": 1
 },
 "request_id": "xxxx-xxxx-xxxx"
}

## Qwen

json
{
 "output": {
 "page_index": 0,
 "page_size": 10,
 "total_count": 2,
 "voice_list": \[
 {
 "voice": "yourVoice1",
 "gmt_create": "2025-08-11 17:59:32",
 "gmt_modified": "2025-08-11 17:59:32",
 "language": "en",
 "target_model": "qwen3-tts-vc-realtime-2026-01-15"
 }
 \]
 },
 "usage": {
 "count": 0
 },
 "request_id": "xxxx-xxxx-xxxx"
}

**

**Important ** CosyVoice returns a voice_list array where each entry contains the voice_id field. Qwen also returns a voice_list array, but each entry contains the voice field instead. The Qwen output additionally includes the page_index, page_size, and total_count pagination fields.

**request_id ***string* The unique identifier of this request.

**output ***object* The data returned by the model. Properties

**page_index ***integer*

**

**Important ** Returned only by Qwen.

The current page index.

**page_size ***integer*

**

**Important ** Returned only by Qwen.

The number of entries per page.

**total_count ***integer*

**

**Important ** Returned only by Qwen.

The total number of voices.

**voice_list ***array\[object\]* The list of queried voices. Both CosyVoice and Qwen use the voice_list field name. Properties

**voice_id / voice ***string* The voice ID. CosyVoice uses voice_id, while Qwen uses voice.

**gmt_create ***string* The creation time.

**gmt_modified ***string* The last modification time.

**status ***string*

**

**Important ** Returned only by CosyVoice.

The voice status. For valid values, see "Voice status descriptions".

**target_model ***string*

**

**Important ** Returned only by Qwen.

The TTS model that drives the cloned voice.

**usage ***object* Usage information for this request. Properties

count *integer* Always 1 for CosyVoice. Always 0 for Qwen.

Query voice details

Important

Applies only to CosyVoice (when model is voice-enrollment). Qwen models don't support the query voice details operation.

Request body

This example uses the Singapore region endpoint. For the Beijing region, use: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization.

## CosyVoice

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
 "model": "voice-enrollment",
 "input": {
 "action": "query_voice",
 "voice_id": "yourVoiceId"
 }
}'
   **model **`*string*`* ***(required)**

Set to voice-enrollment (CosyVoice).

**input **object* *(required) The input parameters. Properties

action *string** *(required) Set to query_voice.

voice_id *string** *(required) The voice ID to query.

Response body

json
{
 "output": {
 "gmt_create": "2024-12-11 13:38:02",
 "resource_link": "https://yourAudioFileUrl",
 "target_model": "cosyvoice-v3.5-plus",
 "gmt_modified": "2024-12-11 13:38:02",
 "status": "OK"
 },
 "usage": {
 "count": 1
 },
 "request_id": "xxxx-xxxx-xxxx"
}

**request_id ***string* The unique identifier of this request.

**output ***object* The data returned by the model. Properties

**resource_link ***string* The URL of the audio file.

**gmt_create ***string* The creation time.

**gmt_modified ***string* The last modification time.

**status ***string* The voice status. For valid values, see "Voice status descriptions".

**target_model ***string* The TTS model that drives the cloned voice.

**usage ***object* Usage information for this request. Properties

count *integer* Always 1.

Update a voice

Important

Applies only to CosyVoice voice cloning (when model is voice-enrollment). Qwen models don't support the update operation.

Request body

This example uses the Singapore region endpoint. For the Beijing region, use: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization.

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
 -H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
 -H "Content-Type: application/json" \\
 -d '{
 "model": "voice-enrollment",
 "input": {
 "action": "update_voice",
 "voice_id": "yourVoiceId",
 "url": "https://new-audio-url.wav"
 }
 }'
   **model **`*string*`* ***(required)**

Set to voice-enrollment.

**input **object* *(required) The input parameters. Properties

action *string** *(required) Set to update_voice.

voice_id *string** *(required) The voice ID to update.

url *string** *(required) The URL of the new audio file. The URL must be publicly accessible.

Response body

json
{
 "output": {},
 "usage": {
 "count": 1
 },
 "request_id": "xxxx-xxxx-xxxx"
}

**request_id ***string* The unique identifier of this request.

**output ***object* The data returned by the model. The update operation returns an empty object.

**usage ***object* Usage information for this request. Properties

count *integer* Always 1.

Delete a voice

Request body

This example uses the Singapore region endpoint. For the Beijing region, use: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization.

## CosyVoice

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
 "model": "voice-enrollment",
 "input": {
 "action": "delete_voice",
 "voice_id": "yourVoiceId"
 }
}'

## Qwen voice cloning

curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \\
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{
 "model": "qwen-voice-enrollment",
 "input": {
 "action": "delete",
 "voice": "yourVoice"
 }
}'
   **model **`*string*`* ***(required)**

The voice cloning model. Valid values:

  • voice-enrollment: CosyVoice voice cloning.
  • qwen-voice-enrollment: Qwen voice cloning.

**input **object* *(required) The input parameters. Properties

action *string** *(required) The action type. CosyVoice: delete_voice. Qwen: delete.

voice_id *string** *(conditionally required)

**

**Important ** Applies only to CosyVoice.

The voice ID to delete.

voice *string** *(conditionally required)

**

**Important ** Applies only to Qwen.

The voice name to delete.

Response body

## CosyVoice

json
{
 "output": {},
 "usage": {
 "count": 1
 },
 "request_id": "xxxx-xxxx-xxxx"
}

## Qwen

json
{
 "output": {
 "voice": "yourVoice"
 },
 "usage": {
 "count": 0
 },
 "request_id": "xxxx-xxxx-xxxx"
}

**

**Important ** CosyVoice returns an empty output object, while Qwen returns the voice field with the deleted voice name.

**request_id ***string* The unique identifier of this request.

**output ***object* The data returned by the model. CosyVoice returns an empty object, while Qwen returns the name of the deleted voice. Properties

**voice ***string*

**

**Important ** Returned only by Qwen.

The name of the deleted voice.

**usage ***object* Usage information for this request. Properties

count *integer* Always 1.

Voice status descriptions

After a voice is created, it goes through a review process. The statuses below apply only to CosyVoice (when model is voice-enrollment). Qwen query and list responses don't include a status field.

StatusDescription
DEPLOYINGUnder review or processing.
OKReview passed. The voice is ready to use.
UNDEPLOYEDReview rejected. The voice can't be used.

Mirror of Alibaba Cloud Model Studio docs for reference and RAG. Not affiliated with Alibaba Cloud.