コンテンツにスキップ

Models

モデル一覧エンドポイントは 1 つの問いに答えます。現在のトークンでどのモデルを呼び出せるかです。返されるのは、トークンの権限・グループ・公開状態でフィルタされた結果であり、プラットフォーム全体のモデルカタログではありません。リクエストの model は必ずこの一覧に含まれる値でなければなりません。

GET /v1/models
Terminal window
curl https://api.routeapi.ai/v1/models \
-H "Authorization: Bearer $ROUTEAPI_KEY"

レスポンス:

{
"success": true,
"object": "list",
"data": [
{
"id": "gpt-5.5",
"object": "model",
"created": 1626777600,
"owned_by": "openai",
"supported_endpoint_types": ["openai", "openai-response"]
},
{
"id": "claude-sonnet-4-5",
"object": "model",
"created": 1626777600,
"owned_by": "anthropic",
"supported_endpoint_types": ["openai", "anthropic"]
},
{
"id": "text-embedding-3-large",
"object": "model",
"created": 1626777600,
"owned_by": "openai",
"supported_endpoint_types": ["embeddings"]
}
]
}
フィールド説明
id呼び出し時に model に指定する値。唯一信頼できるモデル識別子
object固定で "model"
created固定のプレースホルダ値 1626777600。実際の公開日時ではありません。並び替えや新旧の判断に使わないでください
owned_byモデルが属するチャネルタイプ(openai、anthropic など)。プラットフォームのカスタムモデルは custom
supported_endpoint_typesこのモデルで利用できるエンドポイントタイプの一覧。下記のエンドポイントタイプを参照

レスポンスのトップレベルには success と、OpenAI スタイルの object/data が同時に存在します。OpenAI SDK は data のみを読むため、追加の success はパースに影響しません。

data の順序は安定性が保証されず、2 回のリクエストで異なる場合があります。順序を固定したい場合はクライアント側で並び替えてください。

supported_endpoint_types は RouteAPI の拡張フィールドであり、モデル一覧における唯一の能力シグナルです。このモデルがどのプロトコル入口から呼び出せるかを示します。

値対応するエンドポイント
openaiPOST /v1/chat/completions
openai-responsePOST /v1/responses
anthropicPOST /v1/messages
geminiPOST /v1beta/models/{model}:generateContent
embeddingsPOST /v1/embeddings
image-generationPOST /v1/images/generations
jina-rerankPOST /v1/rerank
openai-videoOpenAI 動画生成エンドポイント
suno-*Suno 系エンドポイント。Suno API を参照

あるモデルの supported_endpoint_types に embeddings が含まれていない場合、そのモデルを /v1/embeddings に渡さないでください。この種の不一致は転送段階で失敗します。

一覧には細粒度の能力フィールドはありません。 ツール呼び出し、画像入力、構造化出力に対応しているかは、モデル一覧エンドポイントでは返されず、supports_tools / supports_vision のようなフィールドもありません。これらの能力は上流モデル自身によって決まるため、確認方法はモデルプロバイダのドキュメントを参照するか、対象モデルで実際にリクエストを 1 回送って検証することです。コンテキスト長、モダリティ、価格などのメタデータも同様にこのエンドポイントには含まれず、コンソールのモデル広場ページに表示されます。

GET /v1/models/{model}
Terminal window
curl https://api.routeapi.ai/v1/models/gpt-5.5 \
-H "Authorization: Bearer $ROUTEAPI_KEY"

存在する場合はモデルオブジェクトをそのまま返します(data でラップされません):

{
"id": "gpt-5.5",
"object": "model",
"created": 1626777600,
"owned_by": "openai"
}

存在しない場合、または現在のアカウントから見えない場合は次を返します:

{
"error": {
"message": "The model 'foo' does not exist",
"type": "invalid_request_error",
"param": "model",
"code": "model_not_found"
}
}

HTTP ステータスコードは 200 のままであることに注意してください。 このエンドポイントはエラーをレスポンスボディの error フィールドに入れ、「モデルが存在しない」ことをステータスコードで表現しません。クライアントはレスポンスボディに error があるかどうかを必ず確認する必要があります。HTTP ステータスコードだけを見ると、失敗を成功と見なしてしまいます。

現在のアカウントから見えないモデルと、本当に存在しないモデルは完全に同じエラーを返すため、このエンドポイントで両者を区別することはできません。

同じ利用可能モデル集合を 3 つのプロトコル形式で取得できます。ご利用の SDK に合わせて選んでください。

GET /v1/models に x-api-key と anthropic-version の両方のリクエストヘッダーを付けると、Anthropic スタイルで返します:

Terminal window
curl https://api.routeapi.ai/v1/models \
-H "x-api-key: $ROUTEAPI_KEY" \
-H "anthropic-version: 2023-06-01"
{
"data": [
{
"id": "claude-sonnet-4-5",
"created_at": "2021-07-20T12:00:00Z",
"display_name": "claude-sonnet-4-5",
"type": "model"
}
],
"first_id": "claude-sonnet-4-5",
"has_more": false,
"last_id": "claude-sonnet-4-5"
}

