# MiniMax Speech 2.8 HD API

> Synthèse vocale haute définition de MiniMax dans plus de 30 langues, avec contrôle des pauses, des émotions et de la prononciation.

MiniMax Speech 2.8 HD vocalise du texte dans plus de 30 langues avec un contrôle précis : marqueurs de pause intégrés, vitesse, hauteur et volume de la voix, dictionnaires de prononciation personnalisés et effets vocaux. Choisissez parmi les voix intégrées, ainsi que la fréquence d’échantillonnage et le format de sortie.

- Model id: `minimax/speech-2.8-hd`
- Made by: MiniMax
- Category: Text to Speech
- Output: audio
- Price: $0.10 / 1000 characters (cheapest run $0.10 (100 API credits))
- Run: `POST https://api.doitong.ru/v1/run/minimax/speech-2.8-hd`
- Quote: `POST https://api.doitong.ru/v1/quote/minimax/speech-2.8-hd`
- Docs page: https://doitong.com/fr-FR/developers/models/minimax/speech-2.8-hd

## Pricing

Price: **$0.10 / 1000 characters**. Billed per character of `prompt` (the price is per 1000 characters).

The full example input below costs $0.008 = 8 API credits (79 characters × 100 API credits / 1000 characters).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.ru/v1/quote/minimax/speech-2.8-hd` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  | 1 – 10000 characters | Texte pour la synthèse vocale, avec des pauses spécifiées par `<#x#>` où x va de 0.01 à 99.99 secondes. Les balises d’interjection disponibles sont `(laughs)`, `(sighs)`, `(coughs)`, `(clears throat)`, `(gasps)`, `(sniffs)`, `(groans)` et `(yawns)`. |
| `voice_setting` |  | object {voice_id, speed, vol, pitch, emotion, english_normalization} | no | `{"english_normalization":false,"pitch":0,"speed":1,"voice_id":"Wise_Woman","vol":1}` |  | Paramètres de configuration de la voix. |
| `voice_setting.voice_id` |  | string | no | `Wise_Woman` | ≥ 1 characters | Identifiant de voix prédéfini utilisé pour la synthèse vocale. |
| `voice_setting.speed` |  | number | no | `1` | 0.5 – 2 | Débit de parole, compris entre 0.5 et 2.0. |
| `voice_setting.vol` |  | number | no | `1` | 0.01 – 10 | Volume de sortie, compris entre 0 et 10. |
| `voice_setting.pitch` |  | integer | no | `0` | -12 – 12 | Hauteur de la voix, comprise entre -12 et 12. |
| `voice_setting.emotion` |  | enum (string) \| null | no |  | `happy`, `sad`, `angry`, `fearful`, `disgusted`, `surprised`, `neutral` | Tonalité émotionnelle de la parole synthétisée. |
| `voice_setting.english_normalization` |  | boolean | no | `false` |  | Option de normalisation du texte anglais qui échange une faible latence supplémentaire contre une meilleure lecture des nombres. |
| `audio_setting` |  | object {sample_rate, bitrate, format, channel} | no |  |  | Paramètres de configuration de l'audio. |
| `audio_setting.sample_rate` |  | enum (integer) | no | `32000` | `8000`, `16000`, `22050`, `24000`, `32000`, `44100` | Fréquence d'échantillonnage de l'audio généré. |
| `audio_setting.bitrate` |  | enum (integer) | no | `128000` | `32000`, `64000`, `128000`, `256000` | Débit binaire de l'audio généré. |
| `audio_setting.format` |  | enum (string) | no | `mp3` | `mp3`, `pcm`, `flac` | Format de l'audio. |
| `audio_setting.channel` |  | enum (integer) | no | `1` | `1`, `2` | Nombre de canaux audio : 1 pour mono ou 2 pour stéréo. |
| `language_boost` |  | enum (string) \| null | no |  | `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`, `Slovak`, `Swedish`, `Croatian`, `Hungarian`, `Norwegian`, `Slovenian`, `Catalan`, `Nynorsk`, `Afrikaans`, `auto` | Améliore la reconnaissance pour les langues et dialectes sélectionnés. |
| `output_format` |  | enum (string) | no | `hex` | `url`, `hex` | Format du contenu de sortie ; s’applique uniquement aux réponses sans streaming. |
| `pronunciation_dict` |  | object {tone_list} \| null | no |  |  | Dictionnaire personnalisé des prononciations utilisé pour remplacer le texte. |
| `pronunciation_dict.tone_list` |  | array of string | no |  |  | Liste de remplacements de prononciation utilisant la syntaxe ['text/(pronunciation)', ...], par exemple ['燕少飞/(yan4)(shao3)(fei1)']. Les nombres de tons chinois vont de 1 à 5. |
| `normalization_setting` |  | object {enabled, target_loudness, target_range, target_peak} | no |  |  | Paramètres contrôlant la normalisation du volume audio. |
| `normalization_setting.enabled` |  | boolean | no | `true` |  | Active la normalisation du volume audio. |
| `normalization_setting.target_loudness` |  | number | no | `-18` | -70 – -10 | Volume souhaité, mesuré en LUFS ; par défaut à -18.0. |
| `normalization_setting.target_range` |  | number | no | `8` | 0 – 20 | Plage de volume souhaitée, mesurée en LU ; par défaut à 8.0. |
| `normalization_setting.target_peak` |  | number | no | `-0.5` | -3 – 0 | Niveau de crête souhaité, mesuré en dBTP ; par défaut à -0.5. |
| `voice_modify` |  | object {pitch, intensity, timbre} \| null | no |  |  | Paramètres permettant de modifier la hauteur, l’intensité et le timbre de la voix. |
| `voice_modify.pitch` |  | integer | no | `0` | -100 – 100 | Contrôle de la hauteur mesuré en demi-tons : utilisez une valeur négative pour abaisser la voix ou une valeur positive pour la relever. Les valeurs autorisées vont de -100 à 100. |
| `voice_modify.intensity` |  | integer | no | `0` | -100 – 100 | Contrôle de l’énergie vocale qui rend la parole plus énergique à mesure que le paramètre augmente. Sa plage autorisée va de -100 à 100. |
| `voice_modify.timbre` |  | integer | no | `0` | -100 – 100 | Réglage du timbre vocal de -100 à 100, contrôlant son caractère tonal. |

