アカウント
エラー
api14 が返す OpenAI 互換のエラー形式と、ゲートウェイのエラーコードの一覧です。上流プロバイダー由来のエラー、コード別の対処方法、SDK で APIError や RateLimitError を処理するコード例を紹介します。message は英語の説明文なので、分岐には code を使います。
エラーは OpenAI のエラー形式を使うため、公式 SDK は通常の例外(APIError、RateLimitError、AuthenticationError など)に変換します。分岐には code を使ってください。message は人間向けの英語の説明です。
{
"error": {
"message": "This request may cost up to $0.0123 but your balance is $0.0040. Add funds at /pricing.",
"type": "insufficient_quota",
"code": "insufficient_balance"
}
}
失敗したリクエストには課金されません。 4xx または 5xx のステータスのレスポンスは、いずれも無料です。
ゲートウェイのエラーコード
| ステータス | code | type | 意味 |
|---|---|---|---|
| 400 | model_required | invalid_request_error | model フィールドがない。 |
| 400 | invalid_json | invalid_request_error | ボディが JSON オブジェクトではない。 |
| 400 | invalid_body | invalid_request_error | multipart ボディを読み取れなかった。 |
| 400 | max_tokens_too_large | invalid_request_error | プレイグラウンドの試用リクエストが、多すぎる出力トークンを要求した。 |
| 401 | invalid_api_key | authentication_error | キーがない、形式が正しくない、または失効している。 |
| 402 | insufficient_balance | insufficient_quota | USD 残高が $0、またはリクエストの想定最大料金(入力、出力の上限、画像、動画の長さ)を下回っている。リクエストは送信されません。 |
| 403 | model_not_allowed | permission_error | キーのモデル許可リストにこのモデルが含まれていない。 |
| 403 | plan_required | permission_error | プランにこのモデルカテゴリが含まれていない。 |
| 404 | model_not_found | not_found_error | モデル ID が不明、無効化、または削除されている。 |
| 404 | not_found | not_found_error | 不明なエンドポイント、または自分のものではない動画ジョブや生成。 |
| 413 | payload_too_large | invalid_request_error | リクエストボディがサイズ上限(デフォルトは 25 MB)を超えている。 |
| 429 | rate_limited | rate_limit_error | 毎分のリクエスト数を超えた。Retry-After: 60 が付与されます。 |
| 409 | idempotency_conflict | api_error | この Idempotency-Key のリクエストはすでに送信済み。別のリクエストを送るには新しいキーを使ってください。レート制限を参照してください。 |
| 429 | daily_limit_reached | rate_limit_error | キーが 1 日の USD 利用上限に達した。 |
| 403 | site_not_allowed | permission_error | ウィジェットのみ: ページのサイトが許可したウィジェットサイトに含まれていない。ウィジェットを参照してください。 |
| 429 | widget_daily_limit | rate_limit_error | ウィジェットのみ: ウィジェット、またはすべてのウィジェットの合計が 1 日の USD 利用上限に達した。 |
| 429 | visitor_daily_limit | rate_limit_error | ウィジェットのみ: この訪問者が、ウィジェットの設定で指定した 1 日のリクエスト上限に達した。 |
| 502 | upstream_unavailable | api_error | 上流のプロバイダーに接続できなかった。 |
| 4xx/502 | content_unavailable | 状況による | 動画のコンテンツをまだ取得できなかった(ステータスは上流に準じ、なければ 502)。 |
| 503 | maintenance | service_unavailable | メンテナンスモード。生成エンドポイントは停止中ですが、GET エンドポイントは引き続き動作します。 |
| 503 | not_configured | service_unavailable | ゲートウェイがまだ設定されていない。 |
上流のエラー
上流のプロバイダーが返すエラー(特定のモデルに対する無効なパラメーター、コンテキスト長の超過、コンテンツポリシーによる拒否、プロバイダー自身の 429 など)は、元のステータスコードと同じ { error: {... } } 形式でそのまま返されます。
対処方法
| ステータス | 再試行 | 対処 |
|---|---|---|
| 400 | しない | リクエストボディを修正する。 |
| 401 | しない | キーと Authorization: Bearer ヘッダーを確認する。認証を参照してください。 |
| 402 | しない | 残高を追加するか、自動チャージを有効にする。 |
| 403 | しない | 許可されたモデルを使うか、キーの許可リストを編集するか、プランをアップグレードする。 |
| 404 | しない | モデルページでモデル ID を確認する。 |
| 413 | しない | より小さいボディを送るか、base64 の代わりに URL でファイルを渡す。 |
| 429 | 後で | rate_limited: Retry-After の時間だけ待つ。daily_limit_reached: 次の UTC 日まで待つか、キーの上限を引き上げる。レート制限を参照してください。 |
| 502 | する | バックオフを入れて再試行するか、モデルのフォールバックを追加する。 |
| 503 | する | 後で再試行する。 |
コードでのエラー処理
import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://api14.com/api/v1', apiKey: process.env.API14_API_KEY })
try {
await client.chat.completions.create({ model: 'openai/gpt-5-mini', messages: [{ role: 'user', content: 'Hi' }] })
} catch (err) {
if (err instanceof OpenAI.APIError) {
console.error(err.status, err.code, err.message)
if (err.code === 'insufficient_balance') {
// prompt the user to add funds
}
} else {
throw err
}
}
from openai import OpenAI, APIStatusError
client = OpenAI(base_url="https://api14.com/api/v1", api_key="sk-api14-...")
try:
client.chat.completions.create(model="openai/gpt-5-mini", messages=[{"role": "user", "content": "Hi"}])
except APIStatusError as e:
print(e.status_code, e.code, e.message)
ストリームの開始後に発生したエラーは、ストリームの中で届きます。ストリーミングを参照してください。