エラーと制限
Markdownレスポンスコードの意味と対処方法。すべてのエラーはJSONで返され、Request IDが付いています。
完全ガイド
エラー形式
エラーは、呼び出したAPIの形式で返されます。オブジェクト error はOpenAI、 {"type": "error", "error": {...}} はAnthropic、 error にはフィールド statusとdetails が含まれるのはGeminiです。そのため、SDKは通常のAPIエラーとして認識できます。
error.codeとerror.reasonは、以下の表にあるエラー分類です。両者は同じ値です。error.typeは、その形式の標準値です(例:invalid_request_errorまたはserver_error).error.request_id(Anthropicではrequest_idが最上位にあります)、ヘッダーX-Request-ID、メッセージ末尾には、リクエストの識別子が含まれます。- Geminiの分類が記載されるのは
error.details:ErrorInfo.reasonです。同じコードが大文字で表されます(例:MODEL_OVERLOADED),domain—ailoot.ai;リクエストの識別子が記載されるのはRequestInfo.requestId。 - Gemini形式では、自動再送してはいけない5xxエラーと
result_pending_checkは、ステータス409とstatusABORTEDで返されます。Gemini SDKやCLIが自動で再送しないようにするためです。エラー分類が記載されるのはErrorInfo.reason(例:MODEL_TIMEOUTまたはRESULT_PENDING_CHECK). - OpenAI形式のレスポンスには、古いクライアント向けの最上位フィールドもあります:
codeとmessage。古いクライアント向けのフィールドです。
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}{
"type": "error",
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"reason": "invalid_api_key",
"message": "… Nothing was charged. … Request ID: 94ed3e31-4373-41ce-bf8a-0d1ed3f7235e."
},
"request_id": "94ed3e31-4373-41ce-bf8a-0d1ed3f7235e"
}{
"error": {
"code": 401,
"status": "UNAUTHENTICATED",
"message": "The API key is not valid. Nothing was charged. … Request ID: e7aa743b-9d0d-4064-b206-2562609f545b.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "INVALID_API_KEY",
"domain": "ailoot.ai",
"metadata": {
"code": "invalid_api_key",
"reason": "invalid_api_key",
"request_id": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
},
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
]
}
}エラーコード
| HTTP | 分類(reason) | 発生した内容 | 対処方法 |
|---|---|---|---|
| 400 | invalid_request | リクエストが不正:ボディやパラメータが間違っている、モデルが指定されたフィールド・添付ファイル・ツールに対応していない、キーをURLで渡している | エラーテキストに従ってリクエストを修正してください。非対応のフィールド、添付ファイル、ツールを削除し、キーはヘッダーで渡してください。非対応のフィールド、添付ファイル、ツールによる拒否は仮確保前に行われ、料金は差し引かれません。 |
| 400 | context_length_exceeded | リクエストがモデルのコンテキスト長を超えている | 履歴を短くするか、より長いコンテキストに対応するモデルを使用してください。 |
| 400 | content_policy_violation | モデルのルールによりリクエストが拒否された | リクエストを言い換えてください。 |
| 401 | invalid_api_key | キーがない、または無効 | キー全体が送信されていることを確認してください。 |
| 401 | api_key_disabled | キーが無効化されている | キーを有効にするか、新しいキーを作成してください。 |
| 402 | insufficient_balance, insufficient_quota | 最低限の仮確保に必要な空き残高もない (insufficient_quota は、同じ状態をOpenAI SDKで一般的な形式にしたものです) | 残高をチャージするか、max_tokensを小さくしてください。 |
| 402 | api_key_quota_exhausted | キーの総支出上限に達した | ダッシュボードでキーの上限を引き上げてください。 |
| 402 | payment_disputed | アカウントに、異議申し立て対象の支払いに関する未払いがある | 未払いが解消されるまで、新しいリクエストは停止されます。サポートにお問い合わせください。 |
| 403 | api_key_expired | キーの有効期限が切れた | 新しいキーを作成してください。 |
| 403 | account_inactive | アカウントが無効化されている | サポートにお問い合わせください。 |
| 403 | permission_denied | キーでこのリクエストが許可されていない(例:IPによる制限) | キーの制限を確認してください。 |
| 404 | model_not_found | 指定されたモデルが存在しない | /v1/modelsでIDを確認してください。 |
| 404 | unsupported_endpoint | モデルがこの形式に対応していない | 別の形式かモデルを選択してください。 |
| 404 | not_found | 指定されたパスやオブジェクトが存在しない(例:ジョブ) | アドレスと識別子を確認してください。 |
| 409 | duplicate_request | 同じ冪等性キーの操作がすでに受け付けられており、完了している可能性がある | 最初の操作の結果を確認してください。新しい操作は送信しないでください。 |
| 409 | not_ready, video_not_ready | 動画または他のジョブが、まだ完成していない | 後でステータスを取得してください。 |
| 409, 503 | result_pending_check | リクエストの結果を確認中です。動画ジョブでは、ステータスのレスポンスのフラグ result_pending_check: true で示され、ジョブ自体の状態は in_progress | リクエストを再送しないでください。ステータスは履歴(GET https://ailoot.ai/api/v1/usage)に表示されます。動画ジョブを作り直さず、後でGET /v1/videos/{id}を確認してください。 |
| 410 | model_retired | モデルの提供が終了した | GET /v1/modelsで新しいバージョンを選択してください。 |
| 413 | request_too_large | リクエストボディが大きすぎる | ファイルや履歴を小さくしてください。 |
| 429 | rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_full | アカウントのリクエスト数、または同時リクエスト数が多すぎる | ヘッダー Retry-Afterに指定された時間(通常10秒)だけ待ってから、再試行してください。 |
| 429 | usage_limit_reached | キーの支出ウィンドウ(5時間、1日、7日)の上限に達した | ウィンドウが更新されるまで待つか、キーの上限を引き上げてください。 |
| 500 | internal_error | Ailootのエラー | Request IDを添えてサポートにお問い合わせください。 |
| 502 | invalid_model_response, empty_response, incomplete_response | モデルが、不正・空・不完全なレスポンスを返した | ダッシュボードの履歴でRequest IDを確認してください。結果や残高の差し引きが記録されている場合、再送すると二つ目の有料リクエストになります。記録がないことは、リクエストが送信も実行もされていない証拠にはなりません。送信状態が不明なリクエストは再送せず、Request IDを添えてサポートに連絡してください。 |
| 502 | result_not_delivered | Ailootの責任で結果が届かず、仮確保額または差し引き額が返された | リクエストを再送できます。 |
| 503 | model_overloaded | モデルが一時的に過負荷 | X-Should-Retry: trueの場合はRetry-Afterに指定された秒数後に再試行してください。falseの場合は、先に履歴のRequest IDを確認してください。 |
| 503 | model_unavailable | モデルが一時的に利用できない | 別のモデルを選択してください。X-Should-Retry: trueの場合は、Retry-Afterに指定された秒数後に再試行してください。falseの場合は、先に履歴のRequest IDを確認してください。 |
| 503 | service_unavailable | Ailoot側の一時的な障害 | X-Should-Retry: trueの場合はRetry-Afterに指定された秒数後に再試行してください。falseの場合は、先に履歴のRequest IDを確認してください。 |
| 503 | charge_not_confirmed | レスポンスは提供されていません。残高の差し引きを確認できなかったため、仮確保額は解放され、料金は差し引かれていません。 | X-Should-Retry: trueの場合はRetry-Afterに指定された秒数後に再試行してください。falseの場合は、先に履歴のRequest IDを確認してください。 |
| 504 | model_timeout | モデルが制限時間内に応答しなかった。結果が後で届く可能性がある | 履歴のRequest IDを確認するまで、リクエストを再送しないでください。 |
モデルのレスポンスと結果の確認に関するコード(502、503、504)は、モデルまたはリクエストを指す名前になりました:model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmedとresult_pending_check。コードで error.code を以前の値と比較している場合は、表のコードに置き換えてください。旧コードと新コードの対応関係を確認する窓口:サポート。
リクエストを再送する条件
- まずX-Should-Retryを確認してください。値が
false,result_pending_checkまたはmodel_timeoutの場合は、自動で再送しないでください。ダッシュボードの履歴でRequest IDを確認すると、結果と差し引き額が分かります。 - 安全に再送できるのは、X-Should-Retry: trueが返された場合です。次の値で指定された時間だけ待ってください:
Retry-After秒。5xxでは、コードだけでは判断できません。すでに結果が返っている可能性があります。先にダッシュボードの履歴を確認するか、Request IDを添えてサポートにお問い合わせください。特に画像、動画、音楽、長いエージェントのステップでは重要です。 - 再送しても解決しないケース:400、401、402、403、404。先にリクエスト、キー、残高を修正してください。
制限
頻度と同時リクエスト数の制限は、キー単位ではなく、アカウント全体に適用されます。超過すると429とrate_limit_exceeded 、ヘッダーは Retry-After: 10が返ります。モデル自体が過負荷の場合は503とmodel_overloaded 、 Retry-After: 30が返ります。より大きな負荷が必要な場合は、こちらへお問い合わせください:サポート。
支出上限はキーに設定します。総上限を超えると402とapi_key_quota_exhaustedが返り、5時間、1日、7日のウィンドウを超えると429とusage_limit_reachedが返ります。詳細:APIキーとAPIアドレス。
NVIDIAモデル:キュー
モデル一覧は残高ゼロでも取得できます。生成には仮確保に必要な残高が必要です。NVIDIAモデル(Nemotronなど)は共通のキューで処理されるため、負荷が高いと応答が遅れたり、Retry-Afterヘッダー付きの「モデルが一時的に過負荷」エラーが返ったりする場合があります。指定された時間後に再試行してください。料金はカタログに記載され、残高の差し引きは他のモデルと同様です。
サイズの制限はモデルごとに定められています。コンテキスト長(送信できるトークン数)と最大出力長の記載先:カタログ。
履歴と支出
履歴と支出 · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN
JWT ≠ sk-… · ログインとセッション