docs/providers/minimax.md
The bundled minimax plugin registers two providers plus five capabilities: chat, image generation, music generation, video generation, image understanding, speech (T2A v2), and web search.
| Provider ID | Auth | Capabilities |
|---|---|---|
minimax | API key | Text, image generation, music generation, video generation, image understanding, speech, web search |
minimax-portal | OAuth | Text, image generation, music generation, video generation, image understanding, speech |
| Model | Type | Description |
|---|---|---|
MiniMax-M3 | Chat (reasoning) | Default hosted reasoning model |
MiniMax-M2.7 | Chat (reasoning) | Previous hosted reasoning model |
MiniMax-M2.7-highspeed | Chat (reasoning) | Faster M2.7 reasoning tier |
MiniMax-VL-01 | Vision | Image understanding model |
image-01 | Image generation | Text-to-image and image-to-image editing |
music-2.6 | Music generation | Default music model |
MiniMax-Hailuo-2.3 | Video generation | Text-to-video and image-to-video flows |
Model refs follow the auth path: minimax/<model> for API-key setups, minimax-portal/<model> for OAuth setups.
<Tabs>
<Tab title="International">
<Steps>
<Step title="Run onboarding">
```bash
openclaw onboard --auth-choice minimax-global-oauth
```
Resulting provider base URL: `api.minimax.io`.
</Step>
<Step title="Verify the model is available">
```bash
openclaw models list --provider minimax-portal
```
</Step>
</Steps>
</Tab>
<Tab title="China">
<Steps>
<Step title="Run onboarding">
```bash
openclaw onboard --auth-choice minimax-cn-oauth
```
Resulting provider base URL: `api.minimaxi.com`.
</Step>
<Step title="Verify the model is available">
```bash
openclaw models list --provider minimax-portal
```
</Step>
</Steps>
</Tab>
</Tabs>
<Note>
OAuth setups use the `minimax-portal` provider id. Model refs follow the form `minimax-portal/MiniMax-M3`.
</Note>
<Tabs>
<Tab title="International">
<Steps>
<Step title="Run onboarding">
```bash
openclaw onboard --auth-choice minimax-global-api
```
This configures `api.minimax.io` as the base URL.
</Step>
<Step title="Verify the model is available">
```bash
openclaw models list --provider minimax
```
</Step>
</Steps>
</Tab>
<Tab title="China">
<Steps>
<Step title="Run onboarding">
```bash
openclaw onboard --auth-choice minimax-cn-api
```
This configures `api.minimaxi.com` as the base URL.
</Step>
<Step title="Verify the model is available">
```bash
openclaw models list --provider minimax
```
</Step>
</Steps>
</Tab>
</Tabs>
### Config example
```json5
{
env: { MINIMAX_API_KEY: "sk-..." },
agents: { defaults: { model: { primary: "minimax/MiniMax-M3" } } },
models: {
mode: "merge",
providers: {
minimax: {
baseUrl: "https://api.minimax.io/anthropic",
apiKey: "${MINIMAX_API_KEY}",
api: "anthropic-messages",
models: [
{
id: "MiniMax-M3",
name: "MiniMax M3",
reasoning: true,
input: ["text", "image"],
cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 },
contextWindow: 1000000,
maxTokens: 131072,
},
{
id: "MiniMax-M2.7",
name: "MiniMax M2.7",
reasoning: true,
input: ["text"],
cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 },
contextWindow: 204800,
maxTokens: 131072,
},
{
id: "MiniMax-M2.7-highspeed",
name: "MiniMax M2.7 Highspeed",
reasoning: true,
input: ["text"],
cost: { input: 0.6, output: 2.4, cacheRead: 0.06, cacheWrite: 0.375 },
contextWindow: 204800,
maxTokens: 131072,
},
],
},
},
},
}
```
<Warning>
MiniMax-M2.x's Anthropic-compatible streaming endpoint emits `reasoning_content` in OpenAI-style delta chunks instead of native Anthropic thinking blocks, which leaks internal reasoning into visible output if thinking is left enabled implicitly. OpenClaw disables M2.x thinking by default unless you explicitly set `thinking` yourself. MiniMax-M3 (and forward-compatible M3.x) is exempt: M3 emits proper Anthropic thinking blocks and requires thinking active to produce visible content, so OpenClaw keeps M3 on the provider's adaptive thinking path. See the Thinking defaults section under Advanced configuration below.
</Warning>
<Note>
API-key setups use the `minimax` provider id. Model refs follow the form `minimax/MiniMax-M3`.
</Note>
openclaw configureThe MiniMax plugin registers the image-01 model for the image_generate tool on both minimax and minimax-portal, reusing the same MINIMAX_API_KEY or OAuth auth as the text models.
1:1, 16:9, 4:3, 3:2, 2:3, 3:4, 9:16, 21:9{
agents: {
defaults: {
imageGenerationModel: { primary: "minimax/image-01" },
},
},
}
Image generation always uses MiniMax's dedicated image endpoint (/v1/image_generation) and ignores models.providers.minimax.baseUrl, since that field configures the chat/Anthropic-compatible base URL instead. Set MINIMAX_API_HOST=https://api.minimaxi.com to route image generation through the CN endpoint; the default global endpoint is https://api.minimax.io.
The bundled minimax plugin registers MiniMax T2A v2 as a speech provider for messages.tts.
speech-2.8-hdEnglish_expressive_narratorspeech-2.8-hd, speech-2.8-turbo, speech-2.6-hd, speech-2.6-turbo, speech-02-hd, speech-02-turbo, speech-01-hd, speech-01-turbo, speech-01-240228messages.tts.providers.minimax.apiKey, then minimax-portal OAuth/token auth profiles, then Token Plan environment keys (MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY), then MINIMAX_API_KEYminimax-portal OAuth host and strips Anthropic-compatible path suffixes such as /anthropicffmpeg, because e.g. the Feishu/Lark file API only accepts file_type: "opus" for native audio messagesspeed and vol, but pitch is sent as an integer; OpenClaw truncates fractional pitch values before the API request| Setting | Env var | Default | Description |
|---|---|---|---|
messages.tts.providers.minimax.baseUrl | MINIMAX_API_HOST | https://api.minimax.io | MiniMax T2A API host. |
messages.tts.providers.minimax.model | MINIMAX_TTS_MODEL | speech-2.8-hd | TTS model id. |
messages.tts.providers.minimax.voiceId | MINIMAX_TTS_VOICE_ID | English_expressive_narrator | Voice id used for speech output. |
messages.tts.providers.minimax.speed | 1.0 | Playback speed, 0.5..2.0. | |
messages.tts.providers.minimax.vol | 1.0 | Volume, (0, 10]. | |
messages.tts.providers.minimax.pitch | 0 | Integer pitch shift, -12..12. |
The bundled MiniMax plugin registers music generation through the shared music_generate tool for both minimax and minimax-portal.
minimax/music-2.6 (OAuth: minimax-portal/music-2.6)music-2.6-free, music-cover, and music-cover-freelyrics, instrumentalmp3action: "status"{
agents: {
defaults: {
musicGenerationModel: { primary: "minimax/music-2.6" },
},
},
}
The bundled MiniMax plugin registers video generation through the shared video_generate tool for both minimax and minimax-portal.
minimax/MiniMax-Hailuo-2.3 (OAuth: minimax-portal/MiniMax-Hailuo-2.3)MiniMax-Hailuo-2.3-Fast, MiniMax-Hailuo-02, I2V-01-Director, I2V-01-live, and I2V-01resolution (768P or 1080P on Hailuo 2.3/02 models); aspectRatio is not supported and is ignored{
agents: {
defaults: {
videoGenerationModel: { primary: "minimax/MiniMax-Hailuo-2.3" },
},
},
}
The MiniMax plugin registers image understanding separately from the text catalog:
| Provider ID | Default image model | PDF text extraction |
|---|---|---|
minimax | MiniMax-VL-01 | MiniMax-M2.7 |
minimax-portal | MiniMax-VL-01 | MiniMax-M2.7 |
That is why automatic media routing can use MiniMax image understanding even when the bundled text-provider catalog also includes M3 image-capable chat refs. PDF understanding uses MiniMax-M2.7 for text extraction only; MiniMax does not register a PDF-to-image conversion path.
The MiniMax plugin also registers web_search through the MiniMax Token Plan search API (/v1/coding_plan/search).
minimaxMINIMAX_CODE_PLAN_KEYMINIMAX_CODING_API_KEY, MINIMAX_OAUTH_TOKENMINIMAX_API_KEY when it already points at a token-plan credentialplugins.entries.minimax.config.webSearch.region, then MINIMAX_API_HOST, then MiniMax provider base URLsminimax; OAuth CN/global setup can steer region indirectly through models.providers.minimax-portal.baseUrl and can provide bearer auth through MINIMAX_OAUTH_TOKENConfig lives under plugins.entries.minimax.config.webSearch.*.
MiniMax-M3 (and M3.x) is exempt: M3 returns an empty `content` array with `stop_reason: "end_turn"` when thinking is disabled, so OpenClaw removes the implicit disabled default for M3 and, when a thinking level is set, forces `thinking: { type: "adaptive" }` instead.
Available thinking levels per model family:
| Model family | Levels | Default |
| -------------- | ----------------------------------------- | ---------- |
| `MiniMax-M3` | `off`, `adaptive` | `adaptive` |
| `MiniMax-M2.x` | `off`, `minimal`, `low`, `medium`, `high` | `off` |
```json5
{
env: { MINIMAX_API_KEY: "sk-..." },
agents: {
defaults: {
models: {
"anthropic/claude-opus-4-6": { alias: "primary" },
"minimax/MiniMax-M2.7": { alias: "minimax" },
},
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["minimax/MiniMax-M2.7"],
},
},
},
}
```
MiniMax-M3. Alternate chat models: MiniMax-M2.7, MiniMax-M2.7-highspeedMiniMax-VL-01 media providermodels.json if you need exact cost trackingopenclaw models list to confirm the current provider id, then switch with openclaw models set minimax/MiniMax-M3 or openclaw models set minimax-portal/MiniMax-M3- Running `openclaw configure` and selecting a **MiniMax** auth option, or
- Adding the matching `models.providers.minimax` or `models.providers.minimax-portal` block manually, or
- Setting `MINIMAX_API_KEY`, `MINIMAX_OAUTH_TOKEN`, or a MiniMax auth profile so the matching provider can be injected.
Make sure the model id is **case-sensitive**:
- API-key path: `minimax/MiniMax-M3`, `minimax/MiniMax-M2.7`, or `minimax/MiniMax-M2.7-highspeed`
- OAuth path: `minimax-portal/MiniMax-M3`, `minimax-portal/MiniMax-M2.7`, or `minimax-portal/MiniMax-M2.7-highspeed`
Then recheck with:
```bash
openclaw models list
```