Skip to content

Qwen3.5 Omni Plus

alibaba/qwen3.5-omni-plus — a llm model by Alibaba. Call it through the gateway’s standard OpenAI-compatible door using the catalog slug; the full parameter schema is reproduced in full below.

Catalog slugalibaba/qwen3.5-omni-plus
Kindllm
VendorAlibaba
Context window1,000,000 tokens
Native model idqwen3.5-omni-plus

Through the Sociaro SDK / OpenAI-compatible door

Section titled “Through the Sociaro SDK / OpenAI-compatible door”
from sociaro_ai import Sociaro
client = Sociaro(api_key="gw_live_...") # base_url defaults to https://api.sociaro.com
resp = client.chat.completions.create(
model="alibaba/qwen3.5-omni-plus", # always the catalog slug
messages=[{"role": "user", "content": "Hello"}],
# any parameter from the schema below is passed through unchanged
)
print(resp.choices[0].message.content)

TypeScript: client.chat.completions.create({ model: "alibaba/qwen3.5-omni-plus", messages: [...] }) — see the TypeScript SDK.

Through Alibaba DashScope’s native API (advanced)

Section titled “Through Alibaba DashScope’s native API (advanced)”

Optional: send Alibaba DashScope’s native request to the /alibaba prefix, using the native model id qwen3.5-omni-plus. The gateway injects the upstream Alibaba DashScope credential and forwards the body unchanged (catalog, pricing and entitlements still apply).

Terminal window
curl https://api.sociaro.com/alibaba/<native-path> \
-H "Authorization: Bearer $SOCIARO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "qwen3.5-omni-plus", ... }'

The exact path, request body and response shape are documented in full in the schema below.

The complete, one-to-one API schema for this model, transcribed from the official source. Nothing omitted. Examples in the schema may use a representative model of the family — for this model use the slug alibaba/qwen3.5-omni-plus (or the native id qwen3.5-omni-plus for the native API) as shown in How to call above.

model slughostinginput modalitiesoutput modalitiesthinkingweb searchvoice cloningdefault voicevoice count
qwen3.5-omni-plusModel Studio (OpenAI-compatible)text + (image / audio / video), combinedtext, audionoyes (enable_search, search_strategy=agent)yes (not snapshots)Tina55
qwen3.5-omni-flashModel Studio (OpenAI-compatible)text + (image / audio / video), combinedtext, audionoyes (enable_search, search_strategy=agent)yes (not snapshots)Tina55
qwen3.5-omni-plus-2026-03-15 (snapshot)Model Studioas abovetext, audionoyesnoTina55
qwen3.5-omni-flash-2026-03-15 (snapshot)Model Studioas abovetext, audionoyesnoTina55
qwen3-omni-flash (stable)Model Studiotext + exactly one of (image / audio / video); 1 media filetext, audio (no audio in thinking)yes (enable_thinking)nonoCherry17 (stable == 2025-09-15 set)
qwen3-omni-flash-2025-12-01 (snapshot)Model Studiosame as flashtext, audio (no audio in thinking)yesnonoCherry49
qwen3-omni-flash-2025-09-15 (snapshot)Model Studiosame as flashtext, audio (no audio in thinking)yesnonoCherry17
qwen-omni-turbo (legacy, deprecated)Model Studiotext + one other modalitytext, audionononoChelsie4
qwen3-omni-30b-a3b-captionerOpen-source self-host (HF / ModelScope / vLLM); not a Model Studio hosted endpointaudio only, single file, single-turn, no text prompttext only (no audio, no voice)n/an/an/a

Model names, context windows, exact pricing and the full snapshot list are confirmed in the Model Studio console. Regions: Singapore and Beijing (API keys differ per region).


Critical per-model differences (read first)

