# Model parameters & capabilities

> Part of the ChinaAPI documentation. HTML: https://dash.chinaapi.ai/docs/model-parameters/

What each model actually accepts, taken from the published capability manifest rather than from a vendor page. Support states are the contract: Native is forwarded unchanged, Translated crosses a protocol boundary, Normalized is rewritten before it leaves us, and Not verified means nobody has checked yet — it is not a claim that the field works. Models without a published profile are absent rather than guessed at.

### `doubao-seedance-2-5-260628`

- **Protocols**: openai_video
- **Endpoints**: openai-video
- **Modalities**: text, image → video

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `async_task` | Native | Live-verified | Successful asynchronous tasks are present in the dated production evidence. |
| `generated_audio` | Not verified | Catalogue-declared | Request serialization exists, but acceptance has not been independently verified. |
| `image_to_video` | Not verified | Catalogue-declared | The dated usage records do not retain enough request detail to verify this feature. |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `duration` | integer | Translated | Code-checked | The accepted range and value fidelity have not been independently verified. |
| `image` | string | Translated | Code-checked | → `content[].image_url`; a single image is normalized into the image list and carried as an image_url content item; A single image is normalized into the image list before serialization. |
| `images` | array | Translated | Code-checked | → `content[].image_url`; each URL is carried as one image_url content item; duplicate input_reference values are removed; The accepted item-count range has not been independently verified. |
| `input_reference` | string | Translated | Code-checked | → `content[].image_url`; the reference is appended to the image content list unless the same URL is already present |
| `model` | string | Native | Live-verified | *Required* |
| `prompt` | string | Translated | Live-verified | *Required*; → `content[].text`; the prompt is carried into one text item in the outbound content array |
| `seconds` | string | Normalized | Code-checked | → `duration`; a positive decimal string is converted to an integer duration and takes precedence over duration |

Capability profile `2026-09-04.1` · last verified `2026-09-04`

### `glm-5`

- **Protocols**: openai_chat · anthropic_messages
- **Endpoints**: openai · anthropic
- **Modalities**: text → text

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `prompt_cache` | Not verified | Catalogue-declared |  |
| `reasoning` | Not verified | Catalogue-declared |  |
| `streaming` | Native | Code-checked |  |
| `structured_output` | Not verified | Catalogue-declared |  |
| `tools` | Not verified | Catalogue-declared |  |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `max_completion_tokens` | integer | Translated | Code-checked | → `max_tokens`; ✕ `max_tokens`; The upstream has no such field; the gateway carries it across as max_tokens. When you send both, this one wins. |
| `max_tokens` | integer | Not verified | Catalogue-declared | ✕ `max_completion_tokens`; Forwarded unchanged when it is the only limit you send. Send max_completion_tokens as well and that one replaces it. Whether the model honours the value is not yet verified. |
| `messages` | array | Native | Code-checked | *Required* |
| `model` | string | Native | Code-checked | *Required*; The catalogue's exact model id. Vendor-side aliases are not accepted. |
| `stream` | boolean | Native | Code-checked |  |
| `temperature` | number | Not verified | Catalogue-declared | Forwarded unchanged. The accepted range, and whether the model honours every value in it, are not yet verified — which is why this is not published as native. |
| `top_p` | number | Normalized | Code-checked | top_p >= 1 is rewritten to 0.99 before the request leaves us; The gateway clamps this value before the request leaves us, so a request can be served with a value you did not send. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-5-turbo`

- **Protocols**: openai_chat · anthropic_messages
- **Endpoints**: openai · anthropic
- **Modalities**: text → text

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `prompt_cache` | Not verified | Catalogue-declared |  |
| `reasoning` | Not verified | Catalogue-declared |  |
| `streaming` | Native | Code-checked |  |
| `structured_output` | Not verified | Catalogue-declared |  |
| `tools` | Not verified | Catalogue-declared |  |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `max_completion_tokens` | integer | Translated | Code-checked | → `max_tokens`; ✕ `max_tokens`; The upstream has no such field; the gateway carries it across as max_tokens. When you send both, this one wins. |
| `max_tokens` | integer | Not verified | Catalogue-declared | ✕ `max_completion_tokens`; Forwarded unchanged when it is the only limit you send. Send max_completion_tokens as well and that one replaces it. Whether the model honours the value is not yet verified. |
| `messages` | array | Native | Code-checked | *Required* |
| `model` | string | Native | Code-checked | *Required*; The catalogue's exact model id. Vendor-side aliases are not accepted. |
| `stream` | boolean | Native | Code-checked |  |
| `temperature` | number | Not verified | Catalogue-declared | Forwarded unchanged. The accepted range, and whether the model honours every value in it, are not yet verified — which is why this is not published as native. |
| `top_p` | number | Normalized | Code-checked | top_p >= 1 is rewritten to 0.99 before the request leaves us; The gateway clamps this value before the request leaves us, so a request can be served with a value you did not send. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-5.1`

