トラブルシューティング
エラーの形は呼び出したプロトコルに一致します。 /v1/chat/completions および /v1/responses は OpenAI スタイルのエラーを返します。 /v1/messages は Anthropic スタイルのエラーを返します。HTTP ステータスコードは 3 つのプロトコルすべてで同一です。
エラーレスポンス形式
OpenAI 形式 (/v1/chat/completions, /v1/responses)
{
"error": {
"message": "Invalid API key",
"type": "authentication_error",
"code": "invalid_api_key"
}
} Anthropic 形式 (/v1/messages)
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} 401 · 認証に失敗しました authentication_error
{"error":{"message":"missing API key in Authorization header or X-API-Key","type":"authentication_error"}} 原因
Authorization: Bearerヘッダー(またはX-API-Key)がありません — メッセージ:missing API key in Authorization header or X-API-Key。- キーが有効なキーのいずれにも一致しません — メッセージ:
invalid API key。 - キーの有効期限が切れています — メッセージ:
API key expired。
対処
Authorization: Bearer sk-syn-…(またはX-API-Key: sk-syn-…)を送信します。- キーがコンソールで有効になっており、完全にコピーされていることを確認します。
リトライ不可 — 認証情報を修正してください。
400 · 無効なリクエスト invalid_request
{"error":{"message":"model or models field is required","type":"invalid_request"}} 原因
modelフィールドが欠落しているか、JSON ボディが空または不正な形式です。
対処
modelと正しい形式の JSON ボディを含めてください。Chat Completions リファレンスを参照してください。
リトライ不可 — リクエストを修正してください。
403 · クォータ枯渇 quota_exhausted
{"error":{"message":"API key quota exhausted","type":"quota_exhausted"}} 原因
- キーまたはワークスペースのプリペイド残高を使い切りました。
対処
- ワークスペースの残高をチャージします。注意:残高を使い切ると Synthorai は
403 quota_exhaustedを返し、429ではありません — そのため指数バックオフは効果がなく、チャージのみで解除されます。
バックオフでのリトライは不可 — チャージしてください。
403 · コンプライアンス — データ共有なし compliance_blocked / compliance_no_data_share
{"error":{"type":"compliance_blocked","code":"compliance_no_data_share","message":"model 'MODEL' is unavailable: your workspace compliance setting disallows providers that retain/train on data"}} 原因
- ワークスペースで
no_provider_data_shareが有効になっており、要求されたモデルはデータの保持/共有を必要とするプロバイダーからのみ提供されています(例:データ共有のみの Bedrock または Vertex モデル)。
対処
- リクエストをゼロ保持モデルにルーティングするか、そのワークロードでデータ共有が許容される場合はワークスペースのコンプライアンススイッチをオフにします。保持クラスはモデルごとのルーティング入力です — 30 日間のデータ保持の詳細を参照してください。
リトライ不可 — 一時的なエラーではなくポリシー上の判断です。
429 · レート制限 rate_limit_exceeded
{"error":{"message":"rate limit exceeded: max 60 requests per minute","type":"rate_limit_exceeded"}} 原因
- 1 分あたりのリクエスト上限(RPM)を超えました。メッセージに正確な上限が示されます。
対処
- 指数バックオフ + ジッターでバックオフしてリトライします(下記スニペット)。継続的なスループットが必要な場合は上限の引き上げを申請してください。
リトライ可能 — バックオフしてリトライしてください。
502 · モデルに利用可能なチャネルがありません upstream_error
{"error":{"message":"no channels available for model \"MODEL\" in group \"default\"","type":"upstream_error"}} 原因
- モデル id がワークスペースのルーティング可能なチャネルに一致しません — タイプミス、提供終了したモデル、またはプランでは到達できないモデルです。
対処
- 正確な id を最新のモデル一覧と照合してください。モデルが最近提供終了になった場合は、現行のモデルを選んでください。
そのままではリトライ不可 — モデル id を修正してください。
BYOK:上流プロバイダーのエラー
bring-your-own-key では、リクエストはあなたのプロバイダーアカウント(AWS Bedrock、Google Vertex AI、または Anthropic API)で実行されるため、Synthorai はプロバイダーの元のエラーをそのまま透過します — レスポンスには usage.is_byok: true が含まれます。修正はゲートウェイではなく、そのプロバイダーのコンソールまたは設定にあります。最も一般的なのはアカウント単位のモデルアクセスとデータ共有の設定です:
| プロバイダーのエラー / 設定 | 原因 | 対処 |
|---|---|---|
model "…" is currently unavailable | あなたの BYOK アカウントで、モデルが有効化されていない、提供終了した、または容量制限があります(例:Bedrock で一時的に提供終了した Claude Fable 5)。 | プロバイダーのコンソールでモデルアクセスを有効化するか(Bedrock → Model access、Vertex → Model Garden)、利用可能なモデルにルーティングします。 |
setPublisherModelConfig / dataSharingEnabledProvider: "anthropic" (Vertex AI) | Google Vertex AI は、Anthropic のパートナーモデルをプロジェクト単位のデータ共有オプトインと Model Garden の利用規約への同意の後ろに置いています。 | setPublisherModelConfig を dataSharingEnabledProvider: "anthropic" で呼び出し、利用規約に同意します。Google の Vertex パートナーモデルのドキュメントを参照してください。 |
data_retention_mode: provider_data_share (AWS Bedrock) | Bedrock は一部の Claude モデルをアカウント単位の明示的なデータ保持オプトインの後ろに置いており、それがないとモデルは利用不可と表示されます。 | アカウントで data_retention_mode: provider_data_share を設定します(必要に応じて bedrock:DataRetentionMode に対する SCP で固定します)。 |
上流プロバイダーのエラー
これらはモデルプロバイダーから、プロバイダー自身の HTTP ステータスと type を伴って透過されます。プロバイダー側を示すのは 500 と 529 のみで、これら(および 429)は一時的なものとして扱いリトライし、4xx はリクエスト側を反映します。完全なリファレンス:Anthropic のエラードキュメント。
| ステータス | タイプ | 意味 |
|---|---|---|
413 | request_too_large | リクエストボディがサイズ上限を超えています — ペイロードを減らしてください。 |
500 | api_error | 上流プロバイダーで内部エラーが発生しました — 一時的な問題です。バックオフしてリトライしてください。 |
529 | overloaded_error | 上流プロバイダーが一時的に過負荷になっています — 一時的な問題です。バックオフしてリトライしてください。 |
レート制限
レート制限は API key ごとに適用され、すべてのユーザー間で公平な利用を保証します。
デフォルトの制限
| パラメータ | タイプ | 説明 |
|---|---|---|
RPM | integer | 1 分あたりのリクエスト数。デフォルト:key ごとに 60 RPM。 |
TPM | integer | 1 分あたりの token 数。デフォルト:key ごとに 100,000 TPM。 |
1 日あたりのクォータ | integer | 1 日あたりの合計 token 数。管理者がユーザーごとに設定できます。 |
レート制限に達すると、次のレスポンスを受け取ります 429 レスポンスが返され、次のヘッダーが付きます Retry-After ヘッダーは待機時間を秒単位で示します。
実際のトークン単価に対してトークンスループットを見積もりますか?LLM API コスト計算ツールでワークロードを試算してください。
429 エラーの処理
import time
import openai
client = openai.OpenAI(base_url="https://synthorai.io/v1", api_key="YOUR_API_KEY")
for attempt in range(5):
try:
response = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[{"role": "user", "content": "Hello"}]
)
break
except openai.RateLimitError as e:
wait = 2 ** attempt # exponential backoff
print(f"Rate limited. Retrying in {wait}s...")
time.sleep(wait)async function withRetry(fn, maxAttempts = 5) {
for (let attempt = 0; attempt < maxAttempts; attempt++) {
try {
return await fn();
} catch (err) {
if (err.status === 429 && attempt < maxAttempts - 1) {
const wait = Math.pow(2, attempt) * 1000;
await new Promise(r => setTimeout(r, wait));
} else throw err;
}
}
}特定のモデルで 502 や過負荷が発生していますか?モデル価格比較からフォールバックを選んでください — すべてのルーティング可能なモデルとトークン単価が 1 つの表にまとまっています。