Result first: MiniMax M3.1 Flash is now callable per token on AIHubMix as minimax-m3.1-flash ($0.165 input / $0.66 output per million tokens). On a two-bug fix in one Python function, it passed all 215 hidden tests at both settings we compared. Left at its default effort, it averaged 6,673 output tokens and 56 seconds per fix. At reasoning_effort="low" it averaged 889 tokens and 9.5 seconds. That's $0.0045 vs $0.0006 per fix.
If you're switching from M2.7 (MiniMax already reroutes plan traffic) or evaluating it against M3, the per-token price is only half the story. The effort setting decides the other half.
What this model is
M3.1 Flash first shipped anonymously. On 23 September it appeared on OpenRouter and OpenCode as Space Bunny Alpha: free, 1M context, multimodal, thinking always on. According to CellCog's timeline it topped OpenRouter's daily chart ahead of DeepSeek V4.1 Flash and stayed OpenCode's most-used model for five days. The community matched it to MiniMax through the tokenizer before MiniMax said anything. cheaty's comparison on X found the text tokenizer "perfectly matches that of the MiniMax M3", and other testers matched 36/36 and 50/50 probe strings.
Timeline:
| Date (2026) | Event |
|---|---|
| 23 Sep | Space Bunny Alpha live on OpenRouter and OpenCode |
| 27 Sep | MiniMax names M3.1-Flash-Preview, default in MiniMax Code |
| 30 Sep | Token Plan becomes M Plan, includes M3.1 Flash |
| 19 Oct | M2.5/M2.7 closed to new users; plan requests routed to M3.1 Flash |
| 19 Oct | minimax-m3.1-flash live on AIHubMix, pay per token |
MiniMax's model list now drops the "Preview" label and calls it MiniMax-M3.1-Flash, a "frontier multimodal coding model with 1M context window and tunable thinking depth." Every AIHubMix response reports that upstream name.
Spec diff vs M2.7
| MiniMax M2.7 | MiniMax M3.1 Flash | |
|---|---|---|
| Context window | 204,800 | 1,000,000 |
| max_tokens (recommended / max) | 65,536 / 204,800 | 131,072 / 524,288 |
| Input | Text | Text, image, video |
| Thinking | Always on, no levels | Always on, five levels |
| Default thinking depth | — | max |
| Explicit cache_control | Supported, writes billed | Not supported |
| Default top_p | 0.9 | 0.95 |
| Status | Retires 18 Nov 2026 | Current |
Unchanged: both think on every request, both speak MiniMax's Anthropic-compatible and OpenAI-compatible APIs, and both accept only tool_choice: auto per MiniMax's API reference.
The new knob is effort. MiniMax's text generation guide lists low, medium, high, xhigh, and max, and the model uses max when the field is omitted. M2.7 code doesn't send this field, so after a model swap, every request runs at max.
Price table
Per million tokens, checked 19 October 2026. Official prices are from MiniMax's pay-as-you-go page; M3's includes MiniMax's "Permanent 50% off" label.
| Model | Official input / output | AIHubMix input / output | AIHubMix cache read |
|---|---|---|---|
| MiniMax M2.7 | $0.30 / $1.20 | $0.2958 / $1.1832 | $0.05916 |
| MiniMax M3.1 Flash | not published | $0.165 / $0.66 | $0.0165 |
| MiniMax M3 | $0.30 / $1.20 | $0.288 / $1.152 | — |
On AIHubMix, Flash is about 44% below M2.7 ($0.165 ÷ $0.2958 ≈ 0.56) and about 43% below M3 ($0.165 ÷ $0.288 ≈ 0.57); output follows the same ratio. M3's official price doubles above 512K input tokens, while AIHubMix lists one flat price for Flash.
Measuring a real task
Prerequisites: an AIHubMix key in AIHUBMIX_API_KEY, and the openai Python SDK. The AIHubMix quick start covers both.
Task: a billing function billable_days(start, end, pauses) with two bugs. A pause that runs past the period end double-counts one day, and overlapping pauses are subtracted twice. The prompt describes the symptoms and asks for the corrected function only. A local harness then runs 215 hidden cases. Each setting ran three times through Chat Completions on 19 October 2026. These are AIHubMix's own measurements, not yet reproduced by anyone else.
The request, with cost computed from usage:
import os
from openai import OpenAI
client = OpenAI(base_url="https://aihubmix.com/v1", api_key=os.environ["AIHUBMIX_API_KEY"])
PRICE_IN, PRICE_OUT, PRICE_CACHE = 0.165, 0.66, 0.0165 # AIHubMix, per 1M tokens
def run(prompt, effort=None):
extra = {"reasoning_effort": effort} if effort else {}
r = client.chat.completions.create(
model="minimax-m3.1-flash",
max_tokens=32768,
messages=[{"role": "user", "content": prompt}],
**extra,
)
u = r.usage
cached = (u.prompt_tokens_details.cached_tokens or 0) if u.prompt_tokens_details else 0
cost = ((u.prompt_tokens - cached) * PRICE_IN + cached * PRICE_CACHE
+ u.completion_tokens * PRICE_OUT) / 1e6
return r.choices[0].message.content, u.completion_tokens, cost
Results (3 runs each):
| Setting | Avg output tokens | Avg time | Avg cost per fix | Tests passed |
|---|---|---|---|---|
| Effort omitted (= max) | 6,673 | 56 s | $0.0045 | 215/215 every run |
| Effort low | 889 | 9.5 s | $0.0006 | 215/215 every run |
Here is the arithmetic for the default row: 464 prompt tokens, about 192 of them cached, plus 6,673 output tokens. (272 × $0.165 + 192 × $0.0165 + 6,673 × $0.66) ÷ 1,000,000 ≈ $0.0045. Per 1,000 such fixes, that's about $4.45 at the default and $0.64 at low.
Variance was large: the default ranged from 4,589 to 9,680 output tokens, and from 39 to 82 seconds. The effort post in this series has all five levels.
Failure modes when you switch
-
Unset effort means max. If your client never sends an effort field, expect long turns and thinking-heavy bills. Fix: send
reasoning_effort(Chat Completions) on every request; start atlow. - No way to skip thinking. M3 can run without thinking; Flash can't. Short classification prompts spent almost nothing (0 to 6 thinking tokens) in our runs, but zero isn't guaranteed. If a code path needs a guaranteed non-thinking call, keep it on M3.
-
No Priority tier. Flash rejects the
service_tierfield. If you relied on M3's Priority tier (1.5× price) for latency, there's no equivalent here. - Video isn't on AIHubMix's listing yet. MiniMax documents video input; AIHubMix currently lists text and image. Base64 images and image URLs both worked in our tests.
- Prompts need to be specific. An early Space Bunny user called it "insanely fast, but it needs clear and specific instructions, otherwise it's too lazy." Spell out the expected output and the checks the model should run.
What we can't verify
- Quality against M3. MiniMax published no benchmark for M3.1 Flash, and Artificial Analysis has no entry for it. M3 has MiniMax's self-reported 59.0% on SWE-Bench Pro and an Artificial Analysis Intelligence Index of 29.2. Any Flash benchmark table you see is either M3's or unsourced.
- MiniMax's own per-token price. Not published as of 19 October 2026.
-
Harder tasks. Our task was bounded, and
lowwas enough. Three runs per setting can't tell you where higher effort starts paying off. - Open weights. MiniMax says it plans to release them, with no date. M3's weights are on Hugging Face.
Should you switch
- M Plan / Token Plan users on M2.5 or M2.7: you already have; MiniMax reroutes the names starting today. Re-run evals and add an effort setting.
-
Pay-as-you-go users on M2.5 or M2.7: you have until 18 November. On AIHubMix, change the model ID and add
reasoning_effort. -
Teams on M3 for coding agents: try Flash at
low/mediumon a slice of traffic. AIHubMix's compare page shows both price cards, and the model page has the ID and endpoints. - Stay on M3 if you need open weights, thinking off, independent benchmarks, or the Priority tier.
Keep reading: the MiniMax M3.1 Flash series
- Switching existing M2.7 code? This one covers the 400 errors and the silent changes: Fixing "requires adaptive thinking" (2013) When Moving from MiniMax M2.7 to M3.1 Flash
- The default effort drove most of the cost above. Here are all five levels on the same fix: Measuring MiniMax M3.1 Flash's Five Effort Levels on One Bug Fix
- The same task on the two other cheap coding models released the same month: MiniMax M3.1 Flash vs DeepSeek V4.1 Flash vs Claude Haiku 5.5: Same Bug Fix, Measured
Top comments (0)