MiniMax M3は、最大1,000,000トークンのコンテキストウィンドウを持つ推論・コーディング向けモデルです。1回の呼び出しで、リポジトリ全体、長大なログ、設計ドキュメントを渡し、それら全体を対象に推論できます。モデルの概要を先に確認したい場合は、MiniMax M3とは何かを参照してください。
この記事では、MiniMax M3 APIを実際に呼び出す手順を説明します。APIキーを作成し、curl、Python、Node.jsでリクエストを送信し、Apidogでリクエストとレスポンスを検査します。手元で試す場合は、Apidogをダウンロードしておくと確認が簡単です。
公式リファレンスはMiniMax APIドキュメントにあります。実装中はタブで開いておくと便利です。
必要なもの
- platform.minimax.ioのMiniMaxアカウント
- APIキー
- 利用料金の支払い方法
- 従量課金クレジット
- サブスクリプショントークンプラン
curlだけなら追加インストールは不要です。SDKを使う場合は、以下を用意してください。
- Python 3.8+
- Node.js 18+
ステップ1:APIキーを取得する
platform.minimax.ioにサインインし、APIキーセクションから新しいキーを作成します。
MiniMaxには主に2種類のキーがあります。
| キー種別 | 課金方法 |
|---|---|
| 通常のAPIキー | 従量課金残高から消費 |
| サブスクリプションキー | Plus、Max、Ultraなどのプラン内トークンクレジットを消費 |
サブスクリプションキーは、プランのトークンがなくなると、そのプランが更新されるか、従量課金キーに切り替えるまで呼び出しできません。
キーは作成時に一度だけ表示されます。コピーして安全に保存してください。
ソースコードに直接貼り付けず、環境変数として設定します。
export MINIMAX_API_KEY="your-key-here"
これにより、Git履歴や共有ファイルに秘密情報が残るリスクを下げられます。エディタや拡張機能でAPIキーを扱う場合の注意点は、VS Code拡張機能のAPIキーセキュリティでも解説しています。
ステップ2:最初のリクエストを送信する
MiniMax M3のチャット補完エンドポイントは次の通りです。
POST https://api.minimax.io/v1/chat/completions
基本設定は以下です。
| 項目 | 値 |
|---|---|
| Base URL | https://api.minimax.io/v1 |
| Endpoint | /chat/completions |
| Auth | Authorization: Bearer $MINIMAX_API_KEY |
| Model | MiniMax-M3 |
まずはcurlで最小構成のリクエストを送ります。
curl https://api.minimax.io/v1/chat/completions \
-H "Authorization: Bearer $MINIMAX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-M3",
"messages": [
{
"role": "user",
"content": "Refactor this function to be async."
}
]
}'
M3は次の方法で呼び出せます。
- 生のHTTP
- OpenAI SDK
- Anthropic SDK
MiniMaxはAnthropic SDKを推奨していますが、OpenAI互換のエンドポイントでも呼び出せます。既存のスタックに合わせて選んでください。
Python:OpenAI SDKで呼び出す
通常のOpenAI SDK設定から変更する主な点は、base_urlです。
from openai import OpenAI
import os
client = OpenAI(
base_url="https://api.minimax.io/v1",
api_key=os.environ["MINIMAX_API_KEY"],
)
response = client.chat.completions.create(
model="MiniMax-M3",
messages=[
{
"role": "user",
"content": "Refactor this function to be async."
}
],
)
print(response.choices[0].message.content)
Node.js:OpenAI SDKで呼び出す
Node.jsでも、baseURLをMiniMaxに向けます。
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.minimax.io/v1",
apiKey: process.env.MINIMAX_API_KEY,
});
const response = await client.chat.completions.create({
model: "MiniMax-M3",
messages: [
{
role: "user",
content: "Refactor this function to be async.",
},
],
});
console.log(response.choices[0].message.content);
Qwen 3.7 APIを使ったことがある場合、このパターンはほぼ同じです。多くのモデルがOpenAI互換インターフェースを提供しているため、移行時はbase_urlまたはbaseURLの変更だけで済むことがあります。
SDK側の詳細は、OpenAI Python SDKとAnthropic SDKのドキュメントを参照してください。
ステップ3:Apidogでリクエストを検査する
アプリケーションに組み込む前に、リクエストを手動で送信してレスポンス形式を確認します。ここでApidogを使うと、ヘッダー、ボディ、レスポンス、ストリーミング形式を確認しやすくなります。
手順は次の通りです。
- 新しいHTTPリクエストを作成する
- メソッドを
POSTに設定する - URLに次を入力する
https://api.minimax.io/v1/chat/completions
- 環境変数に
MINIMAX_API_KEYを追加する - ヘッダーに
Authorizationを追加する
Authorization: Bearer {{MINIMAX_API_KEY}}
-
Content-Typeをapplication/jsonにする - BodyをRAW JSONにして、次のペイロードを貼り付ける
{
"model": "MiniMax-M3",
"messages": [
{
"role": "user",
"content": "Refactor this function to be async."
}
]
}
- Sendをクリックし、レスポンスを確認する
[スクリーンショット:ApidogでのMiniMax-M3のリクエストと応答]
APIキーを環境変数として保存しておくと、チームメイトとリクエスト定義を共有してもキーを漏らしにくくなります。また、従量課金キーとサブスクリプションキーを切り替える場合も、変数の値を変えるだけで済みます。
後でストリーミングを有効にする場合も、Apidogで先にServer-Sent Eventsの形式を確認しておくと、パーサー実装前にレスポンス構造を把握できます。
ステップ4:推論出力を切り替える
M3は推論モデルです。デフォルトでは最終回答を返しますが、中間推論を分離して取得することもできます。
OpenAI SDKを使う場合は、extra_body経由でreasoning_splitを渡します。
from openai import OpenAI
import os
client = OpenAI(
base_url="https://api.minimax.io/v1",
api_key=os.environ["MINIMAX_API_KEY"],
)
response = client.chat.completions.create(
model="MiniMax-M3",
messages=[
{
"role": "user",
"content": "Refactor this function to be async."
}
],
extra_body={
"reasoning_split": True
},
)
print(response.choices[0].message.reasoning_details[0]["text"]) # thinking
print(response.choices[0].message.content) # final answer
reasoning_splitが有効な場合、出力は次のように分かれます。
| 内容 | 取得場所 |
|---|---|
| 中間推論 | response.choices[0].message.reasoning_details[0]["text"] |
| 最終回答 | response.choices[0].message.content |
UIでは、最終回答と推論ログを分けて扱うのがおすすめです。
- ユーザーに表示する:最終回答
- デバッグやレビューで使う:推論ログ
多段階リファクタリング、複雑なバグ調査、推論過程の監査が必要な場合はオンにします。単純でレイテンシ重視の呼び出しでは、余分な推論トークンによる時間とコストを避けるためオフにします。
ステップ5:1Mトークンのコンテキストを扱う
M3の大きな特徴は、最大1,000,000トークンのコンテキストです。たとえば、大きなログファイルを読み込ませて、特定時刻の障害原因を調べさせることができます。
from openai import OpenAI
import os
client = OpenAI(
base_url="https://api.minimax.io/v1",
api_key=os.environ["MINIMAX_API_KEY"],
)
with open("production-2026-05-30.log") as f:
log_text = f.read()
response = client.chat.completions.create(
model="MiniMax-M3",
messages=[
{
"role": "user",
"content": (
"Find the root cause of the 502 spike at 14:20 UTC.\n\n"
f"{log_text}"
),
}
],
)
print(response.choices[0].message.content)
ただし、長文コンテキストには課金上のしきい値があります。
- 入力が512Kトークン以下:標準料金
- 入力が512Kトークン超:長文コンテキスト料金
つまり、400Kトークンから600Kトークンに増やすと、単純な線形増加ではなく料金区分が変わります。
実装時は、モデルに本当に必要な範囲だけを渡してください。
悪い例:
リポジトリ全体 + 全ログ + 全仕様書を毎回送る
良い例:
関連ファイル + 該当ログ範囲 + 必要な仕様部分だけを送る
エージェントで複数回APIを呼ぶ場合、各呼び出しでコンテキストをトリミングすることがコスト管理の重要ポイントです。詳しくはエージェントのトークンコストを削減する方法を参照してください。
ステップ6:ツール呼び出しを使う
M3はツール呼び出しに対応しています。モデルに利用可能な関数を宣言し、モデルが必要に応じて関数呼び出しを返す構成です。
以下は、テスト実行用ツールを宣言する例です。
tools = [
{
"type": "function",
"function": {
"name": "run_tests",
"description": "Run the test suite for a given module path.",
"parameters": {
"type": "object",
"properties": {
"module": {
"type": "string"
},
},
"required": ["module"],
},
},
}
]
response = client.chat.completions.create(
model="MiniMax-M3",
messages=[
{
"role": "user",
"content": "Fix the failing test in auth/session.py and confirm it passes."
}
],
tools=tools,
)
モデルがツールを呼び出すと、レスポンスにtool_calls配列が含まれます。
一般的な処理フローは次の通りです。
- モデルにツール定義を渡す
- モデルが
tool_callsを返す - アプリケーション側で該当関数を実行する
- 実行結果を
toolメッセージとして追加する - 再度APIを呼び、モデルに処理を続けさせる
このハンドシェイクの実装ミスは、エージェント系アプリケーションのバグになりやすい箇所です。ツール配線のパターンと落とし穴は、エージェントワークフローのツール配線で確認できます。
Apidogでは、以下のような複数ターンのやり取りを個別の保存済みリクエストとして再生できます。
- 最初のユーザーリクエスト
- モデルからのツール呼び出しレスポンス
- ツール実行結果
- 続きのモデル呼び出し
エージェントの実行環境だけでデバッグするより、各ホップをHTTPレベルで検証しやすくなります。
ステップ7:マルチモーダル入力を使う
M3はマルチモーダル入力にも対応しています。テキストだけでなく、画像コンテンツを同じメッセージ配列に含められます。
基本的には、標準のコンテンツパーツ形式に従って、テキストと画像を同じmessages内に渡します。
正確なフィールド名やサポート状況は変更される可能性があるため、実装時はAPIリファレンスを確認してください。
料金とティア
MiniMax M3のコストと速度は、主に次の要素で決まります。
- トークンプラン
- 従量課金残高
- サービスティア
- 入力トークン数
- 512Kトークンのしきい値
トークンプランは、利用できるクレジット予算を決めます。サブスクリプションティアには、Plus、Max、Ultraがあり、それぞれサブスクリプションキーで消費されるトークンクレジットが含まれます。
従量課金の場合は、通常のAPIキーで残高から請求されます。
サービスティアはスケジューリング優先度を決めます。
| ティア | 用途 |
|---|---|
standard |
デフォルト。多くのワークロード向け |
priority |
レイテンシ重視、SLAあり、優先処理が必要なトラフィック向け |
実際のコストは、入力サイズ、プラン、サービスティアによって変わります。最新の料金は、MiniMaxの料金とモデルページおよびAPIドキュメントを確認してください。
よくある質問
M3を無料で試せますか?
はい。プランに加入せずに試す方法があります。詳しくはMiniMax M3を無料で利用する方法にまとめています。
どのSDKが使えますか?
主な選択肢は3つです。
- 生のHTTP
- Anthropic SDK
- OpenAI SDK
MiniMaxはAnthropic SDKを推奨していますが、OpenAI SDKでもbase_urlまたはbaseURLをMiniMaxのエンドポイントに向ければ利用できます。
https://api.minimax.io/v1
ストリーミングするには?
リクエストボディに"stream": trueを追加します。
{
"model": "MiniMax-M3",
"stream": true,
"messages": [
{
"role": "user",
"content": "Explain this error log."
}
]
}
APIはServer-Sent Eventsを返します。SDKでは、イベント到着ごとにチャンクを読み取るイテレータを利用できます。実装前にApidogでストリーム形式を確認しておくと安全です。
レート制限は?
レート制限は、アカウントティアとstandardまたはpriorityサービスの利用状況によって異なります。
429エラーが出た場合は、次を検討してください。
- バックオフして再試行する
- リクエスト頻度を下げる
- レイテンシ重視の処理を
priorityに移す
最新の制限値は、アカウントダッシュボードとAPIドキュメントで確認してください。
512Kトークンのしきい値は課金にどう影響しますか?
入力が512Kトークン以下なら標準料金です。512K入力トークンを超えると、長文コンテキスト料金が適用されます。
特にエージェントループでは、呼び出しごとにトークンが積み上がります。毎回すべてのコンテキストを送るのではなく、必要な情報だけに絞ってください。
モデルの重みをセルフホストできますか?
このガイドでは、ホスト型APIを使う方法を扱っています。最も早く試せるのはAPI経由です。
セルフホスティングの可否は、MiniMaxがM3について公開している重みとライセンス条件に依存します。現在の状況はモデルページで確認してください。
まとめ
MiniMax M3を使うための基本手順は次の通りです。
- APIキーを作成する
- キーを環境変数に保存する
- curlで最小リクエストを送る
- PythonまたはNode.js SDKに組み込む
- Apidogで生のリクエストとレスポンスを確認する
- 必要に応じて
reasoning_split、ストリーミング、ツール呼び出しを追加する - 512Kトークンの課金しきい値を意識してコンテキストを削る
最短で理解するには、まずApidogにエンドポイントを設定し、ベアラートークンを環境変数として保存し、リファクタリング用のプロンプトを送信してください。レスポンス形式を確認できれば、コードへの組み込みはすぐに進められます。



Top comments (0)