ベースURLの変更はプロバイダー移行における簡単な部分に過ぎません。移行が失敗するのは、障害発生時の挙動(failure paths)です。OpenAIからTokenLabへ移行するには、OpenAI SDKクライアントのbase_urlとapi_keyという2つの値を変更します。本ガイドの残りの部分では、この変更に伴って確認すべき事項を解説します。具体的には、送信するモデルID、現在の価格、ストリーミング、ツール呼び出し、エラーハンドリング、タイムアウト、および課金についてです。以下の事実はTokenLabのドキュメントおよびライブモデルAPIに基づいており、それぞれ観測日を記載しています。
重要なポイント
- 変更の核心は、TokenLabのベースURL
https://api.tokenlab.sh/v1とTokenLab APIキー(sk-で始まります)の2つの値です。 - TokenLabは、Chat CompletionsおよびResponsesに対するOpenAI SDKのサポートを文書化しています。オプションパラメータ、ツールオプション、およびResponses専用フィールドは、引き続き選択したモデルに依存します。
- 何かを決定する前に、ライブAPIからモデルの価格を確認してください。2026年10月3日時点で、
gpt-5.5は100万トークンあたり入力1.50ドル、出力9.00ドルと記載されていました。 - 本番環境のトラフィックを移行する前に、末尾のチェックリストを実行してください。ほとんどの予期せぬ事態は、正常系ではなく、エラーハンドリング、タイムアウト、課金で発生します。
OpenAIからTokenLabへ移行するための2つの値の変更
まずはキーから始めます。クイックスタート(2026年10月3日観測)に従い、アカウントを作成し、APIキーを作成して、その値をすぐに保存してください。キーは一度しか表示されず、キーリスト内のプレフィックスではリクエストを認証できません。リクエストは選択したモデルの現在の価格で課金されるため、最初の呼び出しの前に残高を確認してください。
次にクライアントを変更します。移行ガイド(2026年10月3日観測)では、手順は以下の通りです:base_url / baseURL を https://api.tokenlab.sh/v1 に設定し、キーを置き換え、GET /v1/models からモデルIDを選択します。
例えば、設定内に gpt-5.5 という文字列を持つサービスを想定します。2つの値を変更した後、その同じ文字列でリクエストが可能になりますが、念のためIDを先に確認することをお勧めします。GET /v1/models および GET /v1/models/{model} は公開されている探索用エンドポイントであり、キーなしで動作します。
Python
import os
from openai import OpenAI
# 変更前: client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
client = OpenAI(
api_key=os.environ["TOKENLAB_API_KEY"],
base_url="https://api.tokenlab.sh/v1",
timeout=30.0,
max_retries=0,
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello, world!"}],
)
print(response.choices[0].message.content)
Node.js
import OpenAI from 'openai';
// 変更前: new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
const client = new OpenAI({
apiKey: process.env.TOKENLAB_API_KEY,
baseURL: 'https://api.tokenlab.sh/v1',
timeout: 30_000,
maxRetries: 0,
});
const completion = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [{ role: 'user', content: 'Hello' }],
});
console.log(completion.choices[0].message.content);
cURL
curl https://api.tokenlab.sh/v1/chat/completions \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"Say hello"}]}'
最初の2つのサンプルにおけるタイムアウトとリトライの設定は、30秒のタイムアウトとSDKリトライ回数ゼロを使用するクイックスタートの例(2026年10月3日観測)を反映しています。テスト中はリトライをゼロに保つことで、失敗したリクエストが隠蔽されず、可視化されるようにしています。
クライアント設定でベースURLを明示的に渡してください。SDKガイド(2026年10月3日観測)では、古い環境変数のエイリアスに頼るよりも、この方法を推奨しています。キーはサーバー上およびシークレットマネージャー内に保持し、クライアント側のコードには決して含めないでください。
モデルIDの選択と価格の確認
移行にあたっては、モデルIDや価格を決め打ちすべきではありません。どちらもモデルAPIに存在します。2026年10月3日に https://api.tokenlab.sh/v1/models/gpt-5.5 および https://api.tokenlab.sh/v1/models/laguna-s-2.1 を読み取りました。両者の価格は2026年10月2日 16:53:30.068Zに最終更新されています。
| 項目 | gpt-5.5 |
laguna-s-2.1 |
|---|---|---|
| ライフサイクルステージ | active | active |
| 最大入力 / 出力トークン | 1,000,000 / 128,000 | 1,048,576 / 131,072 |
| 受け入れ可能なリクエスト形式 | openai_chat_completions, openai_responses |
openai_chat_completions |
| リストされた機能 | coding, json-mode, prompt-cache, reasoning, tool-use, vision | tool-use |
| 入力 (USD / 100万トークン) | 1.5 | 0.1 |
| 出力 (USD / 100万トークン) | 9 | 0.2 |
| キャッシュ読み取り (USD / 100万トークン) | 0.15 | 0.01 |
出典: gpt-5.5 および laguna-s-2.1(いずれも2026年10月3日観測)。
これらのレートを具体的な金額に換算するため、計算例を示します。100万入力トークンと10万出力トークンを使用し、キャッシュヒットがないジョブを想定します。
gpt-5.5: 1 × $1.50 + 0.1 × $9.00 = $1.50 + $0.90 = $2.40laguna-s-2.1: 1 × $0.10 + 0.1 × $0.20 = $0.10 + $0.02 = $0.12
これらはリストされたトークンあたりのレートに基づく見積もりです。最終的な請求額は「使用量(Usage)」レコードに基づきます。トークン化はモデルによって異なるため、同じテキストでもモデルによってトークン数が異なります。
ここではコスト削減を主張するものではありません。現在支払っている金額と比較するには、切り替え日にTokenLabのレートを自身のOpenAI請求書やOpenAIの価格ページと並べて比較してください。価格は変動するため、課金ガイド(2026年10月3日観測)では、コピーした価格表をハードコードしないよう注意を促しています。最新の値については GET /v1/models/:model/pricing を参照してください。
他のモデルIDも同様のパターンに従います。ドキュメントの例では、Chat Completions用に gpt-5.6-terra および gpt-5.6-luna が、独自のルートで claude-sonnet-5 および gemini-3.5-flash が使用されています。トラフィックを向ける前に、各モデルが受け入れる形式を確認してください。より広範な比較については、モデルディレクトリ、OpenRouterとTokenLabの比較、およびモデルランキングを参照してください。画像および動画チームは、2026年版ベストAI画像モデルAPIおよび2026年版ベストAI動画モデルAPIから開始できます。コーディングタスクについては、コーディング向けベストAIモデルを参照してください。
OpenAIからTokenLabへの移行時に次に確認すべきこと
TokenLabは、OpenAI SDKがChat CompletionsおよびResponsesで動作することを文書化しています。これはリクエストおよびレスポンス形式の互換性を意味するものであり、すべてのモデルが同じ挙動をすることを保証するものではありません。API形式ガイド(2026年10月3日観測)では、オプションパラメータはモデルに依存すると述べられています。また、モデルが必ずしも4つのAPI形式すべてを受け入れるわけではなく、tokenlab.accepted_request_formats で受け入れ可能な形式を確認できるとも記載されています。以下の各項目を、実際のトラフィックでテストすべき対象として扱ってください。
ストリーミング
stream: true は、部分的なメッセージデルタをサーバー送信イベント(SSE)として送信します。Create Chat Completionリファレンス(2026年10月3日観測)に記載されている通り、ストリームチャンク内でトークン使用量を受け取るには、stream_options に include_usage: true を設定してください。
stream = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Count to five."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="")
計画しておくべき挙動が2つあります。出力が到着した後にストリームが中断された場合、それを完全なレスポンスとして扱わないでください。エラーハンドリングガイド(2026年10月3日観測)では、再試行すると異なる出力が生成されたり、2回目の課金が発生したりする可能性があると警告しています。また、ストリーミングは課金処理よりも先に終了する可能性があるため、課金IDが存在しない場合があります。
ツール呼び出し
Chat Completionsリファレンスには tools、tool_choice、および parallel_tool_calls がリストされています。並列呼び出しは「選択したモデルでサポートされている場合」に機能するとあります。関数呼び出しは「選択したモデルでサポートされている」と文書化されているため、機能リストを確認してください。上記の表では、gpt-5.5 と laguna-s-2.1 の両方が tool-use をリストしていますが、json-mode と vision をリストしているのは gpt-5.5 のみです。玩具のような例ではなく、実際のツールスキーマを送信し、返された引数がパースできることを確認してください。
Claudeモデルを呼び出す予定がある場合は、移行ガイドのルールに注意してください。Claudeのツール呼び出し、思考ブロック、およびAnthropicメッセージフィールドは /v1/messages に属しており、Chat Completionsでは保証されません。
エラー形状
Chat CompletionsおよびResponsesは、OpenAI形式の error オブジェクトを返します。エラーハンドリングガイドによると、常に存在するのは message と type のみです。code、param、retryable、retry_after などのフィールドは、関連する場合にのみ表示されます。メッセージテキストではなく、HTTPステータスと code で分岐し、パーサーが欠落しているフィールドを許容するようにしてください。Anthropic MessagesとGeminiは独自の形式を維持しているため、1つのパーサーですべてのルートをカバーすることはできません。
| ステータス | コード | 意味 |
|---|---|---|
| 401 | invalid_api_key |
キーが欠落している、無効、非アクティブ、または取り消されている |
| 401 | expired_api_key |
キーの有効期限が切れている |
| 402 | insufficient_balance |
アカウント残高がリクエストをカバーできない |
| 402 | quota_exceeded |
キー自体の使用制限に達した |
| 403 | model_not_allowed |
このキーでは要求されたモデルを使用できない |
| 429 | rate_limit_exceeded |
リクエストが多すぎます。Retry-After を待機してください |
出典: 認証 および エラーハンドリング(2026年10月3日観測)。
この表は一般的な誤解を正すものです。残高不足は401ではなく402です。現在のコードがすべての4xxを不正なキーとして扱っている場合は、更新してください。
タイムアウトとリトライ
移行ガイドによると、既存のリトライ、タイムアウト、ストリーミングコードは通常そのまま使用できます。文書化されたリトライルールと照らし合わせて確認してください。
- 400、401、402、403、404、または413のレスポンスをそのまま繰り返さないでください。
- 429はサーバーが提供する遅延後にリトライしてください。
- 500〜504は
retryableがtrueの場合のみリトライし、retry_afterを尊重してください。 503 all_channels_failedはretryable: falseで返されることがあります。その場合、選択した配信ティアに供給がないため、繰り返しても効果はありません。
レスポンスヘッダーからリクエストIDをモデルおよび自身のジョブIDと共に保存してください。調査に必要な情報です。
課金
課金ガイドによると、サブスクリプションや最低利用料金はなく、1つの残高がすべてのモデルで共有されます。完了した各リクエストは、それを生成した配信オプションに対して1回課金されます。オプションには TokenLab Verified、Official、Auto があり、Auto はまず Verified を試行し、次に Official を試行します。強制終了が必要な場合は、各APIキーに支出制限を設定してください。制限に達すると、そのキーを使用したリクエストは402を返します。
ストリーミングではないOpenAI互換レスポンスには、レスポンスが送信される前に課金が完了した場合、billing_transaction_id が含まれます。これは X-Billing-Transaction-ID ヘッダーにも表示される場合があります。これを保存し、独自のトークン計算ではなく「使用量(Usage)」ページと照合してください。
OpenAIからTokenLabへの移行後の検証チェックリスト
本番環境のトラフィックを移行する前に、ステージングキーに対して以下の手順を順番に実行してください。各行は上記の文書化された挙動に対応しています。
| ステップ | 実行内容 | 期待される結果 |
|---|---|---|
| 1. モデル探索 | GET /v1/models/gpt-5.5 (キー不要) |
ライフサイクルが active であり、使用予定の形式が含まれていること |
| 2. 認証リクエスト | 上記のPythonまたはcURLサンプル | 空ではない回答。リクエストがモデル、ステータス、使用量と共にRequestsビューに表示されること |
| 3. 使用量フィールド | 非ストリーミングレスポンスの usage を読み取る |
prompt_tokens, completion_tokens, total_tokens が含まれること |
| 4. ストリーミング | stream: true と include_usage: true |
SSEチャンクの後に使用量が表示されること。中断されたストリームが不完全として処理されること |
| 5. ツール呼び出し | 実際の tools と tool_choice |
引数がパースされ、スキーマと一致すること |
| 6. VisionまたはJSONモード | モデルが vision または json-mode をリストしている場合のみ |
期待通りの出力。機能がリストされていない場合はテストをスキップ |
| 7. 不正なキー | 削除済みまたは誤ったキーでリクエスト | 401 invalid_api_key |
| 8. 残高不足またはキー制限 | 制限の低いキーまたは空のワークスペースを使用 | 402 insufficient_balance または quota_exceeded |
| 9. モデル制限 | キーのモデルリストを制限し、別のモデルをリクエスト | 403 model_not_allowed |
| 10. タイムアウトとリトライ | ステージングでタイムアウトを強制 | コードが retryable および retry_after に従ってのみリトライすること |
| 11. 課金 | billing_transaction_id と使用量を自身の見積もりと比較 |
請求額がモデルの現在の価格および記録されたトークンと一致すること |
表の項目がすべてパスしたら、本番環境の設定を変更してデプロイしてください。新しいパスが安定していることが使用量で確認できるまで、古いOpenAIキーはアクティブのままにしておいてください。
よくある質問
OpenAIから切り替える際、モデル名を変更する必要がありますか?
必ずしもそうではありませんが、それぞれ確認してください。TokenLabのモデルIDは正確な文字列であるため、GET /v1/models または GET /v1/models/{model} で確認してください。2026年10月3日時点で、ライブAPIは gpt-5.5 をアクティブとしてリストしていました。リクエストが model_not_found を返す場合、そのIDは不明か利用できません。モデルリストを読み取り、現在のIDを使用してください。
ストリーミングとツール呼び出しはOpenAIのAPIと全く同じように動作しますか?
TokenLabは、SSEを通じたストリーミングと、OpenAI互換リクエスト形式を通じた関数呼び出しを文書化しています。ドキュメントには、サポートされるオプションは選択したモデルに依存するとも記載されています。したがって、結果は「同一」ではなく「互換性がある」ものとして扱ってください。ストリーミング、tools、tool_choice、および使用する response_format を、実行予定の特定のモデルでテストしてください。
残高がなくなった場合、どのステータスコードが返されますか?
コード insufficient_balance を伴うHTTP 402が返されます。独自の支出制限に達したキーも、quota_exceeded を伴う402を返します。欠落、無効、または取り消されたキーは401を返します。これらに対しては、何も変更せずにリトライしないでください。残高を補充するか、キー制限を引き上げるか、キーを置き換えてください。
同じOpenAIクライアントからClaudeやGeminiモデルを呼び出せますか?
モデルカタログには、リクエスト形式の中に openai_chat_completions を持つ claude-sonnet-5 や gemini-3.5-flash がリストされています。したがって、基本的なチャットは同じクライアントを通じて行えます。思考ブロックやClaudeのツール使用など、Claude固有のフィールドは /v1/messages に属します。Geminiネイティブのフィールドは /v1beta ルートに留まります。1つの会話につき1つのAPI形式を維持してください。
TokenLabで構築を始める
TokenLabでキーを作成し、ベースURLを https://api.tokenlab.sh/v1 に設定し、本番環境に触れる前にクイックスタートのリクエストを実行してください。
出典
価格確認日 2026-10-03
- TokenLab Docs: Quickstart2026-10-03 時点で確認
- TokenLab Docs: Authentication2026-10-03 時点で確認
- TokenLab Docs: Migration Guides2026-10-03 時点で確認
- TokenLab Docs: SDKs & Libraries2026-10-03 時点で確認
- TokenLab Docs: API formats2026-10-03 時点で確認
- TokenLab Docs: Handle API errors2026-10-03 時点で確認
- TokenLab Docs: Billing and pricing2026-10-03 時点で確認
- TokenLab Docs: Create Chat Completion2026-10-03 時点で確認



