# TTA Speech 02 Turbo API | MiniMax Text to Speech

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown is available with `Accept: text/markdown` and `.md` URL variants.

Source: /docs/api-reference/model-apis-minimax-speech-02-turbo

# MiniMax Speech-02-turbo Text to Speech

POST

/

v3

/

minimax-speech-02-turbo

Try it

MiniMax Speech-02-turbo Text to Speech

cURL

```
curl --request POST \
--url https://api.novita.ai/v3/minimax-speech-02-turbo \
--header 'Authorization: &#x3C;authorization>' \
--header 'Content-Type: &#x3C;content-type>' \
--data '
{
"text": "&#x3C;string>",
"voice_setting": {
"speed": 123,
"vol": 123,
"pitch": 123,
"voice_id": "&#x3C;string>",
"emotion": "&#x3C;string>",
"text_normalization": true
},
"audio_setting": {
"sample_rate": 123,
"bitrate": 123,
"format": "&#x3C;string>",
"channel": 123
},
"pronunciation_dict": {
"tone": [
{}
]
},
"timbre_weights": [
{
"voice_id": "&#x3C;string>",
"weight": 123
}
],
"stream": true,
"language_boost": "&#x3C;string>",
"output_format": "&#x3C;string>",
"voice_modify": {
"pitch": 123,
"intensity": 123,
"timbre": 123,
"sound_effects": "&#x3C;string>"
}
}
'
```

```
import requestsurl = "https://api.novita.ai/v3/minimax-speech-02-turbo"payload = { "text": "&#x3C;string>", "voice_setting": { "speed": 123, "vol": 123, "pitch": 123, "voice_id": "&#x3C;string>", "emotion": "&#x3C;string>", "text_normalization": True }, "audio_setting": { "sample_rate": 123, "bitrate": 123, "format": "&#x3C;string>", "channel": 123 }, "pronunciation_dict": { "tone": [{}] }, "timbre_weights": [ { "voice_id": "&#x3C;string>", "weight": 123 } ], "stream": True, "language_boost": "&#x3C;string>", "output_format": "&#x3C;string>", "voice_modify": { "pitch": 123, "intensity": 123, "timbre": 123, "sound_effects": "&#x3C;string>" }}headers = { "Content-Type": "&#x3C;content-type>", "Authorization": "&#x3C;authorization>"}response = requests.post(url, json=payload, headers=headers)print(response.text)
```

```
const options = { method: 'POST', headers: {'Content-Type': '&#x3C;content-type>', Authorization: '&#x3C;authorization>'}, body: JSON.stringify({ text: '&#x3C;string>', voice_setting: { speed: 123, vol: 123, pitch: 123, voice_id: '&#x3C;string>', emotion: '&#x3C;string>', text_normalization: true }, audio_setting: {sample_rate: 123, bitrate: 123, format: '&#x3C;string>', channel: 123}, pronunciation_dict: {tone: [{}]}, timbre_weights: [{voice_id: '&#x3C;string>', weight: 123}], stream: true, language_boost: '&#x3C;string>', output_format: '&#x3C;string>', voice_modify: {pitch: 123, intensity: 123, timbre: 123, sound_effects: '&#x3C;string>'} })};fetch('https://api.novita.ai/v3/minimax-speech-02-turbo', options) .then(res => res.json()) .then(res => console.log(res)) .catch(err => console.error(err));
```

```
&#x3C;?php$curl = curl_init();curl_setopt_array($curl, [ CURLOPT_URL => "https://api.novita.ai/v3/minimax-speech-02-turbo", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode([ 'text' => '&#x3C;string>', 'voice_setting' => [ 'speed' => 123, 'vol' => 123, 'pitch' => 123, 'voice_id' => '&#x3C;string>', 'emotion' => '&#x3C;string>', 'text_normalization' => true ], 'audio_setting' => [ 'sample_rate' => 123, 'bitrate' => 123, 'format' => '&#x3C;string>', 'channel' => 123 ], 'pronunciation_dict' => [ 'tone' => [ [ ] ] ], 'timbre_weights' => [ [ 'voice_id' => '&#x3C;string>', 'weight' => 123 ] ], 'stream' => true, 'language_boost' => '&#x3C;string>', 'output_format' => '&#x3C;string>', 'voice_modify' => [ 'pitch' => 123, 'intensity' => 123, 'timbre' => 123, 'sound_effects' => '&#x3C;string>' ] ]), CURLOPT_HTTPHEADER => [ "Authorization: &#x3C;authorization>", "Content-Type: &#x3C;content-type>" ],]);$response = curl_exec($curl);$err = curl_error($curl);curl_close($curl);if ($err) { echo "cURL Error #:" . $err;} else { echo $response;}
```