Section titled “Critical per-model differences (read first)”
  1. Combined multimodal input (image + audio + video, or any mix, in ONE user message) is supported only by the Qwen3.5-Omni series. qwen3-omni-flash and qwen-omni-turbo accept text + exactly one other modality and only one media file per request.
  2. Thinking mode (enable_thinking) exists only for qwen3-omni-flash within the Omni family. In thinking mode, audio output is not supportedmodalities must be ["text"] and the audio parameter is ignored. Reasoning is streamed in delta.reasoning_content.
  3. Web search (enable_search) is supported only by the Qwen3.5-Omni series (incl. its dated snapshots). For Omni the applicable search_strategy value is agent.
  4. vl_high_resolution_images and the per-frame/per-image pixel knobs that raise the cap to the 16384-token resolution apply to Qwen3.5-Omni. qwen3-omni-flash and qwen-omni-turbo do not support vl_high_resolution_images. Image token density is 1 token per 32×32 px for the Qwen3.5-Omni series and Qwen3-Omni-Flash, and 1 token per 28×28 px for Qwen-Omni-Turbo.
  5. Streaming is mandatory for every hosted Qwen-Omni call: stream=true is required, otherwise the request errors.
  6. Output audio is always PCM 24000 Hz, mono, 16-bit, delivered as base64 fragments in delta.audio.data to be concatenated and decoded. Output audio.format is wav only.
  7. qwen3-omni-30b-a3b-captioner is open-source self-host, not a Model Studio OpenAI-compatible endpoint. Audio-in / text-out only, single audio file, no text prompt, single-turn.
  8. Input limits diverge sharply by series (audio ≤3 h vs ≤20 min vs ≤3 min; video ≤1 h vs ≤150 s vs ≤40 s; files: Qwen3.5-Omni up to 512/2048 vs Flash & Turbo only 1) — see the input-modality tables below.

  • Mode: OpenAI-compatible only (DashScope native mode is not supported for Qwen-Omni).
  • Endpoint: POST {base_url}/chat/completions
  • base_url (Singapore example): https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1 (Beijing region uses a different host/key.)
  • Auth: Authorization: Bearer $DASHSCOPE_API_KEY
  • Min SDK: OpenAI Python ≥ 1.52.0, Node.js ≥ 4.68.0.
  • Hard rule: every hosted Qwen-Omni call MUST set stream: true. Recommended: stream_options: {"include_usage": true} to receive usage in the final chunk.
  • extra_body transport: the following are NOT standard OpenAI params and (with the Python/Node SDK) must be passed inside extra_body: top_k, repetition_penalty, enable_thinking, thinking, thinking_budget, preserve_thinking, reasoning_effort, tool_stream, enable_code_interpreter, enable_search, search_options, vl_high_resolution_images. (Raw HTTP/curl puts them at the top level of the JSON body.)

{
"model": "qwen3.5-omni-plus",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{
"role": "user",
"content": [
{ "type": "text", "text": "Describe the image and the audio." },
{ "type": "image_url", "image_url": { "url": "https://.../pic.jpeg" }, "min_pixels": 24576, "max_pixels": 1310720 },
{ "type": "input_audio", "input_audio": { "data": "https://.../clip.wav", "format": "wav" } },
{ "type": "video_url", "video_url": { "url": "https://.../movie.mp4" }, "fps": 2.0 },
{ "type": "video", "video": ["https://.../frame1.jpg", "https://.../frame2.jpg"], "fps": 2.0 },
{ "type": "text", "text": "concise please", "cache_control": { "type": "ephemeral" } }
]
}
],
"modalities": ["text", "audio"],
"audio": { "voice": "Tina", "format": "wav" },
"stream": true,
"stream_options": { "include_usage": true },
"temperature": 1.0,
"top_p": 1.0,
"top_k": 20,
"presence_penalty": 1.5,
"repetition_penalty": 1.0,
"max_completion_tokens": 2000,
"n": 1,
"seed": 1234,
"stop": null,
"logprobs": false,
"top_logprobs": 0,
"response_format": { "type": "text" },
"tools": [],
"tool_choice": "auto",
"parallel_tool_calls": false,
"enable_thinking": false,
"thinking_budget": 2048,
"enable_search": false,
"search_options": { "forced_search": false, "search_strategy": "agent", "enable_search_extension": false },
"vl_high_resolution_images": false
}

