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/modelsAnthropic /v1/models schema + OpenAI /v1/models schema のフィールドスーパーセットにしました:

フィールド由来プロトコル説明
type: "model"AnthropicAnthropic SDK が検査
id共通両側で使用
display_nameAnthropicAnthropic SDK が表示名に使う
created_at(ISO 文字列)Anthropicハードコード "2026-01-01T00:00:00Z"
object: "model"OpenAIOpenAI SDK が検査
created(Unix 秒)OpenAIハードコード 1767225600(= created_at と同時刻)
owned_by: "cc-router"OpenAIOpenAI SDK が owner 表示に使う

両 SDK とも extra: allow で未知フィールドを無視するため、同一 JSON が両側で合法です。

外側 wrapper もスーパーセット:

フィールド由来プロトコル
object: "list"OpenAI(list wrapper)
data: [...]共通
has_more: falseAnthropic(page wrapper)
first_id / last_idAnthropic

リクエスト

GET /v1/models
  • クエリパラメータなし、ボディなし
  • 認証なし(許可リスト、/health および全 OPTIONS プリフライトと同じ扱い)
  • レスポンス:200 OKContent-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-haikumodel-opus / model-sonnet / model-haiku
Anthropic バージョン名claude-opus-4-7 / claude-sonnet-4-6 / claude-haiku-4-5model-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-minimodel-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 は常に falsebefore_id / after_id 非対応ページング対応
model-fallback一覧に含まれない(暗黙的にのみ発火可能)該当なし
フィールドAnthropic + OpenAI スーパーセット各自のフィールドのみ

固定の 18 ID を返すのは、CC / 任意の Anthropic クライアント / 任意の OpenAI Responses クライアントが、cc-router がどの上流サブスクリプションにルーティングしているかにかかわらず常に同じ仮想モデル一覧を見られるようにするためです——これらはすべて cc-router の仮想モデルであり、実際のルーティングは POST /v1/messagesPOST /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 OKContent-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 には露出させていません。