A 429 carrying insufficient_quota is a billing condition, not a traffic condition. OpenAI now documents four distinct codes underneath that umbrella type: credit_balance_exhausted when prepaid credits run out, organization_spend_limit_exceeded and project_spend_limit_exceeded for caps you configured, and organization_usage_limit_exceeded for a ceiling OpenAI assigned. The docs are blunt about the consequence: retrying will not restore access. The single most common cause remains a ChatGPT Plus or Pro subscription mistaken for API funding, because the two are separate billing systems and one never pays for the other.
- This is a 429 that retrying cannot fix. OpenAI says so in the docs, in those words.
- Read
error.code, not the message. Four codes now hide under theinsufficient_quotatype. - ChatGPT Plus and Pro do not fund the API. Separate systems, separate balances, no overlap.
- A spend limit you set produces the same 429 as an empty balance. Check limits before you top up.
- Enforcement is not instantaneous: actual spend can drift slightly past a configured cap.
- Usage tiers are now spend-only. The old "and 7 days since first payment" requirement is gone.
- Alerts and hard limits are different features. Alerts never interrupt service, which is usually what you want.
You exceeded your current quota, please check your plan and billing details
The message that made this error famous looks like this, and it is worth saying up front that as of August 2026 it is the legacy form. OpenAI's current error-codes page does not document this string at all.
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_quota"
}
}
What replaced it is more useful. OpenAI split the billing 429s into four codes with separate causes and separate fixes, and kept insufficient_quota as the umbrella type. From the current docs, verbatim:
| error.code | Cause | What clears it |
|---|---|---|
credit_balance_exhausted | Your organization has no prepaid credits remaining | Add credits |
organization_spend_limit_exceeded | Your organization reached its enforced spend limit | Raise or remove the org limit, or wait for the monthly reset |
project_spend_limit_exceeded | One project reached its own enforced limit | Raise that project's limit. Other projects keep working |
organization_usage_limit_exceeded | You hit a ceiling OpenAI assigned, not one you set | Request a higher approved usage limit, or contact support |
The trap: an active subscription and an empty API balance
The most common single cause of this error, by a wide margin, is a developer with a paid ChatGPT subscription who assumes it covers API calls. It does not. ChatGPT and the API platform are separate products on separate billing systems, and money in one is invisible to the other.
- ChatGPT Plus, Pro, Business, and Enterprise pay for chatgpt.com. They add nothing to your API balance.
- The API runs on prepaid credits. No credits, no calls, regardless of what else you pay OpenAI every month.
- They can be different organizations entirely. Your ChatGPT seat may sit in a workspace with no relationship to the org your API key belongs to.
- The failure mode is silent until the first call. The dashboard will happily show a healthy subscription while the API returns
credit_balance_exhausted.
The diagnostic takes ten seconds and beats any amount of reasoning about which account you are in:
curl -sS https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.6-luna","input":"ping","max_output_tokens":16}' \
| jq '.error | {type, code, message}'
Spend limits: the quota you set yourself
Two of the four codes come from limits somebody on your team configured, which means the fix is a settings change rather than a payment. They live in different places and behave differently.
| Limit | Dashboard path | Scope |
|---|---|---|
| Organization spend limit | Settings, Organization limits, Spend | All API traffic across every project in the org |
| Project spend limit | Settings, Limits, Spend | Only API traffic billed to that project |
- Hard enforcement is optional. Both limits take a monthly amount, and hard enforcement is a separate toggle. Without it, you get alerts and keep serving traffic.
- Alerts never interrupt service. For most teams this is the correct configuration: you want to know at $500, not to have production stop at $500.
- Limits reset with the monthly cycle. If you are blocked and cannot raise the cap, that is when access returns.
- Project limits isolate blast radius. One project hitting its ceiling leaves the others running, which is the entire reason to put a runaway batch job in its own project.
Usage tiers, and what actually changed
Tiers govern both your monthly usage ceiling and your per-model rate limits, and they graduate automatically as you spend. The table below is current as of August 2026 and differs from what most guides on the internet still show.
| Tier | Qualification | Monthly usage limit |
|---|---|---|
| Free | User must be in an allowed geography | $100 |
| Tier 1 | $5 paid | $100 |
| Tier 2 | $50 paid | $500 |
| Tier 3 | $100 paid | $1,000 |
| Tier 4 | $250 paid | $5,000 |
| Tier 5 | $1,000 paid | $200,000 |
- The wait-time requirement is gone. Older documentation and every blog post copying it said Tier 2 needed "$50 paid and 7+ days since your first successful payment". The current qualification column is spend-only.
- There is a Free tier row now, with a $100 monthly usage limit, gated on geography. That is a usage ceiling, not a grant of credits: it does not mean you get $100 of free API calls.
- Tiers move rate limits, not just spend. On
gpt-5.6-sol, Tier 1 starts at 500 requests per minute and Tier 5 reaches 15,000. Ongpt-5.6-luna, Tier 5 reaches 30,000 RPM and 180M tokens per minute. - Graduation is automatic as cumulative spend crosses each threshold. There is nothing to apply for below Tier 5.
Fixing it, in order
Read error.code
It names your problem in one field and saves you from checking three dashboards. Everything below branches on it.
credit_balance_exhausted: check the balance, then the expiry
Billing settings shows the remaining prepaid balance. If it reads zero and you are sure you paid, look at the purchase date rather than the invoice: expired credits leave a paid invoice and no balance. Turn on auto-recharge if this is a production dependency, and set the recharge cap deliberately rather than accepting the default.
A spend limit: raise it or scope it
Org limits are in Settings, Organization limits, Spend. Project limits are in Settings, Limits, Spend. If the runaway is one workload, give it its own project with its own cap instead of raising the org ceiling for everything.
organization_usage_limit_exceeded: escalate
There is no self-service fix. Request a higher approved usage limit from the organization limits page, or open a support ticket. Plan for this in advance if you are ramping a launch.
Then, and only then, look at your retry policy
Make sure billing codes bypass it entirely. A retry that cannot succeed is worse than an immediate failure, because it delays the alert to the one person who can actually fix the problem.
Questions people ask
Why do I get "You exceeded your current quota" when I just added credits?
Three usual reasons. The credits went to a different organization than the one your key belongs to, which is easy on an account with both a personal and a company org. Or a spend limit is capping you below your balance, which produces a spend-limit code rather than credit_balance_exhausted. Or you are on the organization usage limit that OpenAI assigns, which credits do not affect at all. Read error.code to tell them apart.
Does ChatGPT Plus include API access?
No. ChatGPT subscriptions and the API platform are separate products on separate billing systems. A Plus, Pro, Business, or Enterprise subscription pays for chatgpt.com and contributes nothing to your API balance. The API runs on prepaid credits you buy separately.
Is insufficient_quota a rate limit?
No, despite sharing HTTP 429 with rate limiting. A rate limit means you are sending requests too quickly and clears within seconds. insufficient_quota means a billing condition, and OpenAI states plainly that retrying billing, spend, or quota errors will not restore API access.
Should I retry a 429 insufficient_quota error?
No. Branch your handler on error.code: credit_balance_exhausted, organization_spend_limit_exceeded, project_spend_limit_exceeded, and organization_usage_limit_exceeded all need a human to change something. The one exception is 429 Resource Unavailable on the flex service tier, which is a genuine capacity signal and is not billed.
Do OpenAI API credits expire?
Yes, an expiry exists, and one year after purchase is the figure widely cited from OpenAI help-centre documentation. We could not fetch that article directly this session, so verify the exact terms on your own billing page. The practical consequence is real either way: credits can lapse and leave you with a paid invoice, a zero balance, and this error.
What is the difference between a spend limit and a usage limit?
A spend limit is one you configure, at the organization or project level, with optional hard enforcement, and it resets monthly. A usage limit is assigned by OpenAI to your organization, scales with your usage tier, and cannot be changed in settings. They produce different error codes and only one of them is yours to adjust.
Sources
Every figure above was read from these pages on August 2026. Vendors reprice without notice; if you find a stale number, tell us.
- OpenAI API error codes the four billing 429 codes and the no-retry statement
- OpenAI spend limits guide dashboard paths, hard enforcement, propagation caveat
- OpenAI rate limits and usage tiers current tier table with spend-only qualification
- OpenAI flex processing 429 Resource Unavailable and the no-charge guarantee
- OpenAI prepaid billing (help centre) credit purchase and expiry terms; not fetchable this session