## Example input

Required parameters only:

```json
{
  "prompt": "Hello! Welcome to our new studio. <#0.5#> Let's make something wonderful today."
}
```

A fuller example:

```json
{
  "prompt": "Hello! Welcome to our new studio. <#0.5#> Let's make something wonderful today."
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/minimax/speech-2.8-hd?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Hello! Welcome to our new studio. <#0.5#> Let'\''s make something wonderful today."
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.ru/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/minimax/speech-2.8-hd?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "Hello! Welcome to our new studio. <#0.5#> Let's make something wonderful today."
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "Hello! Welcome to our new studio. <#0.5#> Let's make something wonderful today.",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/minimax/speech-2.8-hd", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.ru/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "minimax/speech-2.8-hd",
      "input": {
        "prompt": "Hello! Welcome to our new studio. <#0.5#> Let's make something wonderful today."
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "minimax/speech-2.8-hd",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 8,
    "usd": "0.008",
    "charged": 8,
    "refunded": 0
  },
  "input": {
    "prompt": "Hello! Welcome to our new studio. <#0.5#> Let's make something wonderful today."
  },
  "output": {
    "audio": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp3",
      "content_type": "audio/mpeg",
      "file_name": "0-output.mp3",
      "file_size": 1843200
    },
    "duration_ms": 1
  },
  "outputs": [
    {
      "type": "audio",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp3",
      "content_type": "audio/mpeg",
      "file_size": 1843200,
      "duration": 12,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `audio` | object {url, content_type, file_name, file_size} | Fichier audio produit par la génération. |
| `duration_ms` | integer | Durée de l’audio, mesurée en millisecondes. |

## Related models

- [MiniMax Speech 2.6 \[HD\]](https://doitong.com/developers/models/minimax/speech-2.6-hd.md) (`minimax/speech-2.6-hd`): $0.10 / 1000 characters
- [MiniMax Speech 2.6 \[Turbo\]](https://doitong.com/developers/models/minimax/speech-2.6-turbo.md) (`minimax/speech-2.6-turbo`): $0.06 / 1000 characters
- [MiniMax Speech 2.8 \[Turbo\]](https://doitong.com/developers/models/minimax/speech-2.8-turbo.md) (`minimax/speech-2.8-turbo`): $0.06 / 1000 characters
- [MiniMax Speech-02 HD](https://doitong.com/developers/models/minimax/speech-02-hd.md) (`minimax/speech-02-hd`): $0.10 / 1000 characters
- [MiniMax Speech-02 Turbo](https://doitong.com/developers/models/minimax/speech-02-turbo.md) (`minimax/speech-02-turbo`): $0.06 / 1000 characters
- [MiniMax Voice Cloning](https://doitong.com/developers/models/minimax/voice-clone.md) (`minimax/voice-clone`): $1.5198 / run
- [MiniMax Voice Design](https://doitong.com/developers/models/minimax/voice-design.md) (`minimax/voice-design`): $3.00 / run
- [Eleven v4 Text to Speech](https://doitong.com/developers/models/elevenlabs/tts/eleven-v4.md) (`elevenlabs/tts/eleven-v4`): $0.08 / 1000 characters

## Links

- HTML page: https://doitong.com/developers/models/minimax/speech-2.8-hd
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=minimax/speech-2.8-hd
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/minimax/speech-2.8-hd