- **Protocols**: openai_chat · anthropic_messages · gemini_generate_content
- **Endpoints**: openai · anthropic · gemini
- **Modalities**: text → text

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `prompt_cache` | Not verified | Catalogue-declared |  |
| `reasoning` | Not verified | Catalogue-declared |  |
| `streaming` | Native | Code-checked |  |
| `structured_output` | Not verified | Catalogue-declared |  |
| `tools` | Not verified | Catalogue-declared |  |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `max_completion_tokens` | integer | Translated | Code-checked | → `max_tokens`; ✕ `max_tokens`; The upstream has no such field; the gateway carries it across as max_tokens. When you send both, this one wins. |
| `max_tokens` | integer | Not verified | Catalogue-declared | ✕ `max_completion_tokens`; Forwarded unchanged when it is the only limit you send. Send max_completion_tokens as well and that one replaces it. Whether the model honours the value is not yet verified. |
| `messages` | array | Native | Code-checked | *Required* |
| `model` | string | Native | Code-checked | *Required*; The catalogue's exact model id. Vendor-side aliases are not accepted. |
| `stream` | boolean | Native | Code-checked |  |
| `temperature` | number | Not verified | Catalogue-declared | Forwarded unchanged. The accepted range, and whether the model honours every value in it, are not yet verified — which is why this is not published as native. |
| `top_p` | number | Normalized | Code-checked | top_p >= 1 is rewritten to 0.99 before the request leaves us; The gateway clamps this value before the request leaves us, so a request can be served with a value you did not send. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-5.2`

- **Protocols**: openai_chat · anthropic_messages · gemini_generate_content
- **Endpoints**: openai · anthropic · gemini
- **Modalities**: text → text

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `prompt_cache` | Not verified | Catalogue-declared |  |
| `reasoning` | Not verified | Catalogue-declared |  |
| `streaming` | Native | Code-checked |  |
| `structured_output` | Not verified | Catalogue-declared |  |
| `tools` | Not verified | Catalogue-declared |  |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `max_completion_tokens` | integer | Translated | Code-checked | → `max_tokens`; ✕ `max_tokens`; The upstream has no such field; the gateway carries it across as max_tokens. When you send both, this one wins. |
| `max_tokens` | integer | Not verified | Catalogue-declared | ✕ `max_completion_tokens`; Forwarded unchanged when it is the only limit you send. Send max_completion_tokens as well and that one replaces it. Whether the model honours the value is not yet verified. |
| `messages` | array | Native | Code-checked | *Required* |
| `model` | string | Native | Code-checked | *Required*; The catalogue's exact model id. Vendor-side aliases are not accepted. |
| `stream` | boolean | Native | Code-checked |  |
| `temperature` | number | Not verified | Catalogue-declared | Forwarded unchanged. The accepted range, and whether the model honours every value in it, are not yet verified — which is why this is not published as native. |
| `top_p` | number | Normalized | Code-checked | top_p >= 1 is rewritten to 0.99 before the request leaves us; The gateway clamps this value before the request leaves us, so a request can be served with a value you did not send. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-5.3`

