MiMo API access, OpenAI-compatible — and its thinking default

Xiaomi's MiMo models normally sit behind their own platform key. Through DaoXE they ride the same OpenAI-compatible base URL as GPT, Claude and DeepSeek — one key spanning hundreds of models across roughly 25 providers.

Updated 2026-09-15

MiMo is Xiaomi's model family — the general mimo-v2.5 and the Pro tier, documented with 1M-token context windows and native OpenAI- and Anthropic-format surfaces. Through DaoXE you call /v1/chat/completions with a MiMo ID from GET /v1/models under the same key as every other family — which exact MiMo IDs your account carries is a live-list question, not a given. Cost routing: cheapest APIs guide.

Call MiMo through DaoXE#

Chat path: /v1/chat/completions with Authorization: Bearer. MiMo thinks by default: the vendor documents thinking (enabled/disabled) with enabled as the factory state for the current v2.5 IDs. Sampling is locked while thinking — custom temperature/top_p are forced to the vendor's recommended 1.0/0.95 — and max_completion_tokens is the cap that covers thinking and answer.

bash
curl --fail-with-body --show-error --silent \
  https://daoxe.com/v1/chat/completions \
  -H "Authorization: Bearer ${DAOXE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "YOUR_EXACT_MODEL_ID",
    "max_tokens": 64,
    "messages": [{"role": "user", "content": "Say hello in one sentence."}]
  }'
python
# MiMo reasoning IDs think by DEFAULT, lock temperature/top_p, and 400 if a
# tool-call round drops reasoning_content. max_completion_tokens (not max_tokens)
# is the cap that covers thinking + answer.
from openai import OpenAI

client = OpenAI(base_url="https://daoxe.com/v1", api_key="YOUR_DAOXE_KEY")
r = client.chat.completions.create(
    model="YOUR_EXACT_MODEL_ID",   # a mimo-* id from GET /v1/models
    messages=[{"role": "user", "content": "2+2? Think briefly, then answer."}],
    max_completion_tokens=2048,    # thinking + answer share this budget
    # thinking is ON by default; to opt out explicitly:
    extra_body={"thinking": {"type": "disabled"}},  # non-standard: extra_body
)
msg = r.choices[0].message
print(getattr(msg, "reasoning_content", None))  # thinking trace
print(msg.content)                              # final answer
print(r.usage.completion_tokens_details.reasoning_tokens)  # thinking spend

How MiMo exposes reasoning#

MiMo puts the trace in a dedicated reasoning_content field on the message — the same shape as DeepSeek — while usage.completion_tokens_details.reasoning_tokens reports the spend. Two twists make it the strictest of the reasoning families: thinking is ON unless you send thinking: {"type": "disabled"}, and the multi-turn contract is enforced, not advisory — a tool-call round that drops reasoning_content gets a 400, where DeepSeek-style APIs degrade or the docs merely warn. Whether a given relay path forwards the non-standard thinking field and preserves reasoning_content is exactly the kind of thing to verify — one test call before you commit a client.

MiMo-specific notes#

  • Thinking is the default, not the opt-in. The thinking field ({"type": "enabled"} / {"type": "disabled"}) is non-standard — send it via your SDK's extra-body — and omitting it leaves thinking ON for the v2.5 IDs. Clients that assume a plain-text answer should disable it explicitly or parse reasoning_content.
  • Dropping reasoning_content 400s in tool loops. The vendor is blunt: in multi-turn agent conversations with tool calls, every echoed assistant message must carry its reasoning_content back, or the API returns a 400 error. It names the affected clients by protocol — Cursor, Roo Code, Codex, Zed, Goose and friends on the OpenAI side; OpenCode, Kilo Code and friends on the Anthropic side. Build history from raw message objects, never from a trimmed summary.
  • Sampling params are accepted but ignored while thinking. Custom temperature/top_p do not error — they are silently forced to 1.0/0.95. Tuning them on a thinking request is a no-op, so stop cargo-culting them.
  • max_completion_tokens, not max_tokens, owns the budget. The cap spans thinking plus answer, so an undersized cap truncates the answer after a long think. Exact IDs always come from GET /v1/models.

What it costs#

One balance, one top-up rate

Top-up runs at a flat 1 RMB = $1 of credit on every payment method, and each model then bills at its own USD rate — live per-model rates are on the live pricing page. That rate is the same on Alipay, WeChat Pay, USDT, bank card (Visa · Mastercard), Apple Pay and Google Pay — one balance, shared by every model in the catalog, with no plan to choose and no monthly minimum. Rates are account-scoped and do change, so confirm with one small top-up rather than trusting a number in a guide.

Verify you actually get the model#

Prove the endpoint works before blaming the client — if this fails, no setting will fix it:

bash
export DAOXE_API_KEY="your_api_key"

# List the exact model IDs your account can call
curl --fail-with-body --show-error --silent \
  https://daoxe.com/v1/models \
  -H "Authorization: Bearer ${DAOXE_API_KEY}"

Confirm connectivity, then diff a fixed prompt at temperature-equivalent settings (MiMo enforces its own while thinking) against the official MiMo API to make sure the tier matches:

Verify us — don't trust us

Point the open benchmark at DaoXE and at the official API and compare at temperature 0. Then learn to detect model swapping so a cheaper endpoint can't quietly swap you to a smaller model.

Frequently asked questions#

How do I turn MiMo thinking off?

Send thinking with {"type": "disabled"} in the request body. It's a non-standard field — use your SDK's extra-body option. Omitting it leaves thinking ON for the current v2.5 IDs.

Why did my agent get a 400 mid-conversation?

In multi-turn tool use, every echoed assistant message must include its reasoning_content. If your framework trims that field when rebuilding history, the API rejects the request — rebuild history from raw message objects.

Why is my temperature setting ignored?

While thinking is on, MiMo forces temperature/top_p to its recommended defaults (1.0/0.95). The parameter is accepted but overridden — no error, no effect.

How much does MiMo cost here?

Per-model, account-scoped — see live pricing. Top-up is a flat 1 RMB = $1 of credit on every payment method.

Try DaoXE — and benchmark it yourself

One key for GPT, Claude, Gemini, DeepSeek and more. Point the open benchmark at us and compare — don't take our word for it.