Model comparison · 2026-10-19

MiniMax M3.1 Flash or M3? Price and feature differences

minimax/minimax-m3.1-flash compared with minimax/minimax-m3: price, the tier above 512,000 tokens, reasoning control, JSON and switching.

Diagram: two model boxes side by side, minimax/minimax-m3.1-flash and minimax/minimax-m3; both are called with the same API key.

Short answer: same family, half the price, different reasoning control

LLMTR is a gateway that gives access to language models from different providers through one OpenAI-compatible API. MiniMax M3.1 Flash is served here as minimax/minimax-m3.1-flash and MiniMax M3 as minimax/minimax-m3; both are called on the /v1/chat/completions endpoint at https://llmtr.com/v1 with the same API key from your llmtr.com account. Moving from one to the other is, for most requests, a change of the model string.

Both models have a 1,000,000-token context window and an output limit of 524,288 tokens per response, and both offer image and video input, tool calling and prompt caching. They differ in three places: price, how reasoning is controlled, and JSON object mode. For prompts up to 512,000 tokens M3.1 Flash costs half of M3, and on longer prompts the gap grows. On M3.1 Flash reasoning cannot be turned off and is set with five-level reasoning_effort; on M3 reasoning is switched on and off.

MiniMax M3.1 Flash or MiniMax M3?

If you are starting a new integration and do not need to switch reasoning off entirely, start with M3.1 Flash: it gives the same context and output limit at a lower price, lets you choose the reasoning depth per request and supports JSON object mode. The catalog reason to prefer M3 is the ability to turn reasoning off: for short classification or one-sentence summaries, an answer without reasoning cuts latency and output tokens. Without that need, no capability in the catalog is unique to M3.

The table puts the two rows side by side with the values in the LLMTR catalog. Prices are per 1M tokens, in the order input / cached input / output. M3's two price rows are chosen by whether the prompt exceeds 512,000 tokens; on a request that does, the output is billed at the higher tier as well.

The two models in the LLMTR catalog as of 19 October 2026
Propertyminimax/minimax-m3.1-flashminimax/minimax-m3
Price, prompt up to 512,000 tokens$0.15 / $0.015 / $0.60$0.30 / $0.06 / $1.20
Price, prompt above 512,000 tokens$0.15 / $0.015 / $0.60 (single tier)$0.60 / $0.12 / $2.40
Context window1,000,000 tokens1,000,000 tokens
Maximum output per response524,288 tokens524,288 tokens
Image and video inputyesyes
Tool calling and prompt cacheyesyes
JSON object modeyesnot listed on the card
Reasoningcannot be turned off; reasoning_effort low, medium, high, xhigh, maxon by default; turned off with reasoning: false or :fast; no reasoning_effort

How much does the same request cost on each model?

A 20,000-token prompt with a 2,000-token answer and no cache hit costs (20,000 x $0.15 + 2,000 x $0.60) / 1M = $0.0042 on M3.1 Flash and (20,000 x $0.30 + 2,000 x $1.20) / 1M = $0.0084 on M3. With a 600,000-token prompt and a 4,000-token answer the gap grows: $0.0924 on M3.1 Flash, and $0.3696 on M3, where the prompt is above 512,000 tokens and the higher tier applies.

The real cost is set by token counts, and the two models can answer the same question at different lengths. The Python example below sends the same question to both models and prints the token counts and the cost at these prices for each. reasoning_effort is sent only to M3.1 Flash, because M3 does not accept the field and returns 400. Run the comparison a few times with your own prompts; the token count of a single example is not enough to generalize from.

OpenAI Python SDK example that sends the same question to minimax/minimax-m3.1-flash and minimax/minimax-m3 through https://llmtr.com/v1/chat/completions and prints token usage and cost side by side.

import os

from openai import OpenAI

client = OpenAI(base_url="https://llmtr.com/v1", api_key=os.environ["LLMTR_API_KEY"])

# Per 1M tokens: input, cached input, output (M3: prompts up to 512,000 tokens).
PRICES = {
    "minimax/minimax-m3.1-flash": (0.15, 0.015, 0.60),
    "minimax/minimax-m3": (0.30, 0.06, 1.20),
}
# reasoning_effort is sent only to the model that accepts it.
EXTRA = {"minimax/minimax-m3.1-flash": {"reasoning_effort": "low"}}
messages = [{"role": "user", "content": "Explain optimistic locking in three sentences."}]

