October 22, 2026
Chat completions for Qwen3.8 Max 0902 and a request queue for the image and speech models are the two calling patterns, and both run under the same account and API key on GMI Cloud Model-as-a-Service (MaaS). Qwen3.8 Max 0902 takes OpenAI-compatible chat requests; for the media models, you submit a job, get a request ID, and poll for the result. The public model library has cards for Qwen3.8 Max 0902, image models such as Seedream 5.0 Pro and Qwen-Image-2512, and speech models such as MiniMax TTS Speech 2.8 HD and Turbo. Every request carries the same Authorization: Bearer header, and a single invoice covers all models, per the MaaS page.
| Layer | Example model on GMI | How you call it | What comes back |
|---|---|---|---|
| Main LLM | Qwen3.8 Max 0902 | POST /v1/chat/completions on the inference API |
Text, streamed or complete |
| Image generation | seedream-5.0-pro |
Request queue: submit, then poll | Image URLs in outcome.media_urls |
| Speech generation | minimax-tts-speech-2.8-hd, minimax-tts-speech-2.8-turbo |
Request queue: submit, then poll | Audio URL in outcome.media_urls |
All three rows sit under one organization, with one API key and one billing page. On the LLM side, one endpoint serves 200+ models, and you keep your code and change the model ID. The media side follows the per-model pages in the image and audio model docs.
Qwen3.8 Max 0902 and the plain Qwen3.8 Max are separate cards in the model library, so the dated ID matters. GMI's billing list uses Qwen/Qwen3.8-Max-0902 for the dated version.
The LLM endpoint is https://api.gmi-serving.com/v1/chat/completions. A request is a model field and a messages array, following the standard OpenAI chat completions shape. The same base URL also serves /v1/responses for the OpenAI Responses API, /v1/messages for the Anthropic Messages API, and GET /v1/models to list the models on your key.
POST https://api.gmi-serving.com/v1/chat/completions
Authorization: Bearer <GMI_API_KEY>
Content-Type: application/json
{
"model": "Qwen/Qwen3.8-Max-0902",
"messages": [
{"role": "user", "content": "Write a 40-word product blurb and an image prompt for a ceramic pour-over set."}
]
}
Because the endpoint is OpenAI-compatible, the OpenAI SDK works by pointing base_url at https://api.gmi-serving.com/v1. Request parameters, including sampling and output options, are covered in the LLM API reference.
Image and speech models share one submit endpoint on the console host: POST https://console.gmicloud.ai/api/v1/ie/requestqueue/apikey/requests. The model is named in the request body, and its parameters sit inside payload. A speech job with MiniMax TTS Speech 2.8 HD looks like this:
POST https://console.gmicloud.ai/api/v1/ie/requestqueue/apikey/requests
Authorization: Bearer <GMI_API_KEY>
Content-Type: application/json
{
"model": "minimax-tts-speech-2.8-hd",
"payload": {
"text": "Hand-thrown ceramic, built for a slow morning.",
"voice_id": "English_expressive_narrator",
"speed": 1,
"format": "mp3"
}
}
The response carries a request_id. You read the result with GET https://console.gmicloud.ai/api/v1/ie/requestqueue/apikey/requests/{request_id} and the same Bearer header, which returns a status of queued, processing, success, failed or cancelled. On success, the file location is in outcome.media_urls. An image job has the same shape:
POST https://console.gmicloud.ai/api/v1/ie/requestqueue/apikey/requests
Authorization: Bearer <GMI_API_KEY>
Content-Type: application/json
{
"model": "seedream-5.0-pro",
"payload": {
"prompt": "A ceramic pour-over set on a pale oak table, soft morning light",
"size": "2K",
"output_format": "png"
}
}
The Seedream 5.0 Pro page takes a prompt, optional reference images (up to 14), a size of 2K, 3K or an explicit width and height (total pixels between 3.6M and 10.4M, aspect ratio between 1/16 and 16), and an output_format of jpeg or png.
Build the client around the request ID: submit, store the ID, read the status, and poll until it is terminal, then fetch the URL. That one routine covers the Seedream and MiniMax models above, which share the same submit and status endpoints, so a second image model or a different voice only changes the model string and the payload.
The model library has more than one option on each side:
Run the same ten or twenty prompts from your own product through two candidates per slot and compare outputs side by side. Build each candidate's payload from its own docs page, since the docs note that exact parameters such as size and guidance are documented per model.
With Qwen3.8 Max 0902 as the main model, the LLM decides what to make and the media models make it. A product-page assistant is a good example:
success, download the image and the audio from outcome.media_urls, copy them into your own storage, and return the finished asset to your user.failed image should not discard a finished narration. Retry the failed job with the same payload, or fall back to a second image model with a payload built for that model's parameters.Keep the LLM call and the media calls in separate functions with separate timeouts. A chat completion is a single request and response, or a stream you can show immediately. Some media models return a finished result on submit; a job that is still running reports queued or processing until it reaches a terminal status, so poll every couple of seconds, lengthen the interval as the wait grows, set a deadline, and show your user progress instead of a blocked page.
If the LLM output feeds a media payload, validate it before submitting. The narration text should be non-empty, and the image prompt should fit the model's prompt guidance (the Seedream page recommends prompts under 600 words).
The key is issued from Settings > API Keys in the console. The key dialog takes a description, such as prod-inference, and a scope that defaults to Inference. Put the key straight into your secrets manager when it is created.
You can still separate traffic inside one account. Create one key per service or environment, for example one for the web app and one for a batch job, and the Serverless Usage view lets you filter by API key and by model name, daily or hourly, in local time or UTC. That gives you a per-model and per-key view of LLM, image and speech usage without running separate vendor accounts.
The voice-clone variant of MiniMax Speech 2.8 HD, minimax-audio-voice-clone-speech-2.8-hd, takes a source_audio URL (mp3, m4a or wav) and the text to speak, and it goes to the same request-queue endpoint with the same Bearer header. Set your own voice_id to name the cloned voice: 8 to 256 characters, starting with an English letter, alphanumeric with underscores allowed, and not a duplicate of an existing one. An optional prompt_audio clip under 8 seconds, paired with prompt_text, sets the speaking style. The audio URL arrives in outcome.media_urls, typically within 5 to 15 seconds, and the job's request_id reads back with the same GET as a speech job.
Video models such as kling-3.0-turbo-t2v use the same submit endpoint and Bearer header as your image and speech jobs, so the routine you already built carries over. Read the job with GET /api/v1/ie/requestqueue/apikey/requests/{request_id} until the status is success or failed; on success, take the video URLs from outcome.media_urls. Only the model string and the payload change. Video limits are counted in requests per hour at the organization level, separate from the tokens-per-minute limits on the LLM.
An API key from the GMI Cloud console is all the first three calls need: the chat completion above with Qwen/Qwen3.8-Max-0902, then one speech job and one image job on the request queue, with the file URLs read from outcome.media_urls. After that, the rest of the product is orchestration in your own code. The LLM model list has the IDs for the other language models on the platform if you want a second model for comparison.
Colin Mo
GMI Cloud helps you architect, deploy, optimize, and scale your AI strategies