この形式に切り替わるには 2 つのリクエストヘッダーが同時に存在する必要があり、x-api-key だけの場合は OpenAI 形式のままです。display_name は id と同じ値で、コンソール上の表示名ではありません。has_more は常に false です。一覧は一度に全件返され、ページネーションはありません。一覧が空の場合、first_id と last_id は空文字列になります。

Terminal window
curl "https://api.routeapi.ai/v1beta/models" \
-H "x-goog-api-key: $ROUTEAPI_KEY"
{
"models": [
{ "name": "gemini-2.5-pro", "displayName": "gemini-2.5-pro" }
],
"nextPageToken": null
}

Gemini 形式のモデルオブジェクトには inputTokenLimit、supportedGenerationMethods などのフィールドも含まれますが、RouteAPI が値を入れるのは name と displayName のみで、その他のフィールドは null を返します。これらの空フィールドでモデルの能力を判断しないでください。

Gemini プロトコルのモデル一覧には /v1beta/models パスを使用し、/v1/models に Gemini のリクエストヘッダーを付けないでください。

クライアントの Base URL を /v1 なし(例: https://api.routeapi.ai)に設定している場合も GET /models は利用可能で、内部で /v1/models に書き換えられます。

一覧内容を決める 4 つのフィルタ

Section titled “一覧内容を決める 4 つのフィルタ”

モデルがあなたの一覧に現れるには、4 つのフィルタをすべて通過する必要があります。「モデルが一覧にない」ことを調査するときは、この順序で確認してください。

  1. トークンのモデルホワイトリスト — このトークンでモデル制限が有効な場合、一覧はホワイトリストと他の条件の積集合になります。無効なら次の項目へ進みます。
  2. グループで有効なモデル — あなたが所属するユーザーグループ(およびトークンで指定されたグループ)で有効になっているモデルの和集合を取ります。利用可能なチャネルが 1 つもないモデルは現れません。
  3. カタログの公開状態 — プラットフォームが厳格メタデータモードを有効にしている場合、未公開のモデルは外部から見て存在しないのと同じになります。
  4. 価格が設定済みか — 価格が未設定のモデルはデフォルトでフィルタされます。ただしプラットフォームが自己利用モードを有効にしている場合、またはアカウント設定で「価格未設定モデルを受け入れる」を有効にしている場合は除きます。

4 つのフィルタを通過した結果、空の一覧が返るのは正常な結果であり、エラーではありません。グループ内のモデルがすべて未公開の場合にこうなります。

同じプラットフォームでも、トークンによってモデル一覧はまったく異なり得ます。A のトークンで一覧を取得し、B のトークンでリクエストを送るのはよくある落とし穴です。調査の際は、この 2 つを必ず同じトークンで行ってください。

リクエストでモデル関連のエラーが出た場合は、まずエラー文言と照らし合わせて該当箇所を特定します。

エラー文言HTTP意味対処
Model name not specified...400リクエストの model が空model フィールドを追加する
This token has no access to model {model}403モデルがそのトークンのホワイトリストにないコンソールでトークンにそのモデルを追加する、またはモデル制限のないトークンに切り替える
This token has no access to any models403トークンでモデル制限が有効だがホワイトリストが空ホワイトリストを設定する
No valid upstream service503モデルに利用可能なチャネルがない(未設定、全て無効、または遮断中)モデル ID のスペルを確認する。一覧内の別のモデルに切り替える。プラットフォーム管理者に連絡する
The model '{model}' does not exist200(ボディ内の error)GET /v1/models/{model} で見つからないか、見えないGET /v1/models で正確な ID を確認する

調査の順序:

  1. 同じトークンで GET /v1/models を呼び出し、モデルが実際に一覧に含まれていることを確認します。
  2. model のスペルを 1 文字ずつ照合します。大文字小文字とハイフンも含みます。モデル ID は厳密一致です。
  3. 呼び出しているエンドポイントが、そのモデルの supported_endpoint_types に含まれていることを確認します。
  4. 以上がすべて正しいのに失敗する場合、問題はチャネル側(利用可能な上流がない、または上流のエラー)にあります。コンソールのログで request ID から具体的な上流レスポンスを確認してください。詳しくはエラーとデバッグを参照。
  • モデル ID を固定する。 コンソールの表示名や一時的なエイリアスを使わないでください。リクエストは id しか受け付けません。
  • 起動時に一覧を 1 回取得してキャッシュする。 業務リクエストごとに問い合わせないでください。利用可能なモデル集合の変化頻度は非常に低いです。
  • created で並び替えない。 すべてのモデルで共有される固定のプレースホルダ値です。
  • 重要な経路には代替モデルを用意する。 メインのモデルが 503 を返したときに切り替えます。
  • 本番投入前に本番トークンで一度実測する。 モデル一覧と実際の呼び出しの両方を実行し、ツール呼び出しや画像入力など実際に使う能力をカバーしてください。これらの能力は一覧エンドポイントでは保証されません。