エラーとレート制限
各ステータスコードの意味と、それに対して何をすべきか。
エラー形式
エラーは OpenAI のエラー形式の JSON で返ります。メッセージは何が起きたかを示し、code は安定した機械可読の識別子で、各メッセージにはリクエスト id が付加されます:
{
"error": {
"message": "Model \"gpt-5.5-typo\" is not offered here. Check the model name for typos, or switch to a model from our supported list. (request id: 20260705...)",
"type": "new_api_error",
"code": "model_not_found"
}
}サポートに連絡するときや Discord のチケットを開くときは、必ずリクエスト id を含めてください。ログの中であなたの正確なリクエストを見つけられます。
ステータスコード一覧
実際に遭遇するステータスコード:
| コード | 意味 | 対処法 |
|---|---|---|
400 | 無効なリクエスト:パラメーター値の誤り(例えばモデルの最小値未満の max_tokens)、またはコンテンツモデレーションによってブロックされたプロンプト。 | リクエストを修正してください。変更せずに再試行しても再び失敗します。 |
401 | キーの問題:API キーが欠落、無効、期限切れ、または無効化されています。 | Authorization ヘッダーと、トークンページのキーを確認してください。 |
402 | このキー自身の支出上限が使い切られています。 | キーの上限を引き上げるか、新しいキーを作成してください。 |
403 | アクセス拒否:アカウント残高が空、このキーにモデルが許可されていない、または IP がキーの許可リストにありません。 | チャージするか、キーのモデルおよび IP の制限を確認してください。 |
413 | このモデルの無料トライアル上限に対してリクエストが大きすぎます。 | プロンプトを短くするか、有料モデルに切り替えてください。 |
429 | レート制限が発動しました(下記の種類を参照)。 | Retry-After の秒数だけ待ってから再試行するか、モデルを切り替えてください。 |
500 | 当社側または上流プロバイダーで何かが失敗しました。 | 少し待ってから再試行してください。継続する 500 は報告する価値があります。 |
503 | そのモデルのすべてのプロバイダーがビジーであるか、モデル名が存在しません。 | メッセージを読んでください:ビジーは数分で解消しますが、タイプミスは解消しません。 |
503:ビジーと未知のモデル
まったく異なる 2 つの状況がステータス 503 を共有します。1 つ目は一時的な混雑です:
HTTP/1.1 503 Service Unavailable
{
"error": {
"message": "All providers for model \"kimi-k2.6:free\" are busy right now (they hit their rate limit). This is not a spelling error. Please try again in a little while, or switch to another model. (request id: 20260705...)",
"type": "new_api_error",
"code": "get_channel_failed"
}
}コード get_channel_failed(すべてのプロバイダーがビジー)は、そのモデルのすべての無料プロバイダーが一時的にレート制限されていることを意味します。これは数分で自動的に回復します:再試行するかモデルを切り替えてください。コード model_not_found(ここでは提供していない)は、モデル名自体が解決されないことを意味し、再試行しても決して役立ちません。タイプミスを確認するか、カタログで現在の名前を調べてください。
get_channel_failed を伴う 503 はリトライ/フォールバックとして、model_not_found を伴う 503 はクライアント内でのハードエラーとして扱ってください。
レート制限の種類
429 は複数の層から発生し得ます:
- 当社の無料モデル上限:ユーザーごと、無料モデルごとに 1 分あたり 1 リクエスト。共有プールがピーク時を乗り切るための公平性の上限です。
- 上流プロバイダーの制限:無料モデルの背後にあるプロバイダーが自身の上限に達しました("temporarily rate-limited upstream"、つまり上流で一時的にレート制限)。
- 一部の無料プールにおける 1 日あたりのトークン予算。これらは UTC の深夜にリセットされます。
- 非常に大きなプロンプトで発動する 1 分あたりトークン数の上限。
- あまりに多くのリクエストが並行して実行されるときの、ユーザーごとの同時実行制限。
有料モデルには UnoRouter が課すレート制限はありません。
無料モデル制限の詳細
当社の 1 分あたり 1 の上限が発動すると、標準のレート制限ヘッダーが返るので、クライアントは正確にバックオフできます:
HTTP/1.1 429 Too Many Requests
Retry-After: 38
X-RateLimit-Limit: 1
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1783198478Retry-After は動的です:一律の 60 ではなく、あなたのウィンドウで実際に残っている秒数です。エラーメッセージには、制限のないそのモデルの有料の対となる名前も示されます。
トライアルのサイズ上限
通常は有料のモデルの一部が、リクエストサイズの上限付きで無料提供されます。大きすぎるプロンプトは、次のようなメッセージとともに 413 を受け取ります:Request body too large for gpt-4.1 model. Max size: 8000 tokens.
上限は無料トライアルの経路にのみ適用されます。有料モデルは全長のプロンプトを受け付けます。
リトライの指針
429 では Retry-After を守ってください。503 get_channel_failed は少し待ってから再試行するか、別のモデルにフォールバックしてください。400 系のエラーは決定的なので再試行しないでください。
失敗および拒否されたリクエストは課金されません:残高に対する事前保留は、リクエストがエラーになった時点で返金されます。