for model, (inp, cached, out) in PRICES.items():
    response = client.chat.completions.create(
        model=model, messages=messages, max_tokens=4096, **EXTRA.get(model, {})
    )
    usage = response.usage
    details = usage.prompt_tokens_details
    hit = (details.cached_tokens or 0) if details else 0
    cost = ((usage.prompt_tokens - hit) * inp + hit * cached + usage.completion_tokens * out) / 1_000_000
    print(model, usage.prompt_tokens, usage.completion_tokens, f"${cost:.6f}")

Reasoning control works differently on the two models

On M3.1 Flash reasoning cannot be turned off. You choose its depth with reasoning_effort from low, medium, high, xhigh and max; when the field is omitted, MiniMax's default, max, applies. reasoning: false, reasoning: { enabled: false } and thinking: { type: disabled } return 400 on this model. The model adjusts its reasoning to the difficulty of the request; on a simple question no trace may come back at all.

On M3 reasoning is on by default and can be turned off: send reasoning: false in the body or add the :fast suffix to the model id. M3 does not accept reasoning_effort levels. So when you move between the two models, change the field that carries the reasoning setting as well: going from M3 to M3.1 Flash, use reasoning_effort: low instead of reasoning: false or :fast; going the other way, remove reasoning_effort from the body.

JSON, tool calling and input types

Both models support tool calling and complete the answer after processing a result returned in the tool role. On M3.1 Flash, in multi-step loops, send the assistant message that holds the tool call back with its reasoning_content field. JSON object mode, that is type: json_object inside response_format, is listed on the M3.1 Flash card and not on the M3 card. A strict json_schema is listed on neither card, so validate the fields you receive on your side.

The input types are the same: text, images and video. On M3.1 Flash, send an image in an image_url part and a video in a video_url part as a base64 data URL. Image and video tokens are counted in prompt_tokens and billed at the input price on both models, so the same media request on M3.1 Flash comes to at most half of what it costs on M3 for prompts up to 512,000 tokens.

Switching from M3 or from the preview

If you use M3, switching means setting the model string to minimax/minimax-m3.1-flash and moving the reasoning setting to the reasoning_effort field as described above. Set aside a small evaluation set from your own prompts, compare the two models' answers and the token counts in usage, and change the id if the results suit your work. M3 stays listed in the catalog.

The closed-beta preview, minimax/minimax-m3.1-flash-preview, has answered 410 model_retired since 7 October 2026, and the response names minimax/minimax-m3.1-flash. The reasoning_effort levels and JSON object mode you used on the preview work the same way on this model; changing the id is enough. This model is metered and every request is charged to your balance. The switch does not happen on its own: requests do not reach this model until you change the id.

Switching from MiniMax M3 to MiniMax M3.1 Flash

Try both models side by side with the same key and prompts, move the reasoning setting to reasoning_effort and set the model id to minimax/minimax-m3.1-flash.

  1. Side by side. Send the same prompt with minimax/minimax-m3 and minimax/minimax-m3.1-flash.
  2. Reasoning setting. Use reasoning_effort: low instead of reasoning: false or :fast.
  3. Model id. If the results suit your work, set the model id to minimax/minimax-m3.1-flash.

Frequently asked questions

Is MiniMax M3.1 Flash cheaper than M3?

Yes. For prompts up to 512,000 tokens M3.1 Flash costs $0.15 / $0.015 / $0.60 and M3 $0.30 / $0.06 / $1.20 per 1M tokens. On longer prompts M3 becomes $0.60 / $0.12 / $2.40, while the M3.1 Flash price stays the same.

Can I turn reasoning off on M3.1 Flash as on M3?

No. Reasoning cannot be turned off on M3.1 Flash; for the least reasoning, send reasoning_effort: low. On M3 it is turned off with reasoning: false or :fast.

What changes in the code when moving from M3 to M3.1 Flash?

The model id becomes minimax/minimax-m3.1-flash. If you use reasoning: false or :fast, write reasoning_effort: low instead; images, video and tool definitions stay the same.

Related posts