modalities accepts only ["text","audio"] or ["text"]. Thinking mode (qwen3-omni-flash) forces ["text"]. enable_thinking applies only to qwen3-omni-flash; enable_search/search_options only to Qwen3.5-Omni; vl_high_resolution_images only to Qwen3.5-Omni.


Request parameters (one-to-one with the OpenAI-compatible Chat Completions reference)

Section titled “Request parameters (one-to-one with the OpenAI-compatible Chat Completions reference)”
nametyperequireddefaultallowed values / rangedescription & Omni notes
modelstringyeshosted: qwen3.5-omni-plus, qwen3.5-omni-flash (+ snapshots …-2026-03-15), qwen3-omni-flash (+ snapshots …-2025-12-01, …-2025-09-15), qwen-omni-turbo (legacy); open-source: qwen3-omni-30b-a3b-captionerModel name. For exact names/pricing check the console.
messagesarrayyesobjects with role ∈ {system,user,assistant,tool}Conversation history in chronological order. See message-types below.
streambooleanyes for Qwen-Omni (must be true)falsetrue/false; Qwen-Omni rejects non-streamStreaming output. Non-streaming raises an error for Qwen-Omni.
stream_optionsobjectno{ "include_usage": boolean }Effective only when stream=true. include_usage:true ⇒ token usage in the last chunk only.
stream_options.include_usagebooleannofalsetrue/falseInclude usage in the final chunk.
modalitiesarrayno["text"]["text","audio"] or ["text"]Output modalities; Qwen-Omni only. ["text","audio"] enables speech output. Thinking mode forces ["text"].
audioobjectnoobject with voice+formatOutput voice + format; Qwen-Omni only, requires modalities to include "audio". Not supported in thinking mode.
audio.voicestringRequired when audio is setone of the supported voice IDs for the model series (voice tables below) or a cloned-voice IDOutput voice. If omitted, the model uses the series default voice; supply it explicitly.
audio.formatstringRequired when audio is setwav onlyOutput audio container. PCM is 24000 Hz, mono, 16-bit.
temperaturefloatnomodel-specific[0, 2)Sampling temperature. Set only one of temperature/top_p.
top_pfloatnomodel-specific(0, 1.0]Nucleus sampling threshold. Set only one of temperature/top_p.
top_kintegerno50 for the qwen3-omni-flash series; 20 for the other Omni modelsinteger ≥ 0; null or > 100 disables top_k (only top_p applies)Candidate-token count. Non-standard → extra_body.
presence_penaltyfloatno1.5 for Qwen3.5-Omni; 0.0 for the other Omni models[-2.0, 2.0]Penalize already-present content. Positive ↓ repetition; negative ↑.
repetition_penaltyfloatno1.0 (= no penalty)> 0, no strict upper limitConsecutive-sequence repetition control. Non-standard → extra_body.
max_tokensintegerno (Deprecated)model’s max output length (check console)≥ 1Deprecated — use max_completion_tokens for new integrations. Does NOT limit chain-of-thought length. finish_reason=length when hit.
max_completion_tokensintegernomodel’s max output length (check console)≥ 1Replacement for max_tokens. Limits total (chain-of-thought + final response) tokens. Recommended for reasoning models. Actual output may differ by up to ~10 tokens.
nintegerno114Number of choices. Only Qwen3 non-thinking models honor n>1; if tools is passed, set n=1.
seedintegerno— (unset ⇒ non-reproducible)[0, 2^31 − 1]RNG seed for best-effort reproducibility.
stopstring | arraynoa string/token-id, or an array of strings or token-ids (do NOT mix string and token-id in one array)Stop sequences; generation halts when matched.
logprobsbooleannofalsetrue/falseReturn log-probabilities of output tokens. reasoning_content has no logprobs.
top_logprobsintegerno005Number of candidate tokens per step. Effective only when logprobs=true.
response_formatobjectno{"type":"text"}{"type":"text"} or {"type":"json_object"}Output format. For json_object you must also instruct JSON in the prompt.
response_format.typestringRequired in objecttexttext, json_object
toolsarraynoarray of tool objects (see sub-fields)Function-calling tool definitions. When set and the model decides to call, tool_calls is returned.
tools[].typestringRequiredfunction only
tools[].function.namestringRequired[A-Za-z0-9_-], ≤ 64 tokensTool name.
tools[].function.descriptionstringRequiredHelps the model decide when/how to call.
tools[].function.parametersobjectno{}valid JSON SchemaTool input schema; empty ⇒ no params.
tool_choicestring | objectnoautoauto, none, {"type":"function","function":{"name":"<fn>"}}Tool-selection policy. Thinking mode cannot force a specific tool.
parallel_tool_callsbooleannofalsetrue/falseAllow parallel tool calls.
enable_thinkingbooleannofalsetrue/falseHybrid thinking. Within Omni only qwen3-omni-flash. Thinking content returns in reasoning_content; audio output is unsupported in thinking mode (set modalities=["text"]). Non-standard → extra_body.
thinkingobjectno{"type":"adaptive"}thinking.type ∈ {adaptive,disabled}Thinking control for MiniMax/MiniMax-M3 (documented in the same reference; not used by Qwen-Omni). Non-standard → extra_body.
thinking_budgetintegernomodel’s max chain-of-thought length (check console)≥ 1Max reasoning tokens (Qwen3.7/3.6/3.5/Qwen3-VL/Qwen3 incl. open-source). Non-standard → extra_body.
preserve_thinkingbooleannofalsetrue/falseFeed prior assistant reasoning_content back as input (billed). Limited model list (qwen3.x-max/plus, kimi-k2.6/k2.7-code); not documented for Omni. Non-standard → extra_body.
reasoning_effortstringnohighhigh, max (low/mediumhigh, xhighmax)DeepSeek-V4 series reasoning intensity (documented in same reference; not for Omni). Non-standard → extra_body.
tool_streambooleannofalsetrue/false (effective only when stream=true)Stream complex tool arguments (Qwen & GLM series). For Qwen3.5/3.6/3.7 plus/flash text or all modalities. Non-standard → extra_body.
enable_code_interpreterbooleannofalsetrue/falseEnable code interpreter. Non-standard → extra_body.
enable_searchbooleannofalsetrue/falseWeb search. Within Omni only Qwen3.5-Omni. Non-standard → extra_body.
search_optionsobjectnoobject with sub-fields belowWeb-search config; effective only when enable_search=true. Non-standard → extra_body.
search_options.forced_searchbooleannofalsetrue/falseForce a web search regardless of model judgment. Effective only when enable_search=true.
search_options.search_strategystringnoturboturbo, max, agent, agent_maxSearch scale. For Qwen-Omni the search_strategy parameter only accepts agent.
search_options.enable_search_extensionbooleannofalsetrue/falseDomain-specific search. Effective only when enable_search=true.
vl_high_resolution_imagesbooleannofalsetrue/falseRaise the input-image cap to the 16384-token resolution (16,777,216 px at 32×32/token for Qwen3.5-Omni); ignores max_pixels when true. Within Omni only Qwen3.5-Omni. Non-standard → extra_body.