```
package mainimport (	"fmt"	"strings"	"net/http"	"io")func main() {	url := "https://api.novita.ai/v3/minimax-speech-02-turbo"	payload := strings.NewReader("{\n \"text\": \"&#x3C;string>\",\n \"voice_setting\": {\n \"speed\": 123,\n \"vol\": 123,\n \"pitch\": 123,\n \"voice_id\": \"&#x3C;string>\",\n \"emotion\": \"&#x3C;string>\",\n \"text_normalization\": true\n },\n \"audio_setting\": {\n \"sample_rate\": 123,\n \"bitrate\": 123,\n \"format\": \"&#x3C;string>\",\n \"channel\": 123\n },\n \"pronunciation_dict\": {\n \"tone\": [\n {}\n ]\n },\n \"timbre_weights\": [\n {\n \"voice_id\": \"&#x3C;string>\",\n \"weight\": 123\n }\n ],\n \"stream\": true,\n \"language_boost\": \"&#x3C;string>\",\n \"output_format\": \"&#x3C;string>\",\n \"voice_modify\": {\n \"pitch\": 123,\n \"intensity\": 123,\n \"timbre\": 123,\n \"sound_effects\": \"&#x3C;string>\"\n }\n}")	req, _ := http.NewRequest("POST", url, payload)	req.Header.Add("Content-Type", "&#x3C;content-type>")	req.Header.Add("Authorization", "&#x3C;authorization>")	res, _ := http.DefaultClient.Do(req)	defer res.Body.Close()	body, _ := io.ReadAll(res.Body)	fmt.Println(string(body))}
```

```
HttpResponse&#x3C;String> response = Unirest.post("https://api.novita.ai/v3/minimax-speech-02-turbo") .header("Content-Type", "&#x3C;content-type>") .header("Authorization", "&#x3C;authorization>") .body("{\n \"text\": \"&#x3C;string>\",\n \"voice_setting\": {\n \"speed\": 123,\n \"vol\": 123,\n \"pitch\": 123,\n \"voice_id\": \"&#x3C;string>\",\n \"emotion\": \"&#x3C;string>\",\n \"text_normalization\": true\n },\n \"audio_setting\": {\n \"sample_rate\": 123,\n \"bitrate\": 123,\n \"format\": \"&#x3C;string>\",\n \"channel\": 123\n },\n \"pronunciation_dict\": {\n \"tone\": [\n {}\n ]\n },\n \"timbre_weights\": [\n {\n \"voice_id\": \"&#x3C;string>\",\n \"weight\": 123\n }\n ],\n \"stream\": true,\n \"language_boost\": \"&#x3C;string>\",\n \"output_format\": \"&#x3C;string>\",\n \"voice_modify\": {\n \"pitch\": 123,\n \"intensity\": 123,\n \"timbre\": 123,\n \"sound_effects\": \"&#x3C;string>\"\n }\n}") .asString();
```

```
require 'uri'require 'net/http'url = URI("https://api.novita.ai/v3/minimax-speech-02-turbo")http = Net::HTTP.new(url.host, url.port)http.use_ssl = truerequest = Net::HTTP::Post.new(url)request["Content-Type"] = '&#x3C;content-type>'request["Authorization"] = '&#x3C;authorization>'request.body = "{\n \"text\": \"&#x3C;string>\",\n \"voice_setting\": {\n \"speed\": 123,\n \"vol\": 123,\n \"pitch\": 123,\n \"voice_id\": \"&#x3C;string>\",\n \"emotion\": \"&#x3C;string>\",\n \"text_normalization\": true\n },\n \"audio_setting\": {\n \"sample_rate\": 123,\n \"bitrate\": 123,\n \"format\": \"&#x3C;string>\",\n \"channel\": 123\n },\n \"pronunciation_dict\": {\n \"tone\": [\n {}\n ]\n },\n \"timbre_weights\": [\n {\n \"voice_id\": \"&#x3C;string>\",\n \"weight\": 123\n }\n ],\n \"stream\": true,\n \"language_boost\": \"&#x3C;string>\",\n \"output_format\": \"&#x3C;string>\",\n \"voice_modify\": {\n \"pitch\": 123,\n \"intensity\": 123,\n \"timbre\": 123,\n \"sound_effects\": \"&#x3C;string>\"\n }\n}"response = http.request(request)puts response.read_body
```

200

```
{
"audio": "&#x3C;string>",
"status": 123
}
```

This API supports synchronous text-to-speech (TTS) generation, with a maximum input length of 10,000 characters per request. It offers over 100 system and cloned voices, with customizable parameters including volume, pitch, speed, and output format. The API supports proportional voice mixing, fixed interval control, and multiple audio formats such as mp3, pcm, flac, and wav. Streaming output is also supported.
When submitting a long-text TTS request, please note that the returned audio URL is valid for 24 hours from the time it is generated. Be sure to download the audio within this period.

