| メソッド | パス | 目的 |
|---|---|---|
HEAD |
/ |
Liveness プローブ |
GET |
/ |
人間可読なランディング(バージョン + エンドポイント一覧) |
GET |
/health |
ヘルスチェック — {"status":"ok","version":"x.y.z"} |
GET |
/v1/models |
Model discovery — あなたの [[models]] エントリを返す |
GET |
/routes |
shunt ネイティブのルート discovery — 設定された [[routes]] テーブルをそのまま返す(model → provider/upstream_model/effort のマッピング、claude プレフィックスの discovery エイリアスを含む)。/v1/models とは別物で、後者はより狭い Anthropic プロトコルの discovery レスポンス(id/display_name のみ)を提供する |
POST |
/v1/messages |
推論 — リクエストの model id に従ってルーティング |
POST |
/v1/messages/count_tokens |
トークンカウント |
GET |
/admin |
管理ダッシュボード(HTML)。未サインイン時は /admin/login へリダイレクト |
GET, POST |
/admin/login |
管理トークンのログインフォームとブラウザーセッションの作成 |
POST |
/admin/logout |
ブラウザーセッションの破棄 |
GET |
/admin/accounts |
Claude アカウントストアのメタデータ: 名前、種類、有効期限、UUID。トークン本体は決して返さない |
GET |
/admin/accounts/codex |
Codex アカウントストアのメタデータ: 名前、有効期限、ChatGPT アカウント ID。トークン本体は決して返さない |
GET |
/admin/pool |
claude_oauth / chatgpt_oauth provider ごとのプール状態。Codex はクォータヘッダーを送らないため使用率フィールドは空 |
POST |
/admin/accounts/claude |
{name, mode} で Claude のブラウザープロビジョニングを開始。mode は oauth または setup_token で、省略時は setup_token。{authorize_url} を返す |
POST |
/admin/accounts/claude/{name}/complete |
<code>#<state> を含む {code} で Claude プロビジョニングを完了。アカウントを保存し、有効(live)かどうかを報告 |
DELETE |
/admin/accounts/claude/{name} |
指定した Claude アカウントのストアファイルを削除 |
POST |
/admin/accounts/codex |
{name} で ChatGPT OAuth を開始し、{authorize_url} を返す |
POST |
/admin/accounts/codex/{name}/complete |
localhost の redirect URL 全体または <code>#<state> を含む {code} で Codex プロビジョニングを完了 |
DELETE |
/admin/accounts/codex/{name} |
指定した Codex アカウントのストアファイルを削除 |
POST |
/backend-api/codex/responses |
Inbound Codex CLI パススルー — 実際の ChatGPT バックエンドパスをミラー |
POST |
/responses |
Inbound Codex CLI パススルー — bare base_url 形式 |
POST |
/v1/responses |
Inbound Codex CLI パススルー — /v1 サフィックスの base_url 形式 |
POST |
/backend-api/codex/analytics-events/events |
Codex CLI analytics sink — 受理して破棄し、サニタイズ済みイベント名のカウンターのみ記録 |
POST |
/codex/analytics-events/events |
Codex CLI analytics sink — ルート形式の chatgpt_base_url |
/admin* ルートは [server.admin] が設定されている場合にのみ存在します。そのテーブルがなければ、いずれも登録されません。
Inbound Codex Responses と analytics のルートは [server.codex_endpoint] が設定されている場合にのみ存在します。Responses ルートは OpenAI Responses のリクエストとレスポンスをそのまま中継します。2 つの analytics ルートは同じ inbound auth ポリシーを適用し、クライアント payload を転送または保持せず、認証後は不正な JSON やサイズ超過の body にも 200 {} を返します。サニタイズ済みイベント名だけを shunt.codex_client_events に記録し、metric sink がなければ純粋な破棄 sink として動作します。
GET / と GET /health は、[server.auth] が有効なときも開いたままです(ヘルスチェックツールは通常トークンを付けられません)。機密情報は何も公開しません — ステータス、バージョン、およびすでに公開されているエンドポイント一覧のみです。
ゲートウェイプロトコル
shunt は公式の Claude Code LLM ゲートウェイプロトコルを実装します: 正しいヘッダーとボディフィールドの転送、機能のパススルー、システムプロンプトのアトリビューション処理。ゲートウェイ所有のエラーは Anthropic のエラー形で返され、上流のコンテキストオーバーフローエラーは Anthropic の prompt is too long の文言へ書き換えられて Claude Code のコンパクト&リトライが発火し、ストリーミングレスポンスはバッファリングなしで中継されます(オプションでキープアライブ ping 付き)。