The reference does not list a frequency_penalty parameter for this family; it lists presence_penalty and repetition_penalty.

System Message object (Optional) — place at start.

  • content string (Required) — system instruction.
  • role string (Required) — fixed system.

User Message object (Required)

  • content string | array (Required) — string for text-only; array for multi-modal input or when explicit caching is used.
  • role string (Required) — fixed user.

Assistant Message object (Optional) — the model’s reply, fed back as context.

  • content string (Optional) — text of the reply. Can be empty/omitted only if tool_calls is present; otherwise required. (For Qwen-Omni, assistant messages may carry text only — no audio.)
  • role string (Required) — fixed assistant.
  • partial boolean (Optional, default false) — enable partial (prefix-continuation) mode.
  • tool_calls array (Optional) — echoed from a prior model response; each: id (Required), type=function (Required), function.name (Required), function.arguments JSON string (Required), index (Required).

Tool Message object (Optional) — tool output.

  • content string (Required) — tool result serialized to a string.
  • role string (Required) — fixed tool.
  • tool_call_id string (Required) — id from choices[0].message.tool_calls[$index].id.

messages[].content part types (multi-modal) — full sub-fields

Section titled “messages[].content part types (multi-modal) — full sub-fields”
part typesub-field(s)typerequirednotes / Omni limits
texttextstringRequired when type=textPlain text.
image_urlimage_url.urlstringRequired when type=image_urlURL or data:image/...;base64,....
input_audioinput_audio.datastringRequired when type=input_audioURL or data:;base64,... audio.
input_audioinput_audio.formatstringRequirede.g. mp3 or wav (input accepts AMR/WAV/3GP/3GPP/AAC/MP3).
videovideoarray of image-frame URLs/base64Required when type=videoVideo-as-frame-list.
video_urlvideo_url.urlstringRequired when type=video_urlURL or data:;base64,... of a video file (Qwen-Omni reads both visual and audio tracks).
fpsfpsfloatOptionalFrames extracted per second / inter-frame interval hint. Range [0.1, 10], default 2.0. Applies to video/video_url.
min_pixelsmin_pixelsintegerOptionalLower pixel bound per image/frame; upscaled if below. Qwen3.5-Omni image input default & min = 24576 (= 24 tokens × 32×32). For video file / image-list input the default is 65536.
max_pixelsmax_pixelsintegerOptionalUpper pixel bound; downscaled if above. Qwen3.5-Omni image input default 1310720 (= 1280 tokens × 32×32); the high-resolution cap is 16777216. When vl_high_resolution_images=true, max_pixels is ignored and the cap is fixed at 16777216. For video file / image-list input the default is 655360.
total_pixelstotal_pixelsintegerOptionalTotal-pixel budget across all extracted video frames (per-frame stays within [min_pixels,max_pixels]). Qwen3.5-Omni default & max = 184549376 (= 180224 image tokens at 32×32/token).
cache_controlcache_control.typestring (ephemeral only)Optional (property of a user content part)Enables explicit caching for that content.