- **Protocols**: openai_chat · anthropic_messages
- **Endpoints**: openai · anthropic
- **Modalities**: text → text

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `prompt_cache` | Not verified | Catalogue-declared |  |
| `reasoning` | Not verified | Catalogue-declared |  |
| `streaming` | Native | Code-checked |  |
| `structured_output` | Not verified | Catalogue-declared |  |
| `tools` | Not verified | Catalogue-declared |  |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `max_completion_tokens` | integer | Translated | Code-checked | → `max_tokens`; ✕ `max_tokens`; The upstream has no such field; the gateway carries it across as max_tokens. When you send both, this one wins. |
| `max_tokens` | integer | Not verified | Catalogue-declared | ✕ `max_completion_tokens`; Forwarded unchanged when it is the only limit you send. Send max_completion_tokens as well and that one replaces it. Whether the model honours the value is not yet verified. |
| `messages` | array | Native | Code-checked | *Required* |
| `model` | string | Native | Code-checked | *Required*; The catalogue's exact model id. Vendor-side aliases are not accepted. |
| `stream` | boolean | Native | Code-checked |  |
| `temperature` | number | Not verified | Catalogue-declared | Forwarded unchanged. The accepted range, and whether the model honours every value in it, are not yet verified — which is why this is not published as native. |
| `top_p` | number | Normalized | Code-checked | top_p >= 1 is rewritten to 0.99 before the request leaves us; The gateway clamps this value before the request leaves us, so a request can be served with a value you did not send. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-5.3-flash`

- **Protocols**: openai_chat · anthropic_messages
- **Endpoints**: openai · anthropic
- **Modalities**: text → text

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `prompt_cache` | Not verified | Catalogue-declared |  |
| `reasoning` | Not verified | Catalogue-declared |  |
| `streaming` | Native | Code-checked |  |
| `structured_output` | Not verified | Catalogue-declared |  |
| `tools` | Not verified | Catalogue-declared |  |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `max_completion_tokens` | integer | Translated | Code-checked | → `max_tokens`; ✕ `max_tokens`; The upstream has no such field; the gateway carries it across as max_tokens. When you send both, this one wins. |
| `max_tokens` | integer | Not verified | Catalogue-declared | ✕ `max_completion_tokens`; Forwarded unchanged when it is the only limit you send. Send max_completion_tokens as well and that one replaces it. Whether the model honours the value is not yet verified. |
| `messages` | array | Native | Code-checked | *Required* |
| `model` | string | Native | Code-checked | *Required*; The catalogue's exact model id. Vendor-side aliases are not accepted. |
| `stream` | boolean | Native | Code-checked |  |
| `temperature` | number | Not verified | Catalogue-declared | Forwarded unchanged. The accepted range, and whether the model honours every value in it, are not yet verified — which is why this is not published as native. |
| `top_p` | number | Normalized | Code-checked | top_p >= 1 is rewritten to 0.99 before the request leaves us; The gateway clamps this value before the request leaves us, so a request can be served with a value you did not send. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-5v-turbo`

- **Protocols**: openai_chat · anthropic_messages
- **Endpoints**: openai · anthropic
- **Modalities**: text, image → text

| Capability | Support | Evidence | Notes |
|---|---|---|---|
| `prompt_cache` | Not verified | Catalogue-declared |  |
| `reasoning` | Not verified | Catalogue-declared |  |
| `streaming` | Native | Code-checked |  |
| `structured_output` | Not verified | Catalogue-declared |  |
| `tools` | Not verified | Catalogue-declared |  |

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `max_completion_tokens` | integer | Translated | Code-checked | → `max_tokens`; ✕ `max_tokens`; The upstream has no such field; the gateway carries it across as max_tokens. When you send both, this one wins. |
| `max_tokens` | integer | Not verified | Catalogue-declared | ✕ `max_completion_tokens`; Forwarded unchanged when it is the only limit you send. Send max_completion_tokens as well and that one replaces it. Whether the model honours the value is not yet verified. |
| `messages` | array | Native | Code-checked | *Required* |
| `model` | string | Native | Code-checked | *Required*; The catalogue's exact model id. Vendor-side aliases are not accepted. |
| `stream` | boolean | Native | Code-checked |  |
| `temperature` | number | Not verified | Catalogue-declared | Forwarded unchanged. The accepted range, and whether the model honours every value in it, are not yet verified — which is why this is not published as native. |
| `top_p` | number | Normalized | Code-checked | top_p >= 1 is rewritten to 0.99 before the request leaves us; The gateway clamps this value before the request leaves us, so a request can be served with a value you did not send. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-asr-2512`

- **Protocols**: openai_audio_transcription
- **Endpoints**: audio-transcription
- **Modalities**: audio → text

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `file` | file | Native | Live-verified | *Required* |
| `model` | string | Native | Live-verified | *Required* |
| `response_format` | string | Not verified | Catalogue-declared |  |

Capability profile `2026-09-04.1` · last verified `2026-08-27`

### `glm-tts`

- **Protocols**: openai_audio_speech
- **Endpoints**: audio-speech
- **Modalities**: text → audio

| Field | Type | Support | Evidence | Notes |
|---|---|---|---|---|
| `input` | string | Native | Live-verified | *Required* |
| `model` | string | Native | Live-verified | *Required* |
| `response_format` | string | Normalized | Live-verified | `pcm` / `wav`; an omitted response_format is filled in with this model's published default before the request leaves us; This model does not accept mp3. Omitting the format returns raw PCM, which most audio players cannot play — send a supported format explicitly. |
| `voice` | string | Native | Live-verified | `tongtong`; Leave it blank to get the published default voice. |

Capability profile `2026-09-04.1` · last verified `2026-08-27`
