- Third-party
- Zero data retention
MiniMax's M3 language model with frontier coding and agentic capabilities, a 1M token context window, and multilingual support.
| Model Info | |
|---|---|
| Context Window ↗ | 1,000,000 tokens |
| Terms and License | link ↗ |
| More information | link ↗ |
| Zero data retention | Yes |
| Request formats | Chat Completions, Anthropic Messages |
| Pricing | View pricing in the Cloudflare dashboard ↗ |
Usage
const response = await env.AI.run(
'minimax/m3',
{ max_tokens: 2048, messages: [{ content: 'What is the capital of France?', role: 'user' }] },
)
console.log(response)curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "minimax/m3",
"max_tokens": 2048,
"messages": [
{
"content": "What is the capital of France?",
"role": "user"
}
]
}'The capital of France is **Paris**.
{
"id": "066cf8a95614a7ebfcaa6ffd7f2cd663",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "The capital of France is **Paris**.",
"name": "MiniMax AI",
"audio_content": "",
"reasoning_content": "The user is asking a simple factual question: \"What is the capital of France?\" This is straightforward - the capital of France is Paris.",
"reasoning_details": [
{
"type": "reasoning.text",
"id": "reasoning-text-1",
"format": "MiniMax-response-v1",
"index": 0,
"text": "The user is asking a simple factual question: \"What is the capital of France?\" This is straightforward - the capital of France is Paris."
}
]
},
"finish_reason": "stop"
}
],
"created": 1780336041,
"model": "MiniMax-M3",
"object": "chat.completion",
"usage": {
"total_tokens": 221,
"prompt_tokens": 183,
"completion_tokens": 38,
"total_characters": 0,
"prompt_tokens_details": {
"cached_tokens": 114
}
},
"input_sensitive": false,
"output_sensitive": false,
"base_resp": {
"status_code": 0,
"status_msg": ""
},
"input_sensitive_type": 0,
"output_sensitive_type": 0,
"output_sensitive_int": 0,
"gatewayMetadata": {
"keySource": "Unified"
}
}Examples
With System Prompt — Using a system prompt to guide behavior
const response = await env.AI.run(
'minimax/m3',
{
max_tokens: 2048,
messages: [
{
content:
'You are a helpful cooking assistant. Give concise recipes with metric measurements.',
role: 'system',
},
{ content: 'How do I make a simple pasta aglio e olio?', role: 'user' },
],
temperature: 0.7,
},
)
console.log(response)curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "minimax/m3",
"max_tokens": 2048,
"messages": [
{
"content": "You are a helpful cooking assistant. Give concise recipes with metric measurements.",
"role": "system"
},
{
"content": "How do I make a simple pasta aglio e olio?",
"role": "user"
}
],
"temperature": 0.7
}'# Pasta Aglio e Olio A classic Italian dish that comes together in minutes with just a few ingredients. **Serves:** 2 | **Prep:** 5 min | **Cook:** 15 min ## Ingredients - 200 g spaghetti or linguine - 80 ml extra virgin olive oil - 4 garlic cloves, thinly sliced - 1–2 small dried red chilies, crushed (or ¼ tsp chili flakes) - Salt, for pasta water - 15 g fresh flat-leaf parsley, chopped - Grated Parmesan or Pecorino (optional, traditionalists skip it) ## Method 1. **Boil pasta:** Bring a large pot of well-salted water to a rolling boil. Cook the pasta until al dente (about 1 minute less than package instructions). Reserve 1 cup of pasta water before draining. 2. **Infuse oil:** While the pasta cooks, gently heat the olive oil in a wide pan over low-medium heat. Add the garlic and chilies, and cook slowly for 2–3 minutes until the garlic turns pale golden. **Don't let it brown** — it will turn bitter. 3. **Combine:** Add the drained pasta to the pan with a splash of reserved pasta water. Toss vigorously over medium heat for about 1 minute so the pasta absorbs the oil. 4. **Finish:** Add more pasta water as needed to create a light, silky sauce that coats the noodles. Stir in the parsley and season with salt. 5. **Serve** immediately, topped with cheese if using. ## Tips - Cold olive oil + slow heat = better flavor extraction. - The starch in the pasta water is key to a glossy, emulsified sauce. Buon appetito! 🍝
{
"id": "066cf8abfaba58c357c660ebfad38073",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "# Pasta Aglio e Olio\n\nA classic Italian dish that comes together in minutes with just a few ingredients.\n\n**Serves:** 2 | **Prep:** 5 min | **Cook:** 15 min\n\n## Ingredients\n- 200 g spaghetti or linguine\n- 80 ml extra virgin olive oil\n- 4 garlic cloves, thinly sliced\n- 1–2 small dried red chilies, crushed (or ¼ tsp chili flakes)\n- Salt, for pasta water\n- 15 g fresh flat-leaf parsley, chopped\n- Grated Parmesan or Pecorino (optional, traditionalists skip it)\n\n## Method\n1. **Boil pasta:** Bring a large pot of well-salted water to a rolling boil. Cook the pasta until al dente (about 1 minute less than package instructions). Reserve 1 cup of pasta water before draining.\n2. **Infuse oil:** While the pasta cooks, gently heat the olive oil in a wide pan over low-medium heat. Add the garlic and chilies, and cook slowly for 2–3 minutes until the garlic turns pale golden. **Don't let it brown** — it will turn bitter.\n3. **Combine:** Add the drained pasta to the pan with a splash of reserved pasta water. Toss vigorously over medium heat for about 1 minute so the pasta absorbs the oil.\n4. **Finish:** Add more pasta water as needed to create a light, silky sauce that coats the noodles. Stir in the parsley and season with salt.\n5. **Serve** immediately, topped with cheese if using.\n\n## Tips\n- Cold olive oil + slow heat = better flavor extraction.\n- The starch in the pasta water is key to a glossy, emulsified sauce.\n\nBuon appetito! 🍝",
"name": "MiniMax AI",
"audio_content": "",
"reasoning_content": "The user is asking for a simple pasta aglio e olio recipe. The system prompt says I should give concise recipes with metric measurements. Let me provide a classic, simple recipe.",
"reasoning_details": [
{
"type": "reasoning.text",
"id": "reasoning-text-1",
"format": "MiniMax-response-v1",
"index": 0,
"text": "The user is asking for a simple pasta aglio e olio recipe. The system prompt says I should give concise recipes with metric measurements. Let me provide a classic, simple recipe."
}
]
},
"finish_reason": "stop"
}
],
"created": 1780336043,
"model": "MiniMax-M3",
"object": "chat.completion",
"usage": {
"total_tokens": 595,
"prompt_tokens": 197,
"completion_tokens": 398,
"total_characters": 0,
"prompt_tokens_details": {
"cached_tokens": 114
}
},
"input_sensitive": false,
"output_sensitive": false,
"base_resp": {
"status_code": 0,
"status_msg": ""
},
"input_sensitive_type": 0,
"output_sensitive_type": 0,
"output_sensitive_int": 0,
"gatewayMetadata": {
"keySource": "Unified"
}
}Multi-turn Conversation — Continuing a conversation with context
const response = await env.AI.run(
'minimax/m3',
{
max_tokens: 2048,
messages: [
{ content: 'What are the main differences between TCP and UDP?', role: 'user' },
{
content:
'TCP is connection-oriented and guarantees delivery, while UDP is connectionless and faster but without delivery guarantees.',
role: 'assistant',
},
{ content: 'When would I choose UDP over TCP?', role: 'user' },
],
temperature: 0.5,
},
)
console.log(response)curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "minimax/m3",
"max_tokens": 2048,
"messages": [
{
"content": "What are the main differences between TCP and UDP?",
"role": "user"
},
{
"content": "TCP is connection-oriented and guarantees delivery, while UDP is connectionless and faster but without delivery guarantees.",
"role": "assistant"
},
{
"content": "When would I choose UDP over TCP?",
"role": "user"
}
],
"temperature": 0.5
}'Use UDP for time-sensitive applications like video streaming, online gaming, or VoIP where speed matters more than perfect reliability.
{
"id": "066cf8bb1c666fc68c6810518100c7ba",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Use UDP for time-sensitive applications like video streaming, online gaming, or VoIP where speed matters more than perfect reliability.",
"name": "MiniMax AI",
"audio_content": "",
"reasoning_content": ""
},
"finish_reason": "stop"
}
],
"created": 1780336059,
"model": "MiniMax-M3",
"object": "chat.completion",
"usage": {
"total_tokens": 250,
"prompt_tokens": 225,
"completion_tokens": 25,
"total_characters": 0,
"prompt_tokens_details": {
"cached_tokens": 114
}
},
"input_sensitive": false,
"output_sensitive": false,
"base_resp": {
"status_code": 0,
"status_msg": ""
},
"input_sensitive_type": 0,
"output_sensitive_type": 0,
"output_sensitive_int": 0,
"gatewayMetadata": {
"keySource": "Unified"
}
}Creative Writing — Higher temperature for creative output
const response = await env.AI.run(
'minimax/m3',
{
max_tokens: 2048,
messages: [{ content: 'Write a haiku about programming.', role: 'user' }],
temperature: 0.9,
},
)
console.log(response)curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "minimax/m3",
"max_tokens": 2048,
"messages": [
{
"content": "Write a haiku about programming.",
"role": "user"
}
],
"temperature": 0.9
}'Fingers on the keys, Building worlds from empty void— Code becomes the light.
{
"id": "066cf8be5675980f2ff647974879fb77",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Fingers on the keys,\nBuilding worlds from empty void—\nCode becomes the light.",
"name": "MiniMax AI",
"audio_content": "",
"reasoning_content": "The user wants a haiku about programming. A haiku is a traditional Japanese poem with three lines following a 5-7-5 syllable pattern. I should create one that captures something meaningful about programming.\n\nLet me think of a few options:\n\n1. About debugging:\nLines (5-7-5):\n- \"Bugs hide in the code\" (4) - need 5\n- \"Silent errors whisper\" (6) - need 7\n- \"Find them, fix, deploy\" (5) ✓\n\nLet me recount:\n- \"Bugs hide in the code\" - Bugs(1) hide(2) in(3) the(4) code(5) = 5 ✓\n- \"Silent errors whisper\" - Si-lent(2) er-rors(4) whis-per(6) = 6, need 7\n- Try: \"Silent errors always whisper\" - 7 ✓\n- \"Find them, fix, deploy\" - Find(1) them(2) fix(3) de-ploy(5) = 5 ✓\n\n2. About code in general:\n- \"Logic flows like streams\" (5) - Lo-gic(2) flows(3) like(4) streams(5) = 5 ✓\n- \"Through brackets and curved braces\" (7) - Through(1) brack-ets(3) and(4) curved(5) bra-ces(7) = 7 ✓\n- \"Dreams made into life\" (5) - Dreams(1) made(2) in-to(4) life(5) = 5 ✓\n\n3. Another option:\n- \"Fingers on the keys\" (5) - Fin-gers(2) on(3) the(4) keys(5) = 5 ✓\n- \"Building worlds from nothing\" (7) - Build-ing(2) worlds(3) from(4) no-thing(6) = 6, need 7\n- Try: \"Building worlds from empty void\" - Build-ing(2) worlds(3) from(4) emp-ty(6) void(7) = 7 ✓\n- \"Code becomes the light\" (5) - Code(1) be-comes(3) the(4) light(5) = 5 ✓\n\nLet me go with option 2 or 3, both are nice. I'll provide one clean haiku and maybe offer an alternative.\n\nActually, let me just give one good one. Option 3 feels more poetic and evocative.\n\nLet me verify option 3 once more:\n- \"Fingers on the keys\" - Fin-gers(2) on(3) the(4) keys(5) = 5 ✓\n- \"Building worlds from empty void\" - Build-ing(2) worlds(3) from(4) emp-ty(6) void(7) = 7 ✓\n- \"Code becomes the light\" - Code(1) be-comes(3) the(4) light(5) = 5 ✓\n\nThat works well. I could also provide a simpler one focused on a different aspect of programming.\n\nI'll give a haiku with a clean delivery. Let me also think about a second option to make it more useful, or just stick with one well-crafted one.\n\nI'll provide one haiku and keep it concise.",
"reasoning_details": [
{
"type": "reasoning.text",
"id": "reasoning-text-1",
"format": "MiniMax-response-v1",
"index": 0,
"text": "The user wants a haiku about programming. A haiku is a traditional Japanese poem with three lines following a 5-7-5 syllable pattern. I should create one that captures something meaningful about programming.\n\nLet me think of a few options:\n\n1. About debugging:\nLines (5-7-5):\n- \"Bugs hide in the code\" (4) - need 5\n- \"Silent errors whisper\" (6) - need 7\n- \"Find them, fix, deploy\" (5) ✓\n\nLet me recount:\n- \"Bugs hide in the code\" - Bugs(1) hide(2) in(3) the(4) code(5) = 5 ✓\n- \"Silent errors whisper\" - Si-lent(2) er-rors(4) whis-per(6) = 6, need 7\n- Try: \"Silent errors always whisper\" - 7 ✓\n- \"Find them, fix, deploy\" - Find(1) them(2) fix(3) de-ploy(5) = 5 ✓\n\n2. About code in general:\n- \"Logic flows like streams\" (5) - Lo-gic(2) flows(3) like(4) streams(5) = 5 ✓\n- \"Through brackets and curved braces\" (7) - Through(1) brack-ets(3) and(4) curved(5) bra-ces(7) = 7 ✓\n- \"Dreams made into life\" (5) - Dreams(1) made(2) in-to(4) life(5) = 5 ✓\n\n3. Another option:\n- \"Fingers on the keys\" (5) - Fin-gers(2) on(3) the(4) keys(5) = 5 ✓\n- \"Building worlds from nothing\" (7) - Build-ing(2) worlds(3) from(4) no-thing(6) = 6, need 7\n- Try: \"Building worlds from empty void\" - Build-ing(2) worlds(3) from(4) emp-ty(6) void(7) = 7 ✓\n- \"Code becomes the light\" (5) - Code(1) be-comes(3) the(4) light(5) = 5 ✓\n\nLet me go with option 2 or 3, both are nice. I'll provide one clean haiku and maybe offer an alternative.\n\nActually, let me just give one good one. Option 3 feels more poetic and evocative.\n\nLet me verify option 3 once more:\n- \"Fingers on the keys\" - Fin-gers(2) on(3) the(4) keys(5) = 5 ✓\n- \"Building worlds from empty void\" - Build-ing(2) worlds(3) from(4) emp-ty(6) void(7) = 7 ✓\n- \"Code becomes the light\" - Code(1) be-comes(3) the(4) light(5) = 5 ✓\n\nThat works well. I could also provide a simpler one focused on a different aspect of programming.\n\nI'll give a haiku with a clean delivery. Let me also think about a second option to make it more useful, or just stick with one well-crafted one.\n\nI'll provide one haiku and keep it concise."
}
]
},
"finish_reason": "stop"
}
],
"created": 1780336062,
"model": "MiniMax-M3",
"object": "chat.completion",
"usage": {
"total_tokens": 912,
"prompt_tokens": 183,
"completion_tokens": 729,
"total_characters": 0,
"prompt_tokens_details": {
"cached_tokens": 114
}
},
"input_sensitive": false,
"output_sensitive": false,
"base_resp": {
"status_code": 0,
"status_msg": ""
},
"input_sensitive_type": 0,
"output_sensitive_type": 0,
"output_sensitive_int": 0,
"gatewayMetadata": {
"keySource": "Unified"
}
}Parameters
▶messages[]
arrayrequiredtemperature
numberminimum: 0maximum: 1max_tokens
numberexclusiveMinimum: 0max_completion_tokens
numberexclusiveMinimum: 0top_p
numberminimum: 0maximum: 1stream
boolean▶stream_options{}
object▶tools[]
arraytool_choice
stringenum: none, auto▶response_format{}
objectmask_sensitive_info
boolean▶messages[]
arrayrequiredmax_tokens
numberrequiredexclusiveMinimum: 0system
stringtemperature
numberminimum: 0maximum: 1top_p
numberminimum: 0maximum: 1top_k
numberexclusiveMinimum: 0stream
boolean▶metadata{}
objectid
string▶choices[]
arraycreated
numbermodel
stringobject
stringenum: chat.completion, chat.completion.chunk▶usage{}
objectinput_sensitive
booleanoutput_sensitive
boolean▶base_resp{}
objectid
stringtype
stringconst: messagerole
stringconst: assistant▶content[]
arraymodel
stringstop_reason
string | null▶usage{}
object