OpenAI 互換 API
最終更新: 11 11月 2026
概要
OpenAI 互換 API を使うと、OpenAI の chat completions 形式に対応したツールから、ToRun のチャットモデルを ToRun アカウントの支払いで使えます。opencode などのコーディングエージェントは、ToRun の MCP ツールと並べて、ToRun をモデルプロバイダーとして使えます。
アドレスとサインイン
| ベース URL | https://mcp.torun.ai/v1 |
| サインイン | Authorization: Bearer <your developer key> |
MCP サーバーと同じ開発者キーを使います。開発者キーを参照してください。OpenAI 互換 API の追加前に作成したキーには 403 insufficient_scope が返ります。キーの権限は変わらないため、新しいキーを作成してください。
この API のエンドポイントは GET /v1/models と POST /v1/chat/completions の 2 つです。/v1 配下のそれ以外のパスには 404 not_found が返ります。
モデル
GET /v1/models は、最初に torun/auto、続いてあなたのプランで使えるすべてのテキストモデルをモデル ID で一覧表示します。各モデルには次の情報があります。
- 読み取れるテキストの量(
context_length)と、書ける返信の長さ(max_completion_tokens) - ツールを呼び出せるか(
supports_tools)、画像を読み取れるか(supports_vision) - 100 万トークンあたりの Runs での価格(
pricing:inputとoutput)
torun/auto を使うと、ToRun がリクエストごとにモデルを選びます。リクエストに画像があれば画像を読み取れるモデルを、tools が送られていればツールを呼び出せるモデルを選びます。
Chat completions
POST /v1/chat/completions は次を受け付けます。
- ロール
system、developer(systemとして扱われます)、user、assistant、toolを持つmessages toolsとtool_choice(auto、none、required、または名前を指定した 1 つの関数): あなたのツール自身のツールは、ツール呼び出しとしてそのツールに返され、ToRun が実行することはありませんjson_objectを指定したresponse_format。json_schemaも受け付け、JSON で返信しますが、スキーマ自体は強制されませんtemperature(0〜2)、top_p(0〜1)、max_completion_tokensまたはmax_tokens、stop(最大 4 つのシーケンス)、seed、reasoning_effortstreamとstream_options.include_usage
1 より大きい n、logprobs、top_logprobs、音声、テキスト以外の出力は、無視されるのではなく 400 unsupported_parameter で拒否されます。
画像
画像は、image_url パートに data:image/...;base64,... の形でインラインで送ります。1 リクエストあたり最大 20 MB です。リンクで送った画像は 400 image_url_not_supported で拒否されます。ToRun がその画像を取得することはありません。画像はアプリと同様に安全性チェックを受けます。
ストリーミング
"stream": true を指定すると、返信は chat.completion.chunk 形式の server-sent events として届きます。
- 最初のチャンクにはロール
assistantが含まれ、ツール呼び出しはそれぞれのindexとともにストリーミングされます。 - 送るものがない間は、15 秒ごとに
: keepaliveのコメント行が届きます。SSE パーサーはこれを読み飛ばします。 data: [DONE]は、成功したストリームの終わりを示します。stream_options.include_usageを指定すると、最後のチャンクはchoicesが空で、usageを含みます。- ストリーム開始後の失敗は、
[DONE]なしのdata: {"error": ...}イベント 1 つとして届きます。
ストリーミングなしの呼び出しは、110 秒経過すると 504 timeout で停止します。長いリクエストは "stream": true で送ってください。
使用量
usage には、prompt_tokens、completion_tokens、total_tokens、prompt_tokens_details.cached_tokens、completion_tokens_details.reasoning_tokens に加えて、呼び出しにかかった Runs を示す torun_credits が含まれます。
opencode で使う
開発者向けページにある opencode の設定は、MCP サーバーと並べて ToRun をモデルプロバイダーとして追加します。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"torun": {
"npm": "@ai-sdk/openai-compatible",
"name": "ToRun",
"options": { "baseURL": "https://mcp.torun.ai/v1", "apiKey": "{env:TORUN_API_KEY}" },
"models": { "torun/auto": { "name": "ToRun Auto" } }
}
}
}
OpenAI のチャット API に対応したその他のツールも同じように使えます。このページの「OpenAI API」タブには、次の呼び出しが表示されます。
curl https://mcp.torun.ai/v1/chat/completions \
-H "Authorization: Bearer $TORUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "torun/auto", "messages": [{"role": "user", "content": "Hello"}]}'
呼び出しの支払い方法
API 呼び出しには、アプリで同じ使い方をした場合と同じ Runs がかかります。支払いに使われるのは有料の資金だけで、まず有料プランの利用枠から、キーで許可していればその後ウォレットから支払われます。無料枠が API 呼び出しの支払いに使われることはありません。キーの月間と 1 日の上限が適用され、返信はチャットの返信と同じように安全性チェックを受けます。
上限
キーごとに、この API へのリクエストは 1 分あたり 60 回まで、同時に実行できる completions は 4 つまでです。これを超えると、API は Retry-After ヘッダー付きの 429 rate_limit_exceeded を返します。
エラー
エラーはすべて {"error": {"message": ..., "type": ..., "param": ..., "code": ...}} の形をしています。message は、リクエストの Accept-Language ヘッダーで指定した言語で返されます。
| ステータス | コード | 意味 |
|---|---|---|
| 400 | invalid_json, missing_parameter, invalid_parameter, unsupported_parameter |
リクエストの形式が正しくないか、ToRun が対応していないパラメーターを使っています。 |
| 400 | image_url_not_supported |
画像がリンクで送られました。インラインで送ってください。 |
| 400 | content_blocked |
安全性チェックがコンテンツをブロックしました。 |
| 400 | upstream_rejected |
モデルのプロバイダーがリクエストを拒否しました。理由はメッセージに記載されています。 |
| 401 | invalid_api_key |
キーがない、入力が間違っている、または取り消されています。 |
| 402 | insufficient_credits, wallet_spend_not_allowed, spending_cap_reached |
アカウントまたはキーで呼び出しの支払いができません。 |
| 403 | insufficient_scope |
キーがこの API の追加前に作成されました。新しいキーを作成してください。 |
| 403 | model_not_available |
そのモデルはあなたのプランに含まれていません。 |
| 403 | account_suspended, no_developer_access |
アカウントが停止されているか、開発者アクセスがありません。 |
| 404 | model_not_found |
そのモデル ID は GET /v1/models の一覧にありません。 |
| 404 | not_found |
/v1 配下にそのパスはありません。 |
| 429 | rate_limit_exceeded |
呼び出しが多すぎます。Retry-After の時間だけ待ってください。 |
| 500 | internal_error |
ToRun 側で問題が発生しました。 |
| 502 | upstream_error, empty_reply |
モデルのプロバイダーでエラーが起きたか、空の返信が返されました。 |
| 503 | upstream_error, cap_unreadable, scan_unavailable |
呼び出しに必要なサービスが一時的に利用できません。もう一度お試しください。 |
| 504 | timeout |
ストリーミングなしの呼び出しが 110 秒を超えました。 |
支払いができないリクエストには、クライアントが再試行を繰り返さないよう、429 ではなく 402 が返されます。