Combined multimodal input (image+audio+video in one user message) — Qwen3.5-Omni series only. qwen3-omni-flash / qwen-omni-turbo: text + exactly one other modality, one media file per request. In multi-turn dialogs different user messages may carry different single modalities.

Audio input (input_audio): formats AMR, WAV, 3GP, 3GPP, AAC, MP3.

  • Files: Qwen3.5-Omni — up to 2048 (URL) / 250 (base64); Flash & Turbo — only 1.
  • Size (URL): Qwen3.5-Omni ≤ 2 GB; Flash ≤ 100 MB; Turbo ≤ 10 MB. Base64 string < 10 MB (all).
  • Duration: Qwen3.5-Omni ≤ 3 h; Flash ≤ 20 min; Turbo ≤ 3 min. (Billing minimum 1 s.)

Video file input (video_url): formats MP4, AVI, MKV, MOV, FLV, WMV; visual + audio tracks billed separately.

  • Files: Qwen3.5-Omni — up to 512 (URL) / 250 (base64); Flash & Turbo — only 1.
  • Size (URL): Qwen3.5-Omni ≤ 2 GB; Flash ≤ 256 MB; Turbo ≤ 150 MB. Base64 < 10 MB.
  • Duration: Qwen3.5-Omni ≤ 1 h; Flash ≤ 150 s; Turbo ≤ 40 s.

Image-list-as-video (video): frame counts — Qwen3.5-Omni 2–2048; Flash 2–128; Turbo 4–80 frames.

