Source: https://ailoot.ai/models/en/qwen-qwen3-235b-a22b-fp8/
Canonical: https://ailoot.ai/models/en/qwen-qwen3-235b-a22b-fp8/
Language: en

# Qwen3 235B A22B FP8

[Markdown](https://ailoot.ai/models/en/qwen-qwen3-235b-a22b-fp8/index.md) · [JSON](https://ailoot.ai/models/en/qwen-qwen3-235b-a22b-fp8/facts.json)

## [Qwen3 235B A22B FP8](https://ailoot.ai/models/en/qwen-qwen3-235b-a22b-fp8/)

Qwen3-235B-A22B-FP8 is the official fine-grained FP8 checkpoint of Qwen3’s large mixture-of-experts model. It keeps hybrid text reasoning and dialogue capabilities while carrying its own quantization identity and runtime considerations.

- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/qwen-qwen3-235b-a22b-fp8/#method-0)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/qwen-qwen3-235b-a22b-fp8/#method-1)

About the model

This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.

Qwen3-235B-A22B-FP8 is the official FP8 edition of Qwen3-235B-A22B. Its advertised text capabilities cover mathematical and logical reasoning, code generation, creative writing, role-based dialogue and multi-turn instruction following in more than 100 languages and dialects. It combines thinking and direct-response modes. Use it for a task that joins several constraints, such as comparing two implementations against the same specification and turning the comparison into a concrete change proposal.

The underlying architecture is mixture-of-experts: 235 billion total parameters, 22 billion active during processing, 94 layers and 128 experts with eight selected per token. Grouped-query attention uses 64 query heads and four key/value heads. The FP8 suffix identifies a separately published checkpoint, not an extra response modality or a different parameter count. The model receives text and generates text. Give a code-review assistant the specification, relevant source files and expected behavior; request a decision table, the selected modification and examples that demonstrate the intended result.

The manufacturer’s starting flow formats source and instructions as a conversation. For a document comparison, label the versions, state the authority of each source and identify the requirements that must remain unchanged. For a mathematical question, include the complete statement and desired final-answer form. For an implementation task, specify the language, real input shape, failure case and interfaces to preserve. Make the final artifact explicit so a long answer still resolves the original request. The published integration expects a Qwen3-aware runtime; the card warns that Transformers versions below 4.51.0 do not recognize the required architecture.

This edition has a dedicated FP8 note. The checkpoint uses fine-grained FP8 quantization with block size 128; its published configuration records the quantization scheme. The manufacturer lists Transformers, SGLang and vLLM as inference options, while warning of issues with fine-grained FP8 in distributed Transformers inference. Multi-device use may require CUDA\_LAUNCH\_BLOCKING=1. This is an edition-specific compatibility detail, not a reason to assume identical speed, memory use or output quality across runtimes. Preserve the full FP8 name when comparing or recording results, and assess the actual checkpoint in the intended environment.

Thinking is the default in the provided chat template, and a hard switch can turn it off. With thinking enabled, /think and /no\_think can control individual turns; the latest instruction takes precedence. Soft switches do not override a hard disable. Keep the final answer distinct from the generated reasoning section and carry the final answer into later dialogue history. A detailed contradiction analysis can request thinking, while a follow-up that reformats an accepted conclusion can request a direct response. With thinking enabled, even a soft non-thinking request retains a reasoning block; its content may be empty. The hard disable removes that block.

The card recommends Qwen-Agent for tool-call templates and parsing. In an engineering assistant, the application could expose a test runner or a read-only source lookup, execute the accepted call and return evidence for the next answer. Specify the tool’s inputs, permissions and result fields. Require the assistant to connect its proposed change to the returned result and to distinguish a test it requests from a test the application has actually completed. Tool-related model capabilities depend on this surrounding execution workflow. The Qwen3 guide also describes parallel and multi-step tool calls, with arguments represented as objects and results supplied back into the conversation.

The native context is 32,768 tokens, with 131,072 documented through YaRN expansion. Input and generated output share the sequence budget. The larger window requires the relevant configuration, and static YaRN may affect short inputs. Organize long source material by file or section and reserve space for the final comparison or code. Output lengths shown in the quickstart and best-practice recommendations are generation guidance, not proof of an independent service-wide output maximum. The Qwen3 documentation discusses assistant-message lengths of 38,912 tokens in thinking mode and 16,384 in non-thinking mode in its training-length explanation, and recommends evaluating the quality of longer generation. These figures are distinct from the overall context window and are not an endpoint-specific hard cap. The card also explains its default positional allocation of 40,960 tokens as 8,192 for typical prompts plus 32,768 for output; this is manufacturer configuration guidance, separate from the native training context and any endpoint limit.

Recommended thinking-mode sampling is temperature 0.6, top-p 0.95, top-k 20 and min-p 0; direct mode uses 0.7, 0.8, 20 and 0. Greedy decoding in thinking mode can lead to repetition, and stronger presence penalties may introduce language mixing. Request an inspectable final structure, such as a result table followed by the changed function and relevant cases. Check numerical conclusions, execute code in the target environment and review tool results before applying a proposed change. The FP8 checkpoint’s identity and its runtime caveats should remain attached to that evaluation.

Practical task

### Compare two normalizers to a contract

Technical example in English

```
Compare two normalizers to a contract

The contract requires unique case-sensitive tags in first-occurrence order. Compare Python A: return sorted(set(tags)) with B: return list(dict.fromkeys(tags)). Input: ["red", "Blue", "red", "blue"]. Give a criterion table, select the compliant implementation and provide tests for order and case preservation. Do not alter the contract to fit either implementation.
```

#### Expected result

```
A two-implementation decision table, a selected implementation and two contract-focused tests.
```

#### Check the result

```
Check that sorting is recognized as an order violation and Blue remains distinct from blue.
```

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `qwen/qwen3-235b-a22b-fp8`

[`qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/#m=qwen%2Fqwen3-235b-a22b-fp8&route=Ultra&caller=qwen%2Fqwen3-235b-a22b-fp8&fmt=chat)

Alibaba /`qwen/qwen3-235b-a22b-fp8`

### Overview

Qwen3-235B-A22B-FP8 is the official fine-grained FP8 checkpoint of Qwen3’s large mixture-of-experts model. It keeps hybrid text reasoning and dialogue capabilities while carrying its own quantization identity and runtime considerations.

Accepted inputs

Text

Results

Text

### Available in Ailoot · inputs & methods

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Input types

`text`

Output types

`text`

Output format

json or SSE

| Field | Type | Requirement | Values & limits | Default |
| --- | --- | --- | --- | --- |
| Field`model` | Type`string` | RequirementRequired | Values & limits qwen/qwen3-235b-a22b-fp8 | Default— |
| Field`messages` | Type`message[]` | RequirementRequired | Values & limits Minimum items: 1 | Default— |
| Field`messages[].role` | Type`string` | RequirementRequired | Values & limits Examples: system, user, assistant, tool, function Conditions: These roles are explicitly represented by Source compatibility types; the exact model role set remains model-specific. Model-specific | Default— |
| Field`messages[].content` | Type`string\|content_part[]\|null` | RequirementOptional | Values & limits | Default— |
| Field`messages[].tool_calls` | Type`tool_call[]` | RequirementOptional | Values & limits | Default— |
| Field`messages[].tool_call_id` | Type`string` | RequirementOptional | Values & limits Applies when: role=tool; use actual returned ID | Default— |
| Field`messages[].name` | Type`string` | RequirementOptional | Values & limits | Default— |
| Field`messages[].reasoning_content` | Type`string` | RequirementOptional | Values & limits Applies when: Round-trip actual returned reasoning where this model uses it | Default— |
| Field`messages[].reasoning_details` | Type`object\|array` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`max_tokens` | Type`integer` | RequirementOptional | Values & limits Minimum: 1 Model-specific | Default— |
| Field`max_completion_tokens` | Type`integer` | RequirementOptional | Values & limits Minimum: 1 Model-specific | Default— |
| Field`stream` | Type`boolean` | RequirementOptional | Values & limits | Defaultfalse |
| Field`stream_options.include_usage` | Type`boolean` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`temperature` | Type`number` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`top_p` | Type`number` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`stop` | Type`string\|string[]` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`tools` | Type`function_tool[]` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`tools[].type` | Type`string` | RequirementOptional | Values & limits function Model-specific | Default— |
| Field`tools[].function.name` | Type`string` | RequirementRequired | Values & limits Applies when: function tool supplied | Default— |
| Field`tools[].function.description` | Type`string` | RequirementOptional | Values & limits | Default— |
| Field`tools[].function.parameters` | Type`JSON_schema` | RequirementOptional | Values & limits | Default— |
| Field`tool_choice` | Type`string\|object` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`parallel_tool_calls` | Type`boolean` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`response_format` | Type`object` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`reasoning_effort` | Type`string` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`reasoning` | Type`object` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`service_tier` | Type`string` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`instructions` | Type`string` | RequirementOptional | Values & limits Compatibility field | Default— |
| Field`functions` | Type`function[]` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`function_call` | Type`string\|object` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`prompt_cache_options` | Type`object` | RequirementOptional | Values & limits Model-specific | Default— |
| Field`modalities` | Type`string[]` | RequirementOptional | Values & limits text | Default— |
| Field`provider` | Type`object` | RequirementOptional | Values & limits Conditions: provider.options is rejected on this Ultra text route | Default— |
| Field`cache_control.ttl` | Type`string` | RequirementOptional | Values & limits Conditions: 1h is rejected in actual prompt-cache locations | Default— |

Input material combinations

**Text** · UTF8 text

`messages[].content`

Method parameters and lifecycle

| Parameter | Contract |
| --- | --- |
| Parameter`content_type` | Contractapplication/json |
| Parameter`required` | Contractmodel, messages |
| Parameter`material_types` | Contracttext |
| Parameter`messages` | Contractmessage array with role/content shape |
| Parameter`file_material` | Contractactual UTF-8 document inserted as literal text; no file ID inferred |
| Parameter`optional_controls` | Contractstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | Contractmodel-specific; user function tools differ from hosted tools |
| Parameter`output_modalities` | Contracttext |
| Parameter`hosted_operations` | Contractfalse |
| Parameter`multimodal_input_binding` | Contractnull |

Lifecycle: `synchronous_or_streamed`

Send exact model ID with messages.

Context length is not an output cap.

A text file may supply literal text; image/audio/file-object inputs need exact binding.

### Pricing

Tariff references do not add request options. Supported parameters are listed for the selected method.

Fast mode

Not specified When fast mode is selected

Flex mode

Not specified When flex mode is selected

Maximum reasoning effort

Not specified When maximum reasoning effort uses the default adjustment

#### Ailoot rates

#### Prices by configuration

| Configuration | Rate schedule | Charge |
| --- | --- | --- |
| ConfigurationBase token rates | Rate scheduleBase rate | Charge Input · Input tokens **$0.0004** / 1K tokens Output · Output tokens **$0.0016** / 1K tokens Input · Cache read **$0** / 1K tokens Input · Cache write **$0** / 1K tokens Input · Cache write, 1 hour **—** / 1K tokens |

Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. [How reservation and settlement work →](https://ailoot.ai/docs/en/billing/reserve/)

### Example requests

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPython stream

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "qwen/qwen3-235b-a22b-fp8", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='qwen/qwen3-235b-a22b-fp8',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='qwen/qwen3-235b-a22b-fp8',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Receive and save results

#### Ailoot Ultra · OpenAI Chat

json or SSE

##### Keep all completed results

Keep every complete returned response, file and content part.

Keep every choice and its content/tool calls/reasoning. In SSE assemble deltas by choice/tool index, retain the final finish reason and usage.

##### If the original response needs checking

Keep request/response IDs and headers. No generic text job retrieval URL is supplied.

Response fields

| Field | Type |
| --- | --- |
| Field`choices[].index` | Typeinteger |
| Field`choices[].message.content` | Typestring\|null |
| Field`choices[].message.tool_calls` | Typetool\_call\[\] |
| Field`choices[].message.reasoning_content` | Typestring |
| Field`choices[].message.reasoning_details` | Typeobject\|array |
| Field`choices[].finish_reason` | Typestring\|null |
| Field`usage` | Typeobject |

Errors and next steps

| Response | Condition | Next step |
| --- | --- | --- |
| Response400 · `invalid_request_error` | ConditionInvalid required fields, material representation or parameter value | Next stepCorrect the indicated fields before a new creation request. |

### Aliases

#### Model aliases

**Ailoot Ultra** [`qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/#m=qwen%2Fqwen3-235b-a22b-fp8&route=Ultra&caller=qwen%2Fqwen3-235b-a22b-fp8&fmt=chat)

#### Method path aliases

Use the method paths shown above.

#### Related caller IDs

[`qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/#m=qwen%2Fqwen3-235b-a22b-fp8&route=Ultra&caller=qwen%2Fqwen3-235b-a22b-fp8&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `qwen/qwen3-235b-a22b-fp8`

[`qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/#m=qwen%2Fqwen3-235b-a22b-fp8&route=Ultra&caller=qwen%2Fqwen3-235b-a22b-fp8&fmt=messages)

Alibaba /`qwen/qwen3-235b-a22b-fp8`

### Overview

Qwen3-235B-A22B-FP8 is the official fine-grained FP8 checkpoint of Qwen3’s large mixture-of-experts model. It keeps hybrid text reasoning and dialogue capabilities while carrying its own quantization identity and runtime considerations.

Accepted inputs

Text

Results

json · sse

### Available in Ailoot · inputs & methods

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Input types

`text`

Output types

`json`, `sse`

Output format

JSON or SSE

| Field | Type | Requirement | Values & limits | Default |
| --- | --- | --- | --- | --- |
| Field`model` | Type`string` | RequirementRequired | Values & limits qwen/qwen3-235b-a22b-fp8 | Default— |
| Field`messages` | Type`message[]` | RequirementRequired | Values & limits | Default— |
| Field`messages[].role` | Type`string` | RequirementRequired | Values & limits user, assistant | Default— |
| Field`messages[].content` | Type`string` | RequirementRequired | Values & limits | Default— |
| Field`max_tokens` | Type`integer` | RequirementRequired | Values & limits | Default— |
| Field`stream` | Type`boolean` | RequirementOptional | Values & limits | Defaultfalse |

Input material combinations

**Text** · UTF-8 text

`messages[].content string`

Method parameters and lifecycle

| Parameter | Contract |
| --- | --- |
| Parameter`content_type` | Contractapplication/json |
| Parameter`required` | Contractmodel, messages, max\_tokens |
| Parameter`optional_controls` | Contractstream |
| Parameter`material_types` | Contracttext |
| Parameter`text_file_material` | ContractRead the actual UTF-8 document and put its text in the indicated input or message content string. |

Lifecycle: `synchronous_or_streamed`

### Pricing

Tariff references do not add request options. Supported parameters are listed for the selected method.

Fast mode

Not specified When fast mode is selected

Flex mode

Not specified When flex mode is selected

Maximum reasoning effort

Not specified When maximum reasoning effort uses the default adjustment

#### Ailoot rates

#### Prices by configuration

| Configuration | Rate schedule | Charge |
| --- | --- | --- |
| ConfigurationBase token rates | Rate scheduleBase rate | Charge Input · Input tokens **$0.0004** / 1K tokens Output · Output tokens **$0.0016** / 1K tokens Input · Cache read **$0** / 1K tokens Input · Cache write **$0** / 1K tokens Input · Cache write, 1 hour **—** / 1K tokens |

Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. [How reservation and settlement work →](https://ailoot.ai/docs/en/billing/reserve/)

### Example requests

#### Ailoot Ultra · Anthropic Messages

Complete minimal JSON bodycurl · use your UTF-8 documentPython · save the complete result

```json
{
  "model": "qwen/qwen3-235b-a22b-fp8",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'qwen/qwen3-235b-a22b-fp8', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'qwen/qwen3-235b-a22b-fp8', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Receive and save results

#### Ailoot Ultra · Anthropic Messages

JSON or SSE

##### Keep all completed results

Keep every complete returned response, file and content part.

Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.

##### If the original response needs checking

Keep request/response IDs and headers. No generic text job retrieval URL is supplied.

Response fields

| Field | Type |
| --- | --- |
| Field`id` | Typestring |
| Field`model` | Typestring |
| Field`content[]` | Typetext\|thinking\|tool\_use\|other content block |
| Field`stop_reason` | Typestring\|null |
| Field`usage` | Typeobject |

Errors and next steps

| Response | Condition | Next step |
| --- | --- | --- |
| Response400 · `invalid_request_error` | ConditionInvalid required fields, material representation or parameter value | Next stepCorrect the indicated fields before a new creation request. |

### Aliases

#### Model aliases

**Ailoot Ultra** [`qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/#m=qwen%2Fqwen3-235b-a22b-fp8&route=Ultra&caller=qwen%2Fqwen3-235b-a22b-fp8&fmt=messages)

#### Method path aliases

Use the method paths shown above.

#### Related caller IDs

[`qwen/qwen3-235b-a22b-fp8`](https://ailoot.ai/models/en/#m=qwen%2Fqwen3-235b-a22b-fp8&route=Ultra&caller=qwen%2Fqwen3-235b-a22b-fp8&fmt=messages)

FAQ · qwen/qwen3-235b-a22b-fp8

What inputs and results are available?

`POST /v1/chat/completions` · `qwen/qwen3-235b-a22b-fp8`: `text` → `text` `POST /v1/messages` · `qwen/qwen3-235b-a22b-fp8`: `text` → `json`, `sse`

Which fields does the request use?

`POST /v1/chat/completions` · `qwen/qwen3-235b-a22b-fp8`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/messages` · `qwen/qwen3-235b-a22b-fp8`: `model`, `messages`, `max_tokens`, `stream`

What limits apply?

`POST /v1/chat/completions` · `qwen/qwen3-235b-a22b-fp8`: `messages.min_items`: `1`

Connect Ailoot to Claude Code, OpenCode, Hermes or your own app.

## The company and its project portfolio

The company and its project portfolio: millions of customers; monthly sales in the billions.

## Buy tokens at a discount.

Subscription discounts for regular use. Promo codes offer up to 50% off token purchases.

Subscription

Choose a discounted plan for your regular requests.

Promo code: up to 50% off

Enter your code at checkout. The price updates to reflect the current promotion.

Spending in your history

The model, tokens and amount are recorded for each request.

[Choose a subscription](https://ailoot.ai/docs/en/billing/subscriptions/) · [View model prices](https://ailoot.ai/models/en/)

## Connect the API to a product you sell.

Use Ailoot in SaaS, apps and bots under its official service offer and licence agreement. Request a reseller licence for resale.

Commercial application

Add text, image, video and audio generation to paid features in your service.

Reseller licence

Send a description of your project and how you provide access. Request written terms for use and resale.

Documents on the website

The service offer, licence agreement and data processing policy are available before you connect.

[Request a reseller licence](mailto:support@ailoot.ai) · [Service offer and licence agreement](https://ailoot.ai/legal/offer?lang=en)

## Ailoot · The company and its project portfolio





Ailoot combines established operating experience, a large client base, stable service and ongoing KPI control.





The company and its project portfolio: millions of customers; monthly sales in the billions.





Ailoot brings that operating experience to API access for AI features in customer products, agents, applications and automations.
