# Text to speech

> Part of the ChinaAPI documentation. HTML: https://dash.chinaapi.ai/docs/api/text-to-speech/

`POST /v1/audio/speech` returns the audio itself, not JSON: the body is the encoded file and `Content-Type` follows `response_format`, so `mp3` comes back as `audio/mpeg`. `model`, `input` and `voice` are the fields that matter; `speed` and `instructions` are optional, and each model publishes its own voice names. Write the response straight to a file — decoding it as text will corrupt it.

**POST /v1/audio/speech**

```
curl https://api.chinaapi.ai/v1/audio/speech \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "step-tts-2",
    "input": "ChinaAPI text to speech verification.",
    "voice": "cixingnansheng",
    "response_format": "mp3"
  }' \
  --output speech.mp3

# HTTP 200, Content-Type: audio/mpeg
```

## step-tts-2 — Voice cloning

With `step-tts-mini` and `stepaudio-2.5-tts`. All three clone a voice from roughly ten seconds of reference audio and take emotion and delivery as natural-language direction. `step-tts-mini` is the low-latency, low-cost member.

## speech-2.8-hd — High definition

With `speech-2.8-turbo`. The `hd` variant is the highest-fidelity option on this endpoint and prices accordingly; `turbo` trades some of that for latency at roughly half the rate.

## qwen3-tts-flash — Multilingual

With `glm-tts`. Both are multilingual and priced below the cloning models, which makes them the sensible default when you do not need a specific cloned voice.

> [!NOTE]
> Default voices
>
> Omitting `voice` is safe: each model has a default we send for you — `Cherry` on `qwen3-tts-flash`, `tongtong` on `glm-tts`, `cixingnansheng` on `step-tts-2`, `step-tts-mini` and `stepaudio-2.5-tts`, and `alloy` on `mimo-v2.5-tts` and both `speech-2.8` models. OpenAI's own voice names are accepted everywhere; on the Chinese models they fold to that model's default rather than being rejected, so pointing an existing OpenAI client at this endpoint works unchanged. These are defaults, not the full roster — each vendor publishes more. Two variants take no voice name at all: `mimo-v2.5-tts-voiceclone` reads a reference clip from `voice` as a data URL, and `mimo-v2.5-tts-voicedesign` takes the description in `instructions` instead.

> [!NOTE]
> Tip
>
> Billing counts the characters of `input`, one character to one token, so the cost is known before you send the request. The generated audio is measured too and appears as completion tokens at a thousand tokens to the minute, but it is charged at a rate of zero — a fifty-nine character request that produced about five seconds of speech logged 59 prompt tokens, 83 completion tokens, and was billed on the 59. Punctuation and spaces count as characters.
