# MiniMax Speech 2.8 Turbo (speech-2-8-turbo) Vendor: MiniMax Model ID: `speech-2-8-turbo` Base URL: `https://api.mulerouter.ai` Type: Inference API (async task-based) ## Description Fast text-to-speech model with 40+ languages, emotion control, voice modification, and interjection tags support ## Variant: Create Speech Generation Task Endpoint: `POST /vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation` ### Input Schema The API accepts the following input parameters: - **`prompt`** (`string`, _required_): Text to convert to speech. Use <#x#> for pauses (x = 0.01-99.99 seconds). Supports interjection tags: (laughs), (sighs), (coughs), (clears throat), (gasps), (sniffs), (groans), (yawns). - Max length: 50000 - **`voice_modify`** (`object`, _optional_): Voice modification settings. - **`pitch`** (`integer`, _optional_): Pitch adjustment. Range: -100 to 100. - Default: `0` - Range: `-100` to `100` - **`timbre`** (`integer`, _optional_): Timbre adjustment. Range: -100 to 100. - Default: `0` - Range: `-100` to `100` - **`intensity`** (`integer`, _optional_): Intensity/energy of the voice. Range: -100 to 100. - Default: `0` - Range: `-100` to `100` - **`audio_setting`** (`object`, _optional_): Audio output configuration. - **`format`** (`string`, _optional_): Audio format. - Options: `"mp3"`, `"pcm"`, `"flac"` - Default: `"mp3"` - **`bitrate`** (`integer`, _optional_): Bitrate of generated audio (bps). - Options: `32000`, `64000`, `128000`, `256000` - Default: `128000` - **`channel`** (`integer`, _optional_): Number of audio channels (1=mono, 2=stereo). - Options: `1`, `2` - Default: `1` - **`sample_rate`** (`integer`, _optional_): Sample rate of generated audio (Hz). - Options: `8000`, `16000`, `22050`, `24000`, `32000`, `44100` - Default: `32000` - **`output_format`** (`string`, _optional_): Format of the output content. Default: hex. - Options: `"url"`, `"hex"` - Default: `"hex"` - **`voice_setting`** (`object`, _optional_): Voice configuration settings. - **`vol`** (`number`, _optional_): Volume, range [0, 10]. - Default: `1` - Range: `0.01` to `10` - **`pitch`** (`integer`, _optional_): Voice pitch, range [-12, 12]. - Default: `0` - Range: `-12` to `12` - **`speed`** (`number`, _optional_): Speech speed, range [0.5, 2.0]. - Default: `1` - Range: `0.5` to `2` - **`emotion`** (`string | null`, _optional_): Emotion of the generated speech. - **`voice_id`** (`string`, _optional_): Voice ID for synthesis. e.g. Chinese: male-qn-qingse, female-shaonv, female-yujie; English: Charming_Lady, English_Trustworthy_Man, English_Graceful_Lady. Supports 327+ system presets across 20+ languages. See docs for full list. - **`english_normalization`** (`boolean`, _optional_): Enables English text normalization to improve number reading performance. - Default: `false` - **`language_boost`** (`string | null`, _optional_): Enhance recognition of specified languages and dialects. - **`pronunciation_dict`** (`object`, _optional_): Custom pronunciation dictionary for text replacement. - **`tone_list`** (`list`, _optional_): List of pronunciation replacements in format ['text/(pronunciation)', ...]. - **`normalization_setting`** (`object`, _optional_): Loudness normalization settings for the audio. - **`enabled`** (`boolean`, _optional_): Enable loudness normalization. - Default: `true` - **`target_peak`** (`number`, _optional_): Target peak level in dBTP. - Default: `-0.5` - Range: `-3` to `0` - **`target_range`** (`number`, _optional_): Target loudness range in LU. - Default: `8` - Range: `0` to `20` - **`target_loudness`** (`number`, _optional_): Target loudness in LUFS. - Default: `-18` - Range: `-70` to `-10` **Required Parameters Example**: ```json { "prompt": "" } ``` **Full Example**: ```json { "prompt": "", "voice_modify": {}, "audio_setting": {}, "output_format": "hex", "voice_setting": {}, "language_boost": null, "pronunciation_dict": {}, "normalization_setting": {} } ``` ## Variant: /vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation/{task_id} Endpoint: `POST /vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation/{task_id}` ## Usage (Async Task API) This model uses an async task-based workflow with two API calls: 1. **Submit a task** — `POST /v1/inference/speech-2-8-turbo` to create a generation task 2. **Poll for result** — `GET /v1/inference/speech-2-8-turbo/{task_id}` to check status and retrieve the result ### Step 1: Submit a Task #### cURL ```bash curl -X POST https://api.mulerouter.ai/vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ -d '{ "prompt": "Your prompt here" }' ``` #### Python ```python import requests API_KEY = "" ENDPOINT = "https://api.mulerouter.ai/vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation" response = requests.post( ENDPOINT, headers={ "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}" }, json={ "prompt": "Your prompt here" } ) result = response.json() task_id = result["task_info"]["id"] print(f"Task created: {task_id}") ``` #### Node.js / TypeScript ```typescript const API_KEY = ""; const ENDPOINT = "https://api.mulerouter.ai/vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation"; const response = await fetch(ENDPOINT, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${API_KEY}` }, body: JSON.stringify({ prompt: "Your prompt here" }) }); const result = await response.json(); const taskId = result.task_info.id; console.log("Task created:", taskId); ``` #### Submit Response (202) ```json { "task_info": { "id": "8e1e315e-b50d-4334-a231-be7d19a372f4", "status": "processing", "created_at": "2026-01-01T00:00:00.000Z" } } ``` ### Step 2: Poll for Result Use the task ID from Step 1 to poll the status endpoint until the task is completed. Endpoint: `GET /v1/inference/speech-2-8-turbo/{task_id}` #### cURL ```bash curl -X GET https://api.mulerouter.ai/vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation/ \ -H "Authorization: Bearer " ``` #### Python ```python import time status_url = f"https://api.mulerouter.ai/vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation/{task_id}" while True: status = requests.get(status_url, headers={ "Authorization": f"Bearer {API_KEY}" }).json() task_status = status["task_info"]["status"] if task_status in ("completed", "succeeded"): print("Result:", status) break elif task_status == "failed": print("Task failed:", status) break time.sleep(5) ``` #### Node.js / TypeScript ```typescript const statusUrl = `https://api.mulerouter.ai/vendors/minimax/v1/speech-2.8-turbo/text-to-speech/generation/${taskId}`; while (true) { const statusRes = await fetch(statusUrl, { headers: { "Authorization": `Bearer ${API_KEY}` } }); const status = await statusRes.json(); const taskStatus = status.task_info.status; if (taskStatus === "completed" || taskStatus === "succeeded") { console.log("Result:", status); break; } else if (taskStatus === "failed") { console.log("Task failed:", status); break; } await new Promise(r => setTimeout(r, 5000)); } ``` ## Additional Resources ### Documentation - [Model Playground](https://www.mulerouter.ai/models/speech-2-8-turbo) - [API Documentation](https://mulerouter.ai/docs/api-reference/endpoint/minimax/speech-2.8-turbo) ### MuleRouter Platform - [Platform Documentation](https://www.mulerouter.ai/docs) - [API Keys Management](https://www.mulerouter.ai/app/api-keys)