OpenAI API 429 "You exceeded your current quota" (insufficient_quota): it is billing, not a rate limit, and what to do
This is the most misread error in the OpenAI API. The status is 429, which every SDK and every tutorial associates with "slow down", so the retry-with-backoff code kicks in and fails again, and again. It has nothing to do with speed. The organization that owns the key has run out of prepaid API credit, or reached a monthly spend limit that someone set. The second common misreading is thinking a ChatGPT Plus or Pro subscription covers the API: it does not. API usage is a separate prepaid balance on the OpenAI Platform, and a new key on an account that has never bought API credit produces exactly this message on its first request.
Last verified September 21, 2026 against OpenAI docs: error codes, OpenAI docs: rate limits and usage tiers, GitHub: issues quoting the exact message · 5 min read
| Provider | OpenAI API (api.openai.com) |
| HTTP status | 429 Too Many Requests, the same status as a rate limit, which is the source of the confusion |
| Error type | insufficient_quota; error.code says which kind: credit_balance_exhausted or organization_spend_limit_exceeded |
| Message | You exceeded your current quota, please check your plan and billing details. |
| How common | 2,933 GitHub issues quote the exact message; 1,707 mention insufficient_quota (GitHub search, September 21, 2026) |
| Can you wait it out? | No. It clears when credits are added or a spend limit is raised. OpenAI's docs: "Retrying billing, spend, or quota errors won't restore API access." |
- Read
error.code.credit_balance_exhaustedororganization_spend_limit_exceededis billing; anything underrate_limit_erroris speed. Only the second is helped by waiting. - Billing fix: add credits, or raise the spend limit, in the OpenAI Platform for the organization and project the key belongs to. A ChatGPT subscription does not count.
- If GPT is not required: run the same code on an open model behind a different base URL, on a balance that is prepaid and uncapped. Fix 3 below.
What the error looks like, and the four 429s
{
"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"
}
}OpenAI uses one status for four situations and tells them apart in the body. error.type is insufficient_quota for both billing cases; error.code narrows it:
| HTTP | error.type / error.code | What it means | Fixed by |
|---|---|---|---|
| 429 | insufficient_quota · credit_balance_exhausted | The organization has no prepaid credits left | Adding credits. Not by waiting |
| 429 | insufficient_quota · organization_spend_limit_exceeded | A monthly spend limit you or an admin set was reached | Raising the limit, or waiting for the month to reset |
| 429 | rate_limit_error · rate limit reached | Too many requests or tokens per minute for your tier | Waiting for Retry-After; the SDKs do this |
| 429 | rate_limit_error · slow_down | Your request rate rose too fast | Ramping up gradually |
The OpenAI SDKs retry every 429 by default, twice, with backoff. For the two billing codes that only delays the message. If you handle 429 in your own code, branch on error.type first.
curl -s https://api.openai.com/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Say ok"}],"max_tokens":5}' | python3 -c "import sys,json; e=json.load(sys.stdin).get('error',{}); print(e.get('type'), e.get('code'), '|', e.get('message','')[:90])"
# insufficient_quota -> billing; add credits or raise the spend limit. rate_limit_error -> wait for Retry-After.Why you got it
- No API credit has ever been bought. The API is prepaid for new accounts. A key created on a fresh account, or on an account that only has a ChatGPT subscription, has no balance to draw on and fails on the first call.
- The balance ran out. Usage drew it down to zero. Auto-recharge, if you set it up, has a monthly ceiling of its own.
- A spend limit was reached. Organizations can set a monthly limit; when it is hit, the error is the same until the month resets or an admin raises it.
- The key is in the wrong project or organization. Credits belong to an organization and limits can be set per project. A key from a project with a $0 budget fails even if another project has funds.
Fix 1: add credit or raise the limit
In the OpenAI Platform, open Billing for the organization that owns the key, add credits, and check the project's spend limit. Then re-run the request; there is no cache to clear and no reset to wait for. If you are not sure which organization the key belongs to, the Platform shows it next to the key. This is the only fix for GPT models: nobody else serves them.
Fix 2: stop retrying it
Whatever you do about the balance, make the code stop treating this as transient. Check error.type == "insufficient_quota" before the retry loop and raise, alert or fail over instead. Every minute of exponential backoff against a billing error is a minute of downtime with nothing happening. The same applies to the 402 that other providers use for this: DeepSeek, OpenRouter.
Fix 3: if the task does not need GPT, run it on an open model
A lot of code that calls gpt-4o-mini is doing summarisation, extraction, classification or a chat assistant, and current open models do that work. The OpenAI SDKs take a base_url, so the change is one line and a model name:
import os
from openai import OpenAI
# was: client = OpenAI() # api.openai.com, gpt-4o-mini
client = OpenAI(base_url="https://api.inferenceapis.com/v1", api_key=os.environ["INFERENCEAPIS_API_KEY"])
resp = client.chat.completions.create(
model="openai/gpt-oss-120b", # OpenAI's open-weight model; or deepseek-ai/DeepSeek-V4-Flash, zai-org/GLM-5.3
messages=[{"role": "user", "content": "Summarise this in one line: ..."}],
)
print(resp.choices[0].message.content)Two honest limits. We do not serve GPT models; a request for one returns 404 model_not_found with a link to this catalogue. And openai/gpt-oss-120b, OpenAI's open-weight release, is a reasoning model: it thinks before it answers, which is slower on short prompts unless you send reasoning_effort: "low".
| If you were using | Open model to try here | Per 1M tokens in / out | Notes |
|---|---|---|---|
gpt-4o-mini, gpt-4.1-mini, gpt-5-mini | deepseek-ai/DeepSeek-V4-Flash | $0.19 / $0.38 | 1M context; tools, JSON mode, vision not included |
gpt-4o, gpt-4.1 | zai-org/GLM-5.3 or deepseek-ai/DeepSeek-V4-Pro | $1.82 / $5.72 · $1.72 / $5.15 | The strongest agent and coding models here |
| Anything, when you want an OpenAI model | openai/gpt-oss-120b | $0.20 / $0.80 | OpenAI's own open-weight release; reasoning model |
| Vision | Qwen/Qwen3-VL-235B-A22B-Instruct | $0.26 / $1.15 | Image plus text in |
What is different on this side of the switch: the balance is prepaid and yours, there are no usage tiers to unlock and no monthly cap, and there is no per-minute meter, so a 429 here only ever means a GPU backend is momentarily busy and carries a Retry-After. Models run in the United States with zero retention (/trust).
Frequently asked questions
I pay for ChatGPT Plus. Why does my API key say I have no quota?
ChatGPT subscriptions and API credit are separate products billed separately. The API needs prepaid credit on the OpenAI Platform regardless of any ChatGPT plan.
The dashboard shows I have credit. Why the error?
Check that the key belongs to the same organization and project as the credit, and that the project's spend limit has not been reached. Keys are scoped; balances are per organization; limits can be per project.
Is this the same as "Rate limit reached for requests"?
No. Both are 429s, but that one has type: rate_limit_error, clears in seconds, and comes with a Retry-After header. insufficient_quota does neither.
Can Inference APIs serve gpt-4o or GPT-5?
No. Those are closed models available only from OpenAI and its cloud partners. We serve open-weight models, including OpenAI's GPT-OSS 120B, through the same API format.
Where Inference APIs fits
Fix 3 is honest about what it is: we do not serve GPT models, and a request for gpt-4o-mini here returns model_not_found. What we serve is open models, including OpenAI's own GPT-OSS 120B, on the same wire format, from a prepaid balance with no tiers to unlock and no monthly cap. If your workload does not need GPT specifically, that is a base URL change. A new account starts with $1 of credit.
Something changed or wrong? Tell us and we will re-verify the entry.
