0. 結論
プラットフォームは OpenAI Responses API エンドポイント POST /v1/responses を実装しており、Codex の要求に合わせて明確に設計(ストリーミング SSE イベントシーケンス、function ツール呼び出し、store:false によるステートレス互換)されています。
そのため、Codex CLI の接続方法は次の2通りです。
- 直結(推奨):
~/.codex/config.tomlにwire_api = "responses"を設定し、直接/v1/responsesを利用 - cc-switch: グラフィカルツールで Codex / Claude Code などのプロバイダをワンクリックで切り替え
どちらの方法でも課金は完全に同一(同一の事前与信→ルーティング→決済→元帳パイプライン)です。
1. 前提条件
| 項目 | 要件 |
|---|---|
| Codex CLI | インストール済み(v0.142.4+ 推奨、codex --version で確認可) |
| RouteAll アカウント | 登録済みで、Console → API Keys から API キーを作成済み |
| API キー | プレフィックス sk-ra-、一度だけ表示、完全にコピー必須。1つのキーで全モデル・全エンドポイントを利用可能 |
| 残高 | チャージ済み(トークン単位で課金。残高不足時は 402 エラー) |
| モデル名 | プラットフォーム規定のモデル名(§5.1 参照、実際の /v1/models の返却値に従う) |
2. プラットフォーム側の機能と制限 (/v1/responses)
- エンドポイント:
POST https://routeall.ai/v1/responses - 認証:
Authorization: Bearer sk-ra-...
2.1 サポート(Codex 互換)
| 機能 | 説明 |
|---|---|
| テキスト入力 / 出力 | 非ストリーミング JSON とストリーミング SSE の両方に対応 |
| function ツール呼び出し | Codex のエージェントループ:tools を上流に透過 + function_call ストリーミングイベント + function_call_output 入力の再注入 |
| ストリーミング | 完全な Responses SSE イベントシーケンスを生成:response.created → output_item.added → output_text.delta → output_item.done → response.completed(Codex が必要とする3つの不変条件を満たす) |
reasoning.effort |
reasoning_effort として透過 |
| 未知フィールドの許容 | store / include / text / metadata などはすべて無視、400 エラーにならない(Codex 互換) |
2.2 制限(ステートレステキストサブセット)
| フィールド | 動作 |
|---|---|
previous_response_id |
無視 —— ステートレス。Codex は store:false で毎ターン全入力を送信するため自然に互換 |
input_image |
スキップ(画像 part はリクエストを中断せず、テキストのみ抽出) |
組み込みツール (web_search など) |
無視 —— type: "function" のツールのみ透過 |
stream: true + 不正な input |
400(Responses エラーエンベロープ) |
2.3 課金とエラー
- 課金:
/v1/chat/completionsと完全に同一のパイプライン。実測チャージも同等。レスポンスヘッダーX-RouteAll-Charge-Creditは小売課金額(原価ではありません)。 - エラーエンベロープ:
{ "error": { "message", "type", "code", "param" } }。HTTP ステータス:401(キーなし/誤り)、402(残高不足)、429(レート制限)、400(パラメータ不正)、503(上流全停止)。
3. 方法1: Codex CLI 直接接続(Responses API、推奨)
3.1 ~/.codex/config.toml の設定
model = "deepseek-v4-pro" # デフォルトモデル、一覧にある正式名に置き換え
model_provider = "routeall"
[model_providers.routeall]
name = "RouteAll"
base_url = "https://routeall.ai/v1" # プラットフォーム OpenAI 互換ベース URL(/responses は含めない)
env_key = "ROUTEALL_API_KEY"
wire_api = "responses" # responses = /v1/responses を利用(推奨)
3.2 環境変数の設定
# Linux / macOS
export ROUTEALL_API_KEY="sk-ra-あなたのKEY"
# Windows PowerShell
# $env:ROUTEALL_API_KEY = "sk-ra-あなたのKEY"
3.3 起動
codex
3.4 モデルの一時的な切り替え
codex --model Codex-haiku-4-5 "このモジュールをリファクタリングして"
codex --model deepseek-v4-flash "この正規表現を説明して"
3.5 wire_api について
| wire_api | 実際のエンドポイント | 説明 |
|---|---|---|
responses |
POST /v1/responses |
ネイティブな Responses プロトコル(Codex デフォルト)、ストリーミング / ツール呼び出し両対応、推奨 |
chat |
POST /v1/chat/completions |
OpenAI 互換形式。プラットフォームは DTO を緩和(B15)し、content:null のツール型マルチターン呼び出しをサポート |
注:ゲートウェイの
api.サブドメインは現在外部公開されていません(サーバー内部でPUBLIC_API_DOMAIN=api.localhost)。/v1/*はメインサイトrouteall.aiが直接提供するため、base_url はhttps://routeall.ai/v1を使用します。
4. 方法2: cc-switch(グラフィカルなワンクリック切替)
cc-switch はオープンソースのプロバイダ切替ツール(farion1231/cc-switch)で、Codex / Claude Code / OpenCode / Gemini などのプロバイダ設定を管理し、ワンクリックで切り替えられます。
4.1 インストール
GitHub farion1231/cc-switch → Releases から対応 OS のインストーラをダウンロード(Windows / macOS / Linux)。
4.2 プロバイダの追加
- cc-switch を開き、Codex タブへ →「プロバイダ追加」
- 以下を入力:
- プロバイダ名:
RouteAll(任意) - API Host / Base URL:
https://routeall.ai/v1 - API Key:
sk-ra-あなたのKEY - モデルリスト: プラットフォーム規定のモデル名(例:
deepseek-v4-pro、Codex-haiku-4-5、複数行可)
- プロバイダ名:
- 保存
4.3 切り替えを適用
RouteAll を選択 →「切り替え / 有効化」。cc-switch がプロバイダ設定を ~/.codex/config.toml に書き込みます(方法1の設定と同等)。その後、通常通り codex を起動してください。
注:一部の cc-switch バージョンでは Codex のプロトコルが
/v1/chat/completions(つまりwire_api = "chat")に書き換えられる場合があります。プラットフォームは両方の経路に対応(B15 によりツール型クライアントの chat 利用時の 400 エラーを修正済み)しています。ご利用のバージョンがプロトコル選択に対応している場合、よりネイティブな Responses を選択することを推奨します。
5. 検証
5.1 利用可能なモデル一覧の取得(リストを基準に、モデル名を推測しない)
curl https://routeall.ai/v1/models \
-H "Authorization: Bearer sk-ra-あなたのKEY"
# または公開ディレクトリ(認証不要、チャネルを持つモデルのみ表示)
curl https://routeall.ai/v1/public/models
5.2 非ストリーミング(まず経路の疎通確認)
curl https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-あなたのKEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": "こんにちは、一言で自己紹介してください",
"max_output_tokens": 200
}'
成功すると Responses 形式(output[].content[].output_text + output_text + usage)が返ります。
5.3 ストリーミング(Codex の実際の動作)
curl -N https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-あなたのKEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": "短いジョークを言ってください",
"stream": true
}'
イベント順: response.created → output_item.added → output_text.delta ×N → output_item.done → response.completed
5.4 ツール呼び出し(エージェントループ形式)
curl https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-あなたのKEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": [{"role": "user", "content": "17*23 を計算して"}],
"tools": [{
"type": "function",
"function": {
"name": "calculator",
"description": "四則演算を実行",
"parameters": {
"type": "object",
"properties": { "expr": { "type": "string" } }
}
}
}],
"tool_choice": "auto"
}'
output に type: "function_call" 項目(call_id / name / arguments)が含まれ、その後 function_call_output 項目を返信して複数ターンに進めます。
6. トラブルシューティング
| 現象 | 原因と対処 |
|---|---|
401 Unauthorized |
キーが不正 / コピー漏れ / 無効化。キーは sha256 のみ保存され、管理画面に平文表示されません。作成時に完全にコピーしてください |
402 Insufficient balance |
残高不足。Console からチャージ(CNY / USD / USDT) |
429 Rate limited |
キーごとの毎分レート制限(デフォルト 60 RPM、調整可)。同時実行数を下げるか指数バックオフでリトライ |
400 パラメータエラー |
レスポンスボディの error.message を確認(Responses input 不正、モデル名が存在しないなど) |
503 上流エラー |
該当モデルの全チャネルが利用不可。モデルを変更するか、しばらく待って再試行 |
| モデルが「存在しない / 呼び出せない」 | モデル名は /v1/models が返す正式名かつアクティブ(active + チャネルあり)である必要があります。名前を推測しないでください |
Codex が stream closed before response.completed を報告 |
通常はネットワーク断。ゲートウェイがグレースフルに完了(completed を送信)するため、リトライで解決 |
| Codex が 413 Payload Too Large を |