insufficient_quota の原因と対処:OpenAI APIの429エラーを解説

この記事の要点
insufficient_quotaは、OpenAI APIで残高や利用上限に達したときの429エラーです。待っても解消しません。- 同じ429でもレート制限は時間で回復します。リトライしてよいのはレート制限だけです。
- OpenAIの公式ガイドは、課金関連のエラーでは
error.codeで原因を確かめるよう案内しています。error.typeは広い分類としてinsufficient_quotaのままの場合があります。 - 対処は、クレジットの追加か、組織やプロジェクトの上限の引き上げです。
You exceeded your current quota と表示されてAPIが止まったときに、確かめることをまとめます。
insufficient_quota のエラー本文
OpenAIの開発者フォーラムに2026年3月に投稿された実例では、HTTP 429で次の本文が返っています。
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_quota"
}
}
レート制限との違い
| レート制限 | 残高・利用上限 | |
|---|---|---|
| HTTPステータス | 429 | 429 |
| 原因 | 短時間に送りすぎた | クレジットや上限に達した |
| 時間が経つと | 回復する | 回復しない(月次の上限はリセットまで) |
| リトライ | する | しない |
バックオフの実装など、レート制限への対処はLLM APIの429エラーの対処法にまとめています。
error.code で原因を確かめる
OpenAIのエラーコードのガイドには、課金関連の429として次のコードが載っています。
error.code | 原因 | 対処 |
|---|---|---|
credit_balance_exhausted | 前払いのクレジットが残っていない | クレジットを追加する |
organization_spend_limit_exceeded | 組織の支出上限に達した | 上限を変更する |
project_spend_limit_exceeded | プロジェクトの支出上限に達した | プロジェクトの設定を変更する |
organization_usage_limit_exceeded | OpenAIが割り当てた利用上限に達した | 上限の引き上げを申請する |
ダッシュボードでは残高が残っているのにエラーになる場合は、APIキーが属するプロジェクトと、プロジェクト側の上限を確かめます。
リトライから外すコード
レート制限と同じ処理に流すと、回復しないエラーを待ち続けることになります。RateLimitError を捕まえたら、まずコードで分けます。
import os
from openai import OpenAI, RateLimitError
client = OpenAI(
api_key=os.environ["FASTMETAL_API_KEY"],
base_url="https://api.fastmetal.ai/v1",
)
BILLING_CODES = {
"insufficient_quota",
"credit_balance_exhausted",
"organization_spend_limit_exceeded",
"project_spend_limit_exceeded",
"organization_usage_limit_exceeded",
}
def is_billing_error(err: RateLimitError) -> bool:
return err.code in BILLING_CODES or err.type == "insufficient_quota"
try:
resp = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "こんにちは"}],
max_tokens=64,
)
print(resp.choices[0].message.content)
except RateLimitError as err:
if is_billing_error(err):
raise SystemExit(f"課金の設定を確認してください: {err.code}")
raise
OpenAI公式のSDKは429を自動でリトライします。課金エラーで余計に待たないよう、SDKの max_retries も必要に応じて下げます。
FastMetalの前払いの仕組み
FastMetalは、円建ての前払いで使う日本のAIゲートウェイです。チャージした残高が支払いの上限になり、残高を超える請求は発生しません。残高がなくなるとリクエストは拒否されます。
残高が少なくなったときと、なくなったときにはメールで通知します。APIだけで使っている場合も届きます。APIキーごとに残高の上限を分けられるので、1つのプロジェクトが全体の残高を使い切る事態も防げます。
チャージの最低額は¥500です。カード払いは即時に反映され、銀行振込(前払い)では適格請求書を発行します。無料モデルの gemini-flash-lite-free は¥0で、チャージせずに試せます。トークンあたりの単価は料金ページで確認できます。
よくある質問
insufficient_quota は待てば直りますか
クレジット切れは待っても直りません。月次の支出上限が原因の場合は、上限のリセットで回復します。error.code でどちらかを確かめます。
クレジットを追加したのにエラーが続きます
APIキーが属する組織とプロジェクトが、クレジットを追加した先と同じかを確かめます。プロジェクトの支出上限が別に設定されていることもあります。
レート制限との見分け方はありますか
error.code と error.type で分けます。HTTPステータスはどちらも429なので、ステータスだけでは判定できません。
FastMetalで残高がなくなるとどうなりますか
リクエストは拒否され、残高を超える課金は発生しません。チャージすれば同じAPIキーで続けられます。
まとめ
insufficient_quota はレート制限と同じ429でも、対処はまったく別です。リトライから外し、error.code を見て、クレジットか上限の設定を直します。
円建ての前払いで始めるなら、無料でアカウントを作成できます。