# MiniMax Speech 02 Turbo — Text To Audio > Access Speech 2 Turbo — a fast Speech Turbo api for text to speech. High-quality Speech 2 voice generation with affordable pricing. Get Speech api access now! ## Overview - **Endpoint**: `POST https://gptproto.com/api/v3/minimax/speech-02-turbo/text-to-audio` - **Result URL**: `GET https://gptproto.com/api/v3/predictions/{result_id}/result` — the submit response also returns the authoritative URL in `data.urls.get` - **Model ID**: `speech-02-turbo` - **Vendor**: MiniMax - **Scene**: `text-to-audio` - **Category**: text-to-audio - **Modalities**: input text → output audio - **Playground**: https://gptproto.com/model/minimax/speech-02-turbo - **API documentation**: https://docs.gptproto.com ## Authentication Every request needs a GPTProto API key in the `Authorization` header. Create one at https://gptproto.com/dashboard/api-key, then export it: ```bash export GPTPROTO_API_KEY="your-api-key" ``` Header: `Authorization: Bearer $GPTPROTO_API_KEY` (plus `Content-Type: application/json` on POST). ## Pricing Platform price by tier (USD, already includes the GPTProto discount): - **Per run** — $0.002 per run Price range: $0.002 – $0.002 per generation. Prices may change. The model page always shows the live price: https://gptproto.com/model/minimax/speech-02-turbo ## API Information The API is asynchronous: POST the endpoint to create a prediction, then poll its result URL until `status` is `completed` or `failed`. ### Input Schema The endpoint accepts the following JSON body parameters: - **`text`** (`string`, _required_): Text to convert to speech. Every character is 1 token. Maximum 10000 characters. Use <# #> between words to control pause duration (0.01-999.99s). - Default: `Hello world! This is a test of the text-to-speech system.` - **`voice_id`** (`enum`, _required_): Select the voice style for TTS. - Default: `Wise_Woman` - Options: 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 - **`speed`** (`range`, _optional_): Speech speed. Range: 0.5–2.0, where 1.0 is normal speed. - Default: `1` - Range: 0.5–2 - **`volume`** (`range`, _optional_): Speech volume. Range: 0.1-10.0, where 1.0 is normal volume. - Default: `1` - Range: 0.1–10 - **`pitch`** (`range`, _optional_): Speech pitch. Range: -12 to 12, where 0 is normal pitch. - Default: `0` - Range: -12–12 - **`emotion`** (`enum`, _optional_): The emotion of the generated speech. - Default: `happy` - Options: happy, sad, angry, fearful, disgusted, surprised, neutral - **`english_normalization`** (`boolean`, _optional_): This parameter supports English text normalization, which improves performance in number-reading scenarios. - Options: true, false - **`sample_rate`** (`enum`, _optional_): Sample rate of generated sound. - Default: `8000` - Options: 8000, 16000, 22050, 24000, 32000, 44100 - **`bitrate`** (`enum`, _optional_): Bitrate of generated sound. - Default: `32000` - Options: 32000, 64000, 128000, 256000 - **`channel`** (`enum`, _optional_): The number of channels of the generated audio. 1: mono, 2: stereo. - Default: `1` - Options: 1, 2 - **`format`** (`enum`, _optional_): Format of generated sound. - Default: `mp3` - Options: mp3, wav, pcm, flac - **`language_boost`** (`enum`, _optional_): Enhance the ability to recognize specified languages and dialects. - Default: `English` - Options: 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, auto - **`enable_sync_mode`** (`boolean`, _optional_): If set to true, the function will wait for the result to be generated and uploaded before returning the response. It allows you to get the result directly in the response. This property is only available through the API. - Options: true, false **Required Parameters Example**: ```json { "text": "Hello world! This is a test of the text-to-speech system.", "voice_id": "Wise_Woman" } ``` **Full Example**: ```json { "text": "Hello world! This is a test of the text-to-speech system.", "voice_id": "Wise_Woman", "speed": 1, "volume": 1, "pitch": "0", "emotion": "happy", "english_normalization": false, "sample_rate": 8000, "bitrate": 32000, "channel": "1", "format": "mp3", "language_boost": "English", "enable_sync_mode": "" } ``` ### Output Schema Both submit and poll return the same envelope: - **`data.id`** (`string`): Prediction id. Use it as `result_id` when polling for the result. - **`data.status`** (`string`): One of `created`, `running`, `completed`, `failed`. See Status Values below. - **`data.outputs`** (`array of string`): Generated files. Empty until `status` is `completed`; then it holds the output URLs (or base64 strings when the model exposes a base64 option). - **`data.urls.get`** (`string`): Authoritative result URL for this prediction. Prefer it over building the poll URL yourself. - **`data.error`** (`string | null`): Failure reason when `status` is `failed`, otherwise `null`. - **`data.executionTime`** (`integer`): Total processing time in milliseconds. - **`data.timings.inference`** (`integer`): Model inference time in milliseconds. - **`data.hasNsfwContents`** (`array of boolean`): Per-output moderation flags. - **`message`** (`string`): `success` on a normal response, otherwise the error message. - **`code`** (`integer`): Business status code. `200` means the request was accepted. **Example Response — submit (task accepted)**: ```json { "data": { "id": "pred_example_01", "model": "speech-02-turbo", "outputs": [], "urls": { "get": "https://gptproto.com/api/v3/predictions/pred_example_01/result" }, "hasNsfwContents": [], "status": "created", "createdAt": "2026-01-01T12:00:00Z", "executionTime": 0, "timings": { "inference": 0 } }, "message": "success", "code": 200 } ``` **Example Response — poll (completed)**: ```json { "data": { "id": "pred_example_01", "model": "speech-02-turbo", "outputs": [ "https://oss-us.gptproto.com/example/output.mp3" ], "urls": { "get": "https://gptproto.com/api/v3/predictions/pred_example_01/result" }, "status": "completed", "error": null, "executionTime": 12345, "timings": { "inference": 12000 }, "has_nsfw_contents": [], "created_at": "2026-01-01T12:00:00Z" }, "message": "success", "code": 200 } ``` ### Status Values - `created` — Task accepted. Use `data.id` as `result_id` for polling. - `running` — Generation is in progress. Keep polling. - `completed` — Finished successfully. Generated files are in `data.outputs`. - `failed` — Generation failed. Read `data.error` for the reason. ## Usage Examples ### 1. Submit a request ```bash curl --request POST "https://gptproto.com/api/v3/minimax/speech-02-turbo/text-to-audio" \ --header "Authorization: Bearer $GPTPROTO_API_KEY" \ --header "Content-Type: application/json" \ --data '{ "text": "Hello world! This is a test of the text-to-speech system.", "voice_id": "Wise_Woman", "speed": 1, "volume": 1, "pitch": "0", "emotion": "happy", "english_normalization": false, "sample_rate": 8000, "bitrate": 32000, "channel": "1", "format": "mp3", "language_boost": "English", "enable_sync_mode": "" }' ``` ```python import os import requests url = "https://gptproto.com/api/v3/minimax/speech-02-turbo/text-to-audio" headers = { "Authorization": f"Bearer {os.environ['GPTPROTO_API_KEY']}", "Content-Type": "application/json" } payload = { "text": "Hello world! This is a test of the text-to-speech system.", "voice_id": "Wise_Woman", "speed": 1, "volume": 1, "pitch": "0", "emotion": "happy", "english_normalization": False, "sample_rate": 8000, "bitrate": 32000, "channel": "1", "format": "mp3", "language_boost": "English", "enable_sync_mode": "" } response = requests.request("POST", url, headers=headers, json=payload) print(response.json()) ``` ```typescript const response = await fetch("https://gptproto.com/api/v3/minimax/speech-02-turbo/text-to-audio", { method: "POST", headers: { "Authorization": `Bearer ${process.env.GPTPROTO_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ text: "Hello world! This is a test of the text-to-speech system.", voice_id: "Wise_Woman", speed: 1, volume: 1, pitch: "0", emotion: "happy", english_normalization: false, sample_rate: 8000, bitrate: 32000, channel: "1", format: "mp3", language_boost: "English", enable_sync_mode: "", }), }); const data = await response.json(); console.log(data); ``` ### 2. Poll until the task finishes Replace `YOUR_RESULT_ID` with `data.id` from the submit response (or call `data.urls.get` directly), and keep polling every 1–3 seconds while `status` is `created` or `running`. ```bash result_id="YOUR_RESULT_ID" curl --request GET "https://gptproto.com/api/v3/predictions/$result_id/result" \ --header "Authorization: Bearer $GPTPROTO_API_KEY" ``` ```python import os import requests result_id = "YOUR_RESULT_ID" url = f"https://gptproto.com/api/v3/predictions/{result_id}/result" headers = { "Authorization": f"Bearer {os.environ['GPTPROTO_API_KEY']}" } response = requests.request("GET", url, headers=headers) print(response.json()) ``` ```typescript const result_id = "YOUR_RESULT_ID"; const response = await fetch(`https://gptproto.com/api/v3/predictions/${result_id}/result`, { method: "GET", headers: { "Authorization": `Bearer ${process.env.GPTPROTO_API_KEY}`, }, }); const data = await response.json(); console.log(data); ``` ## Example Prompts - I thought… I really thought we were all going together. Why did they leave me out? - No way! You promised we’d all be treated fairly, and now you’re just changing the rules?! That’s not okay! - Hello world! This is a test of the text-to-speech system. ## HTTP Status Codes - `400` — malformed body, a parameter or value this model does not accept, or input blocked by the provider's content moderation - `401` — missing or invalid API key - `403` — insufficient credits - `413` — request body too large - `429` — rate limited; retry with backoff - `500` — An internal server error occurred - `502` — An internal server error occurred - `504` — Gateway timeout — upstream service did not respond in time; retry later ## Additional Resources - [Model playground](https://gptproto.com/model/minimax/speech-02-turbo) - [API documentation](https://docs.gptproto.com) - [All models](https://gptproto.com/model) - [API keys](https://gptproto.com/dashboard/api-key) - [Platform overview for LLMs](https://gptproto.com/llm-full.txt) - Any other model: `https://gptproto.com/model/{vendor}/{model}/{scene}/llms.txt`