Image input (image_url): up to 2048 (URL) / 250 (base64) images; per-file ≤ 20 MB (Qwen3.5-Omni) / ≤ 10 MB (Flash, Turbo); base64 < 10 MB; both width and height must exceed 10 px; aspect ratio must not exceed 200:1.

Token/billing factors: image token density 1 token per 32×32 px (Qwen3.5-Omni & Flash) / per 28×28 px (Turbo); minimum 24 tokens per image (Qwen3.5-Omni) / 4 tokens (Flash & Turbo); default maximum 1280 tokens per image. Audio: Qwen3.5-Omni input ≈ seconds × 7 tokens, output ≈ seconds × 12.5; Flash ≈ seconds × 12.5 (in and out). Image ≈ 1 token / 32×32 px; video is split into video_tokens + audio_tokens. (Billing only — not request parameters.)


Non-streaming chat.completion object (for reference; Qwen-Omni itself requires streaming)

Section titled “Non-streaming chat.completion object (for reference; Qwen-Omni itself requires streaming)”
{
"choices": [
{ "message": { "role": "assistant", "content": "...", "reasoning_content": null,
"refusal": null, "audio": null, "function_call": null, "tool_calls": null },
"finish_reason": "stop", "index": 0, "logprobs": null }
],
"object": "chat.completion",
"usage": { "prompt_tokens": 3019, "completion_tokens": 104, "total_tokens": 3123,
"prompt_tokens_details": { "cached_tokens": 2048 } },
"created": 1735120033, "system_fingerprint": null, "service_tier": null,
"model": "qwen-plus", "id": "chatcmpl-..." }

In the non-stream object, message.audio is always null and completion_tokens_details.audio_tokens/reasoning_tokens are null — audio output is delivered via streaming chunks, not the non-stream body.

Streaming chat.completion.chunk objects (SSE data: lines) — the Qwen-Omni path

Section titled “Streaming chat.completion.chunk objects (SSE data: lines) — the Qwen-Omni path”

Text chunk:

