GET /v1/models
GET /v1/models は cc-router が公開する固定の仮想モデル一覧を返します。この一覧は上流サブスクリプションを反映しません——Claude Code / Codex CLI / Anthropic か OpenAI Models プロトコルを話す任意の SDK が、すべて同じ仮想モデルカタログを見られるようにするためのハードコードされたエイリアス表です。
対応バージョン:cc-router v3.0.0 以上。
設計変更(v3.0+:Anthropic + OpenAI フィールドスーパーセット)
同一パスを Anthropic SDK と OpenAI SDK / OpenAI Responses クライアント双方で使えるようにするため、cc-router は /v1/models を Anthropic /v1/models schema + OpenAI /v1/models schema のフィールドスーパーセットにしました:
| フィールド | 由来プロトコル | 説明 |
|---|---|---|
type: "model" | Anthropic | Anthropic SDK が検査 |
id | 共通 | 両側で使用 |
display_name | Anthropic | Anthropic SDK が表示名に使う |
created_at(ISO 文字列) | Anthropic | ハードコード "2026-01-01T00:00:00Z" |
object: "model" | OpenAI | OpenAI SDK が検査 |
created(Unix 秒) | OpenAI | ハードコード 1767225600(= created_at と同時刻) |
owned_by: "cc-router" | OpenAI | OpenAI SDK が owner 表示に使う |
両 SDK とも extra: allow で未知フィールドを無視するため、同一 JSON が両側で合法です。
外側 wrapper もスーパーセット:
| フィールド | 由来プロトコル |
|---|---|
object: "list" | OpenAI(list wrapper) |
data: [...] | 共通 |
has_more: false | Anthropic(page wrapper) |
first_id / last_id | Anthropic |
リクエスト
GET /v1/models
- クエリパラメータなし、ボディなし
- 認証なし(許可リスト、
/healthおよび全OPTIONSプリフライトと同じ扱い) - レスポンス:
200 OK、Content-Type: application/json
レスポンス
カタログは現在 18 件(2026-05 から OpenAI Responses 互換入口向けに 6 件追加):
{
"object": "list",
"data": [
{ "type": "model", "id": "model-opus", "display_name": "model-opus", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "model-sonnet", "display_name": "model-sonnet", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "model-haiku", "display_name": "model-haiku", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "claude-opus-4-7", "display_name": "claude-opus-4-7", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "claude-sonnet-4-6", "display_name": "claude-sonnet-4-6", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "claude-haiku-4-5", "display_name": "claude-haiku-4-5", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "anthropic/claude-opus-4-7", "display_name": "anthropic/claude-opus-4-7", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "anthropic/claude-sonnet-4-6", "display_name": "anthropic/claude-sonnet-4-6", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "anthropic/claude-haiku-4-5", "display_name": "anthropic/claude-haiku-4-5", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "anthropic/model-opus", "display_name": "anthropic/model-opus", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "anthropic/model-sonnet", "display_name": "anthropic/model-sonnet", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "anthropic/model-haiku", "display_name": "anthropic/model-haiku", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "gpt-5.5", "display_name": "gpt-5.5", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "gpt-5.4", "display_name": "gpt-5.4", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "gpt-5.4-mini", "display_name": "gpt-5.4-mini", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "openai/gpt-5.5", "display_name": "openai/gpt-5.5", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "openai/gpt-5.4", "display_name": "openai/gpt-5.4", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" },
{ "type": "model", "id": "openai/gpt-5.4-mini", "display_name": "openai/gpt-5.4-mini", "created_at": "2026-01-01T00:00:00Z", "object": "model", "created": 1767225600, "owned_by": "cc-router" }
],
"has_more": false,
"first_id": "model-opus",
"last_id": "openai/gpt-5.4-mini"
}
モデル ID グループ
| グループ | ID(全 18 件) | 対応する仮想モデル |
|---|---|---|
| Anthropic 短名 | model-opus / model-sonnet / model-haiku | model-opus / model-sonnet / model-haiku |
| Anthropic バージョン名 | claude-opus-4-7 / claude-sonnet-4-6 / claude-haiku-4-5 | model-opus / model-sonnet / model-haiku |
anthropic/ プレフィックス(バージョン名) | anthropic/claude-{opus,sonnet,haiku}-* | 同上 |
anthropic/ プレフィックス(短名) | anthropic/model-{opus,sonnet,haiku} | 同上 |
| OpenAI エイリアス(v2.3+ 新規) | gpt-5.5 / gpt-5.4 / gpt-5.4-mini | model-opus / model-sonnet / model-haiku |
OpenAI openai/ プレフィックス | openai/gpt-5.5 / openai/gpt-5.4 / openai/gpt-5.4-mini | 同上 |
完全な解決ルールは Anthropic /v1/messages → 仮想モデルマッピング を参照。
公式 /v1/models との相違点
| 項目 | cc-router | 公式 Anthropic / OpenAI |
|---|---|---|
| データソース | 固定の 18 ID(ソースにハードコード) | その API Key でアクセス可能な全モデルを動的に返す |
created_at / created | ハードコード 2026-01-01T00:00:00Z / 1767225600 | 各モデルの実際のリリース日時 |
| ページング | has_more は常に false、before_id / after_id 非対応 | ページング対応 |
model-fallback | 一覧に含まれない(暗黙的にのみ発火可能) | 該当なし |
| フィールド | Anthropic + OpenAI スーパーセット | 各自のフィールドのみ |
固定の 18 ID を返すのは、CC / 任意の Anthropic クライアント / 任意の OpenAI Responses クライアントが、cc-router がどの上流サブスクリプションにルーティングしているかにかかわらず常に同じ仮想モデル一覧を見られるようにするためです——これらはすべて cc-router の仮想モデルであり、実際のルーティングは POST /v1/messages や POST /v1/responses のタイミングで仮想モデルマッピングにより決定されます。
例
# 全仮想モデル ID を列挙
curl -s http://127.0.0.1:23456/v1/models | jq '.data[].id'
# OpenAI SDK 風で列挙
curl -s http://127.0.0.1:23456/v1/models | jq '.data[] | {id, owned_by}'
# Anthropic SDK 風で列挙
curl -s http://127.0.0.1:23456/v1/models | jq '.data[] | {id, display_name, created_at}'
GET /health
/health は cc-router 独自の診断口で、許可リストでは /v1/models と並んでいます。
GET /health
- パラメータなし、ボディなし、認証なし
- レスポンス:
200 OK、Content-Type: text/plain; charset=utf-8、ボディは文字列ok
$ curl -i http://127.0.0.1:23456/health
HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
ok
用途:
- 起動スクリプトが cc-router の待受開始を検知する
- リバースプロキシ(nginx / caddy)の upstream ヘルスチェック
- ブラウザで手軽に生存確認
/health は JSON を返さず、内部状態(バージョン、サブスクリプション数、上流の健康状態など)も一切公開しません。これらの情報は Tauri IPC 経由で UI に渡されており、HTTP には露出させていません。