すべてのエラーは、同じ JSON 本文を使います。失敗したリクエストを HTTP 200 で返すことはありません。エラーが 200 のレスポンスの中に入る 2 つの場合は、レスポンスの中のエラーで説明します。
{ "error": { "message": "Model \"example/unknown\" was not found.", "type": "not_found_error", "code": "model_not_found", "param": "model", "request_id": "req_0123456789abcdef0123456789abcdef", "doc_url": "https://example.com/docs/errors/#model_not_found" }}message: 人が読む短い説明です。type: エラーの分類です。code: プログラムが使う安定した識別子です。分岐にはmessageではなくcodeを使ってください。param: エラーの原因になったリクエストパラメータです。無ければnullです。request_id: リクエストの ID です。サポートに問い合わせるときに控えておいてください。doc_url: このページにある、そのコードの項目へのリンクです。details: 任意の機械可読な補足です。入るフィールドはエラーによって異なります。- 指定できる値が決まっているフィールドでは、
details.allowedに指定できる値が入ります。 - 数値が範囲外のときは、
details.minimumとdetails.maximumに許容範囲が入ります。 402では、details.limit_sourceにbalanceかkeyが入ります。ほかのフィールドには金額が入り、キーの利用上限では期間とdetails.resets_atも入ります。残高とキーの利用上限を参照してください。- 使えない参照画像の URL では、
details.reasonにその理由が入ります。 - data URI で送った参照画像が大きすぎるときは、
details.max_bytesに上限が入ります。 payload_too_largeでは、details.max_bytesに上限が入ります。- ジョブの完了を待っていたリクエストが、そのジョブの失敗で失敗したときは、
details.job_idにジョブの ID が入ります。 - 終わったジョブのキャンセルや、ファイルのない動画のダウンロードのように、ジョブのステータスによってリクエストが失敗したときは、
details.statusにジョブのステータスが入ります。
- 指定できる値が決まっているフィールドでは、
レスポンスの中のエラー
Section titled “レスポンスの中のエラー”次の 2 つの場合は、200 のレスポンスの中でエラーを知らせます。
- 始まったあとに失敗したチャットのストリーミングのレスポンス。エラーは、ストリームの中のイベントとして届きます。チャットを参照してください。
- 失敗したジョブ。ジョブを読み取ると
200を返し、ジョブのerrorフィールドに、エラーのレスポンスと同じフィールドが入ります。ジョブを参照してください。
Anthropic 互換エンドポイントのエラー形式
Section titled “Anthropic 互換エンドポイントのエラー形式”POST /v1/messages は、すべてのエラーを Anthropic 形式で返します。type は error で、エラーの内容は error に入り、request_id はトップレベルのフィールドです。コードと HTTP ステータスは、下の表と同じです。チャットを参照してください。
エラーコード
Section titled “エラーコード”各コードはその行へのリンクになっているため、doc_url のアンカー(#<code>)で対応する項目が開きます。
| コード | HTTP ステータス | 種別 | 説明 |
|---|---|---|---|
invalid_request | 400 | invalid_request_error | リクエストの形式が不正か、値が範囲外です。有効な値が分かる場合は details.allowed に入ります。 |
unauthorized | 401 | authentication_error | API キーが指定されていない、形式が不正、存在しない、失効済み、または期限切れです。レスポンスからは、どれに当たるかは分かりません。 |
balance_insufficient | 402 | insufficient_balance | 利用可能な残高が、このリクエストのために確保する金額に足りません。error.details.limit_source は balance です。 |
key_limit_exceeded | 402 | insufficient_balance | このリクエストを受理すると、API キーの利用上限を超えます。error.details.limit_source は key で、error.details.resets_at にカウンターが数え直される時刻が入ります。 |
forbidden | 403 | permission_error | アクセスが拒否されました。正しくない、書き換えられた、または期限切れの署名付きファイル URL に対して、このコードを返します。 |
account_suspended | 403 | permission_error | アカウントが停止されているため、画像・動画・チャットのリクエストを受け付けません。サポートにお問い合わせください。残高、入金、API キー、ジョブは引き続き利用できます。 |
not_found | 404 | not_found_error | 指定されたリソースが存在しません。 |
model_not_found | 404 | not_found_error | 指定したモデル ID がカタログにありません。チャットのエンドポイントは、テキストモデルでないモデルに対しても、このコードを返します。 |
method_not_allowed | 405 | invalid_request_error | このパスは存在しますが、使われたメソッドには対応していません。Allow ヘッダに対応するメソッドを示します。OPTIONS は CORS のプリフライトにだけ答えます。 |
idempotency_conflict | 409 | conflict_error | 同じ Idempotency-Key が、別の内容のリクエストで使われています。 |
payload_too_large | 413 | invalid_request_error | リクエスト本文が、許容サイズを超えています。error.details.max_bytes に上限が入ります。 |
content_policy_violation | 422 | content_policy_error | モデルの提供元が、プロンプト、参照画像、または生成された出力を、その内容を理由に拒否しました。このリクエストは課金されません。 |
rate_limited | 429 | rate_limit_error | モデルの提供元がリクエストを制限しています。POST /v1/reports は、同じアドレスから通報が多く送られたときにも、このコードを返します。Retry-After ヘッダの時間が過ぎてから再試行してください。 |
concurrency_limited | 429 | rate_limit_error | モデルの提供元が混み合っていて、いまこのリクエストを受けられません。アカウントのジョブ数の上限ではありません。時間をおいて再試行してください。 |
internal_error | 500 | api_error | 当社側で予期しないエラーが発生しました。 |
upstream_error | 502 | upstream_error | 上流の提供元がエラーを返しました。 |
upstream_unavailable | 503 | overloaded_error | 上流の提供元が一時的に容量不足です。時間をおいて再試行してください。 |
webhooks_unavailable | 503 | api_error | この環境では webhook をまだ使えません。時間をおいて再試行してください。 |
価格はすべて USD 表示です。表示価格には当社のマージンを含みます。