{"id":"chatcmpl-...","choices":[{"delta":{"content":"I","function_call":null,"refusal":null,"role":"assistant","tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1757647879,"model":"qwen3.5-omni-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}

Audio chunk (base64 fragment in delta.audio.data):

{"choices":[{"delta":{"audio":{"data":"/v8AAAAAAA...","expires_at":1757647879,"id":"audio_..."}},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","model":"qwen3.5-omni-plus","id":"chatcmpl-...","usage":null}

Thinking chunk (qwen3-omni-flash, reasoning in delta.reasoning_content):

{"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":"Hmm"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","model":"qwen3-omni-flash","id":"chatcmpl-..."}

Final / usage chunk (choices empty when include_usage=true):

{"choices":[],"object":"chat.completion.chunk",
"usage":{"prompt_tokens":207,"completion_tokens":103,"total_tokens":310,
"completion_tokens_details":{"audio_tokens":83,"text_tokens":20},
"prompt_tokens_details":{"text_tokens":207}},
"created":1757940330,"model":"qwen3.5-omni-plus","system_fingerprint":null,"service_tier":null,"id":"chatcmpl-..."}
Response fields (streaming chunk + final usage)
Section titled “Response fields (streaming chunk + final usage)”
nametypedescription
idstringRequest id; shared by all chunks of one response.
objectstringchat.completion.chunk (stream) / chat.completion (non-stream).
createdintegerUnix timestamp; shared across chunks.
modelstringModel used.
service_tierstringAlways null.
system_fingerprintstringAlways null.
choicesarrayGenerated choices; empty in the final chunk when include_usage=true.
choices[].indexintegerChoice index (use with n>1 to reassemble).
choices[].delta.contentstring|nullIncremental text fragment.
choices[].delta.rolestringassistant; appears only in the first chunk.
choices[].delta.reasoning_contentstring|nullIncremental chain-of-thought (Flash thinking mode).
choices[].delta.audioobjectQwen-Omni audio output.
choices[].delta.audio.datastringIncremental base64 audio (concatenate across chunks; decode as 24 kHz/mono/16-bit PCM).
choices[].delta.audio.expires_atintegerUNIX timestamp (audio id expiry).
choices[].delta.audio.idstringAudio segment id.
choices[].delta.audio.transcriptstringTranscript of the audio, when present.
choices[].delta.refusalobjectAlways null.
choices[].delta.function_callobjectAlways null (legacy; use tool_calls).
choices[].delta.tool_calls[]arrayStreamed tool calls: index, id (first chunk), type=function, function.name (first chunk), function.arguments (concatenate fragments).
choices[].finish_reasonstring|nullnull while generating; then stop / length / tool_calls.
choices[].logprobsobject|null{content:[{token,bytes,logprob,top_logprobs:[{token,bytes,logprob}]}]} when logprobs=true.
usageobjectFinal chunk only (with include_usage).
usage.prompt_tokensintegerInput tokens.
usage.completion_tokensintegerOutput tokens.
usage.total_tokensintegerSum.
usage.completion_tokens_details.audio_tokensintegerOutput audio tokens.
usage.completion_tokens_details.text_tokensintegerOutput text tokens.
usage.completion_tokens_details.reasoning_tokensintegerThinking tokens (Flash).
usage.prompt_tokens_details.text_tokensintegerInput text tokens.
usage.prompt_tokens_details.audio_tokensintegerInput audio tokens (also where a video file’s audio-track tokens land).
usage.prompt_tokens_details.image_tokensintegerInput image tokens.
usage.prompt_tokens_details.video_tokensintegerInput video tokens (image list or video file).
usage.prompt_tokens_details.cached_tokensintegerTokens served from cache.
usage.cache_creation.ephemeral_5m_input_tokensintegerTokens used to create an explicit cache.
usage.cache_creation.cache_creation_input_tokensintegerTokens used to create an explicit cache.
usage.cache_creation.cache_typestringephemeral when explicit caching is used.

Non-stream message also exposes tool_calls[] (id, type=function, function.name/arguments, index), refusal (null), and function_call (null, deprecated).


Model seriesdefault voicevoice countvoice IDs
Qwen3.5-Omni (qwen3.5-omni-plus, qwen3.5-omni-flash, and their realtime variants)Tina55Tina, Cindy, Liora Mira, Sunnybobi, Raymond, Ethan, Theo Calm, Serena, Harvey, Maia, Evan, Qiao, Momo, Wil, Angel, Li Cassian, Mia, Joyner, Gold, Katerina, Ryan, Jennifer, Aiden, Mione, Sunny, Dylan, Eric, Peter, Joseph Chen, Marcus, Li, Rocky, Sohee, Lenn, Ono Anna, Sonrisa, Bodega, Emilien, Andre, Radio Gol, Alek, Rizky, Roya, Arda, Hana, Dolce, Jakub, Griet, Eliška, Marina, Siiri, Ingrid, Sigga, Bea, Chloe
Qwen3-Omni-Flash — snapshot qwen3-omni-flash-2025-12-01Cherry49Cherry, Serena, Ethan, Chelsie, Momo, Vivian, Moon, Maia, Kai, Nofish, Bella, Jennifer, Ryan, Katerina, Aiden, Eldric Sage, Mia, Mochi, Bellona, Vincent, Bunny, Neil, Elias, Arthur, Nini, Ebona, Seren, Pip, Stella, Bodega, Sonrisa, Alek, Dolce, Sohee, Ono Anna, Lenn, Emilien, Andre, Radio Gol, Jada, Dylan, Li, Marcus, Roy, Peter, Sunny, Eric, Rocky, Kiki
Qwen3-Omni-Flash — stable qwen3-omni-flash & snapshot qwen3-omni-flash-2025-09-15Cherry17Cherry, Ethan, Nofish, Jennifer, Ryan, Katerina, Elias, Jada, Dylan, Sunny, Li, Marcus, Roy, Peter, Rocky, Kiki, Eric
Qwen-Omni-Turbo (legacy, deprecated)Chelsie4Cherry, Serena, Ethan, Chelsie
qwen3-omni-30b-a3b-captionerNo audio output / no voice parameter (text-only model).

If audio.voice is omitted, the series default is used; the reference marks audio.voice Required when the audio object is supplied, so supply it explicitly.

  • Supported (for Qwen-Omni) only by qwen3.5-omni-plus and qwen3.5-omni-flashnot their dated snapshots.
  • Mechanism: create a custom voice from a 10–20 second audio sample, with no model training required. Create via the voice-enrollment API (model: "voice-enrollment" / "qwen-voice-enrollment", action: "create_voice", set target_model, prefix, audio url) → returns a voice_id. Pass that voice_id as audio.voice (Omni). target_model set during voice creation must exactly match the synthesis model. (Audio sample requirements: WAV (16-bit) / MP3 / M4A, 10–20 s recommended, ≤ 10 MB, sample rate 16 kHz or higher.)
  • Qwen3.5-Omni: input 113 (74 languages + 39 dialects); output 36 (29 languages + 7 dialects).
  • Qwen3-Omni-Flash: input 19 (11 languages + 8 dialects); output 19 (11 + 8).
  • Qwen-Omni-Turbo: input Chinese/English; output Chinese/English.

Terminal window
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.5-omni-plus",
"messages": [{"role":"user","content":"Who are you?"}],
"stream": true,
"stream_options": {"include_usage": true},
"modalities": ["text","audio"],
"audio": {"voice":"Tina","format":"wav"}
}'

Full (image + audio in, text+audio out, web search) — Qwen3.5-Omni

Section titled “Full (image + audio in, text+audio out, web search) — Qwen3.5-Omni”
from openai import OpenAI
import os, base64
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.5-omni-plus",
messages=[{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://.../dog_and_girl.jpeg"}},
{"type": "input_audio", "input_audio": {"data": "https://.../cherry.wav", "format": "wav"}},
{"type": "text", "text": "Describe the image and tell me what the audio is about."},
],
}],
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
temperature=0.7,
top_p=0.9,
max_completion_tokens=2000,
stream=True,
stream_options={"include_usage": True},
extra_body={"enable_search": True, "search_options": {"search_strategy": "agent"}},
)
audio_b64 = ""
for chunk in completion:
if chunk.choices:
d = chunk.choices[0].delta
if d.content: print(d.content, end="")
if getattr(d, "audio", None): audio_b64 += d.audio.get("data", "")
else:
print(chunk.usage)
# base64.b64decode(audio_b64) -> int16 PCM @ 24000 Hz mono

Flash thinking (text-only output; no audio in thinking mode)

Section titled “Flash thinking (text-only output; no audio in thinking mode)”
completion = client.chat.completions.create(
model="qwen3-omni-flash",
messages=[{"role": "user", "content": "Who are you?"}],
modalities=["text"], # audio not allowed in thinking mode
extra_body={"enable_thinking": True, "thinking_budget": 2048},
stream=True,
stream_options={"include_usage": True},
)
# reasoning streams in chunk.choices[0].delta.reasoning_content; final text in .content

Captioner (open-source, self-host) — audio in, text out only

Section titled “Captioner (open-source, self-host) — audio in, text out only”
# qwen3-omni-30b-a3b-captioner: single-turn, ONE audio input, NO text prompt, text-only output.
# Open-source (HF/ModelScope/vLLM); NOT a Model Studio OpenAI-compatible hosted endpoint.
# HF Transformers content-part type is "audio":
conversation = [{"role": "user", "content": [
{"type": "audio", "audio": "https://.../caption2.mp3"}
]}]
# Recommended sampling (per model card / vLLM): temperature=0.6, top_p=0.95, top_k=20,
# max_tokens=16384, max_model_len=32768. Best practice: audio <= 30 s.
# vLLM `vllm serve` exposes an OpenAI /v1/chat/completions endpoint where the part type is "audio_url":
# {"type":"audio_url","audio_url":{"url":"https://.../caption2.mp3"}}