Best suited for short sentence generation, voice chat, and online social scenarios. Processing is fast, but the text length is limited to less than 10,000 characters. For long-form text, we recommend using [asynchronous TTS synthesis](/docs/api-reference/model-apis-minimax-speech-02-turbo-async).

##

[​](#request-headers)

Request Headers

[​](#param-content-type)

Content-Type

string

required

Enum: `application/json`

[​](#param-authorization)

Authorization

string

required

Bearer authentication format, for example: Bearer {{API Key}}.

##

[​](#request-body)

Request Body

[​](#param-text)

text

string

required

The text to be synthesized. The length must be less than 10,000 characters. Use line breaks to separate paragraphs.

To control the pause duration between speech segments, insert `<#x#>` between words or sentences, where `x` is the pause duration in seconds (supports 0.01–99.99, up to two decimal places).

Custom speech pauses between text segments are supported, allowing you to control the timing of pauses in the generated audio.

Note: Pause markers must be placed between two segments that can be pronounced, and multiple consecutive pause markers are not allowed.

[​](#param-voice-setting)

voice_setting

object

required

Show properties

[​](#param-speed)

speed

float

default:"1.0"

Range: [0.5, 2], default is 1.0Controls the speech rate of the generated audio. Optional. Higher values result in faster speech.

[​](#param-vol)

vol

float

default:"1.0"

Range: (0, 10], default is 1.0Controls the volume of the generated audio. Optional. Higher values result in louder audio.

[​](#param-pitch)

pitch

int

default:"0"

Range: [-12, 12], default is 0Controls the pitch of the generated audio. Optional. 0 means original timbre. The value must be an integer.

[​](#param-voice-id)

voice_id

string

The requested timbre ID. Required (choose either this or timbre_weights).Supports both system voices (ID) and cloned voices (ID). The available system voice IDs are as follows:

- Wise_Woman

- Friendly_Person

- Inspirational_girl

- Deep_Voice_Man

- Calm_Woman

- Casual_Guy

- Lively_Girl

- Patient_Man

- Young_Knight

- Determined_Man

- Lovely_Girl

- Decent_Boy

- Imposing_Manner

- Elegant_Man

- Abbess

- Sweet_Girl_2

- Exuberant_Girl

[​](#param-emotion)

emotion

string

Controls the emotion of the synthesized speech.Currently supports 7 emotions: happy, sad, angry, fearful, disgusted, surprised, neutral.Allowed values: `["happy", "sad", "angry", "fearful", "disgusted", "surprised", "neutral"]`

[​](#param-text-normalization)

text_normalization

bool

default:"false"

This parameter supports English text normalization, which improves performance in number-reading scenarios, but this comes at the cost of a slight increase in latency. If not provided, the default is false.

[​](#param-audio-setting)

audio_setting

object

Show properties

[​](#param-sample-rate)

sample_rate

number

default:32000

Range: [8000, 16000, 22050, 24000, 32000, 44100]The sample rate of the generated audio. Optional, default is 32000.

[​](#param-bitrate)

bitrate

number

default:128000

Range: [32000, 64000, 128000, 256000]The bitrate of the generated audio. Optional, default is 128000. This parameter only applies to mp3 audio format.

[​](#param-format)

format

string

default:"mp3"

The audio format of the output. Default is mp3. Options: `mp3`, `pcm`, `flac`, `wav`. wav is only supported for non-streaming output.

[​](#param-channel)

channel

number

default:1

Number of audio channels. Default is 1 (mono). Options:1: mono2: stereo

[​](#param-pronunciation-dict)

pronunciation_dict

object

Show properties

[​](#param-tone)

tone

list

Replacement of text, symbols and corresponding pronunciations that require manual handling.
Replace the pronunciation (adjust the tone/replace the pronunciation of other characters) using the following format:[“omg/oh my god”]For Chinese texts, tones are replaced by numbers, with 1 for the first tone (high), 2 for the second tone (rising), 3 for the third tone (low/dipping), 4 for the fourth tone (falling), and 5 for the fifth tone (neutral).

[​](#param-timbre-weights)

timbre_weights

object[]

Required if voice_id is not provided (choose one of the two).

Show properties

[​](#param-voice-id-1)

voice_id

string

The requested timbre ID. Must be provided together with the weight parameter.

[​](#param-weight)

weight

number

Range: [1, 100]The weight, must be provided together with voice_id. Up to 4 timbres can be mixed. The value must be an integer. The higher the proportion for a single timbre, the more the synthesized voice will resemble it.

[​](#param-stream)

stream

boolean

default:"false"

Whether to enable streaming. Default is false, i.e., streaming is disabled.

[​](#param-language-boost)

language_boost

string

default:"null"

Enhances recognition of specified minor languages and dialects. Setting this parameter can improve speech performance in the specified language/dialect scenarios. If the minor language type is not clear, you can set it to “auto” and the model will automatically determine the language type. Supported values:`'Chinese', 'Chinese,Yue', 'English', 'Arabic', 'Russian', 'Spanish', 'French', 'Portuguese', 'German', 'Turkish', 'Dutch', 'Ukrainian', 'Vietnamese', 'Indonesian', 'Japanese', 'Italian', 'Korean', 'Thai', 'Polish', 'Romanian', 'Greek', 'Czech', 'Finnish', 'Hindi', 'Bulgarian', 'Danish', 'Hebrew', 'Malay', 'Persian', 'Slovak', 'Swedish', 'Croatian', 'Filipino', 'Hungarian', 'Norwegian', 'Slovenian', 'Catalan', 'Nynorsk', 'Tamil', 'Afrikaans', 'auto'`

[​](#param-output-format)

output_format

string

default:"hex"

Controls the output format of the result. Optional values are `url` and `hex`. The default is `hex`. This parameter only takes effect in non-streaming scenarios; in streaming mode, only hex format is supported. The returned URL is valid for 24 hours.

[​](#param-voice-modify)

voice_modify

object

Voice FX settings. Supported audio formats for this parameter:

- Non-streaming: mp3, wav, flac

- Streaming: mp3

Show properties

[​](#param-pitch-1)

pitch

integer

Pitch adjustment (darker/brighter). Range: [-100, 100]. Values closer to -100 generate a deeper (darker) voice; values closer to 100 produce a brighter voice.

[​](#param-intensity)

intensity

integer

Intensity adjustment (powerful/soft). Range: [-100, 100]. Values closer to -100 generate a more powerful sound; values closer to 100 result in a softer sound.

[​](#param-timbre)

timbre

integer

Timbre adjustment (magnetic/crisp). Range: [-100, 100]. Values closer to -100 make the voice more full/magnetic; values closer to 100 make it crisper.

[​](#param-sound-effects)

sound_effects

string

Sound effect setting (only one may be selected per request). Valid values:

- `spacious_echo` (large space echo)

- `auditorium_echo` (auditorium broadcast)

- `lofi_telephone` (telephone distortion)

- `robotic` (robotic effect)

##

[​](#response)

Response

[​](#param-audio)

audio

string

The synthesized audio segment, encoded in hex and generated in the format specified by `audio_setting.format` (mp3/pcm/flac). The return format is determined by the `output_format` parameter. When `stream` is true, only hex format is supported.

[​](#param-status)

status

number

The current status of the audio stream. Returned only when `stream` is true. 1 indicates synthesis in progress, 2 indicates synthesis completed.

##

[​](#example)

Example

Below is an example of how to use the Minimax Speech-02-turbo synchronous API.

- Non-streaming (`stream` is false)

If `output_format` is not set to `url`, the default return format is hex.

`Request:`

```
curl \
-X POST https://api.novita.ai/v3/minimax-speech-02-turbo \
-H "Authorization: Bearer $your_api_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Audio generation technology is evolving rapidly, enabling the creation of speech, music, and sound effects from text or data inputs. It supports applications in media, accessibility, customer service, and content creation. With improved quality and customization, these tools are increasingly integrated into digital platforms across various industries.",
"stream": false,
"output_format": "url",
"voice_setting": {
"speed": 1.1,
"voice_id": "Wise_Woman",
"emotion": "happy"
}
}'
```

`Response:`

```
{
"audio": "https://faas-minimax-audio-v2.s3.ap-southeast-1.amazonaws.com/test/60af5b60-5159-421e-9d60-018e6bec4112-9086e96a-dbd1-4588-b025-608312e07244.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIASVPYCN6LRCW3SOUV%2F20250710%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20250710T113309Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&x-id=GetObject&X-Amz-Signature=d6e233425b6ab26c772820135394bbd474beaaeb03e1982f659f7e5583bfcab7"
}
```

`Audio file:`

- Streaming (`stream` is true)

`Request:`

```
curl \
-X POST https://api.novita.ai/v3/minimax-speech-02-turbo \
-H "Authorization: Bearer $your_api_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Audio generation technology is evolving rapidly, enabling the creation of speech, music, and sound effects from text or data inputs. It supports applications in media, accessibility, customer service, and content creation. With improved quality and customization, these tools are increasingly integrated into digital platforms across various industries.",
"stream": true,
"voice_setting": {
"speed": 1.1,
"voice_id": "Wise_Woman",
"emotion": "happy"
}
}'
```

`Response:`

```
data: {"audio": "fffb98c4d8 ... e12fc5be", "status": 1}
...
data: {"audio": "4944330453 ... 34505005", "status": 1}
...
data: {"audio": "fffb98c45f ... 04f61e30", "status": 1}
...
data: {"status": 2}
```

Last modified on February 5, 2026
