HopBase への移行

OpenAI・OpenRouter・Anthropic API から HopBase へアプリを移す方法。変更する 3 つの値、SDK ごとの変更前後のコード、1 キー 1 グループのルール、非対応の機能。

既存アプリを HopBase に移すには、Base URL、キー、場合によってはモデル名の 3 つを変えるだけです。リクエストボディ、ストリーミング処理、エラー処理のコードはそのまま使えます。

変更する項目

OpenAIOpenRouterAnthropicHopBase
Base URLhttps://api.openai.com/v1https://openrouter.ai/api/v1https://api.anthropic.comOpenAI プロトコル:https://api.hop-base.com/v1
Anthropic プロトコル:https://api.hop-base.com(/v1 なし)
キーOpenAI のキー1 つの OpenRouter キーで全モデルAnthropic のキー「APIキー」で作成する sk-…。1 つのプラングループに紐づく
モデル名gpt-5.5openai/gpt-5.5、anthropic/claude-sonnet-5claude-sonnet-5ベンダー接頭辞なし。GET /v1/models が返す ID をそのまま使用:gpt-5.5、claude-sonnet-5

モデルファミリーごとのプロトコルは Base URL とプロトコルを参照してください。

1 キー = 1 グループ = 1 モデルファミリー

グループごとにキーを 1 つ作成してください。1 つのキーで全モデルを呼べる OpenRouter とは逆です。HopBase のキーは 1 つのプラングループにだけ紐づき、GET /v1/models はそのグループのモデルだけを返し、グループ外のモデルは 404 model_not_found になります。Claude と GPT の両方を使うアプリには、Claude グループのキーと Codex Plus または Codex Pro グループのキーの 2 つが必要で、モデルに応じてキーを使い分けます。

OpenAI SDK

Base URL を設定し、キーを差し替えます。gpt-5.5 などの OpenAI モデル ID は、キーの GET /v1/models に含まれていればそのままで構いません。

 import os
 from openai import OpenAI

 client = OpenAI(
-    api_key=os.environ["OPENAI_API_KEY"],
+    base_url="https://api.hop-base.com/v1",
+    api_key=os.environ["HOPBASE_OPENAI_API_KEY"],
 )

 resp = client.chat.completions.create(
     model="gpt-5.5",
     messages=[{"role": "user", "content": "Hello"}],
 )

コードを変えたくない場合、どちらの SDK も環境変数 OPENAI_BASE_URL と OPENAI_API_KEY を読み込みます。それぞれ https://api.hop-base.com/v1 と HopBase のキーを設定してください。ほかの例は OpenAI SDK にあります。

Anthropic SDK

Claude は Anthropic Messages API のまま使います。Base URL は /v1 を付けず、キーは「Claude Max(公式フル枠)」グループのものを使ってください。「Claude Max(ccmax)」グループのキーは Claude Code クライアント専用で、SDK からの呼び出しは失敗します。

 import os
 from anthropic import Anthropic

 client = Anthropic(
-    api_key=os.environ["ANTHROPIC_API_KEY"],
+    base_url="https://api.hop-base.com",
+    api_key=os.environ["HOPBASE_CLAUDE_API_KEY"],
 )

 msg = client.messages.create(
     model="claude-sonnet-5",
     max_tokens=1024,
     messages=[{"role": "user", "content": "Hello"}],
 )

こちらも環境変数だけで切り替えられます:ANTHROPIC_BASE_URL=https://api.hop-base.com。詳細は Anthropic SDK を参照してください。

OpenRouter

Base URL とキーを変え、モデル名からベンダー接頭辞を外し、OpenRouter の帰属ヘッダーを削除します。HopBase では不要です。

 import os
 from openai import OpenAI

 client = OpenAI(
-    base_url="https://openrouter.ai/api/v1",
-    api_key=os.environ["OPENROUTER_API_KEY"],
-    default_headers={"HTTP-Referer": "https://your-app.example", "X-Title": "Your App"},
+    base_url="https://api.hop-base.com/v1",
+    api_key=os.environ["HOPBASE_OPENAI_API_KEY"],
 )

 resp = client.chat.completions.create(
-    model="openai/gpt-5.5",
+    model="gpt-5.5",
     messages=[{"role": "user", "content": "Hello"}],
 )

OpenRouter の OpenAI 互換エンドポイント経由で Claude を呼んでいた場合、HopBase には Claude 用のその経路はありません。前節のとおり、Claude グループのキーで Anthropic SDK に切り替えてください。その他のファミリー(Gemini、GLM、Qwen、DeepSeek、Kimi、Grok)は OpenAI SDK のまま、それぞれのグループのキーを使います。

非対応の機能

使っている可能性があるものHopBase での扱い
/v1/chat/completions または /v1/responses での Claude404。Anthropic Messages を使用:Anthropic SDK
/v1/responses または Gemini SDK ネイティブパスでの GeminiChat Completions のみ:Gemini チャット
/v1/responses での Kimi K3Chat Completions のみ:Kimi K3
Embeddings、音声文字起こし、Files、Batch、Assistants、ファインチューニング、モデレーション提供なし。これらのパスは 404
1 つのキーで全モデルグループごとに 1 キー(上記参照)
OpenRouter のモデルフォールバック一覧(models)、provider ルーティング、:online / :free などのモデル接尾辞非対応。削除して単一のモデル ID を送信

エンドポイントの一覧は Base URL とプロトコルにあります。

移行後の確認

キーのモデル一覧を取得

新しいキーで GET https://api.hop-base.com/v1/models を呼び、レスポンスに含まれる ID だけを使います。

小さなリクエストを 1 つ送信

「ok とだけ返答して」と依頼し、200 を確認します。404 の多くは、モデルがこのキーのグループに無いか、Base URL のプロトコルが違うことが原因です。エラーコードと再試行を参照してください。

キーの利用可能額を確認

GET https://api.hop-base.com/v1/usage がキーの利用可能残高を返します。項目の説明はアカウント・カタログ APIにあります。

このページの内容