Fix 429 "rate limit exceeded" and "concurrency limit exceeded"
API Error: 429 {"type":"error","error":{"type":"rate_limit_error","message":"API Key request rate exceeded"}}CCSub returns 429 for three different limits: requests per minute per key (60 by default), an optional per-key token rate, and concurrent requests per account (10 by default). Each one has a different fix.
Fix it in 3 steps
- 1
Read which limit you hit
API Key request rate exceeded means this key sent too many requests in the last minute. API Key token rate exceeded means you set a token rate on the key and went over it. User concurrency limit exceeded means your account has too many requests waiting at the same time.
- 2
For rate limits, edit the key
On API Keys in the dashboard, edit the key, turn on custom rate limits, and raise requests per minute. Leave the token rate empty for no limit. You can also give each tool or project its own key, since every key is counted separately.
- 3
For concurrency, send fewer requests at once
Close some of the Claude Code or Codex sessions running in parallel, and lower the parallelism of subagents and batch scripts. The cap is per account and shared by all keys, so creating more keys won't help. If you genuinely need more, contact support with your use case.
Other forms of the same error
{"type":"error","error":{"type":"concurrency_limit_error","message":"User concurrency limit exceeded"}}{"type":"error","error":{"type":"rate_limit_error","message":"API Key token rate exceeded"}}exceeded retry limit, last status: 429 Too Many Requests
Three limits, one status code
CCSub runs three checks before forwarding a request. Failing any of them returns HTTP 429:
API Key request rate exceeded— requests per minute for a single key. Default 60. You can change it yourself on the Keys page.API Key token rate exceeded— an optional per-key token rate. Unlimited by default; you only see this if you set one.User concurrency limit exceeded— concurrent requests for your whole account. Default 10. Not user-adjustable.
The first two have error.type = rate_limit_error; the third is concurrency_limit_error.
Too many requests per minute
The counter is a fixed 60-second window that starts with the key's first request. Anything over the limit inside that window gets a 429, and the count resets when the next window starts. A single Claude Code action can fire more than one request — title generation and other background calls ride along with the main conversation — and agentic tools like opencode and Cline make bursts of calls while running tools. Sixty per minute can be tight for heavy sessions.
What to do:
- Open API Keys, edit the key, enable custom rate limits, and raise requests per minute (req/min).
- Give each tool or project its own key. Limits are per key, so separate keys don't compete with each other, and the usage log becomes easier to read per key.
- In your own batch scripts, space requests out or put them in a queue. On a 429, wait a few seconds before retrying instead of resending immediately.
Token rate exceeded
This only happens if you configured a token rate on the key. Note how it's counted: each request adds the max_tokens value it declares, not the tokens it ends up using. Claude Code typically declares tens of thousands of max_tokens per request, so a limit of, say, 150,000 tokens per minute may only allow a few requests. If you don't need a token cap, clear the field.
Account concurrency exceeded
Concurrency counts requests on your account that are waiting for the upstream to start responding (for non-streaming requests, until the full response comes back). All keys on the account share the same cap, so you can't work around it with more keys. Common ways to hit it:
- Several Claude Code or Codex windows all running tasks at once.
- Claude Code dispatching many subagents in parallel.
- Batch or eval scripts hammering the API with high concurrency.
The fix is to lower parallelism: fewer simultaneous sessions, and a concurrency setting below 10 for batch jobs. If your workload really needs more, email support and describe what you're running.
What it looks like in each tool
- Claude Code retries first, showing
Retrying in Ns · attempt x/10, and only printsAPI Error: 429 ...once retries are exhausted. - Codex CLI prints
exceeded retry limit, last status: 429 Too Many Requestsafter its retries run out. - Your own code should branch on
error.type: afterrate_limit_error, wait for the next minute; afterconcurrency_limit_error, wait for in-flight requests to return before sending new ones.
FAQ
What are the default limits?
Each key allows 60 requests per minute by default, counted in a fixed 60-second window. Token rate is unlimited unless you set one. Each account can have up to 10 requests waiting on an upstream response at the same time.
Does Claude Code retry 429s automatically?
Yes. Claude Code retries temporary 429s up to 10 times by default and shows Retrying in Ns · attempt x/10 while it does. You only see the error after those retries fail, which means you've been over the limit for a while.
Why do I get "token rate exceeded" after only a few requests?
The token rate adds up the max_tokens declared in each request, not the tokens actually used. Claude Code often declares tens of thousands of max_tokens per request, so a modest token rate runs out after a handful of calls. If you don't need it, leave the token rate empty.
Are 429 responses billed?
No. Rate limiting happens before anything is forwarded to a model.
Still stuck?
- Read the troubleshooting guide (Chinese)
- Contact support: Email support@ccsub.net with the tool and version, your OS, the full error text, and your account email (never send your API key).
- Re-check your setup against the integration guide: Claude Code setup guide, Codex CLI setup guide, Cline setup guide
Related errors
API Error: 402 {"type":"error","error":{"type":"insufficient_balance","message":"余额不足,请前往 https://www.ccsub.net/purchase 充值"}}Your available balance or today's subscription quota ran out. Top up, wait for the daily reset at midnight Beijing time, or — if you do have balance — retry in a few minutes.API Error: 503 {"type":"error","error":{"type":"overloaded_error","message":"上游线路暂时不可用,请稍后重试(不是您账户余额的问题) | Upstream temporarily unavailable, please retry shortly (this is not about your account balance)."}}CCSub already failed over between lines and none was free at that moment. Wait a minute and type "continue", or switch models with /model. Not billed, and not about your balance.API Error: 504 {"type":"error","error":{"type":"timeout_error","message":"Upstream timed out"}}The upstream took too long to start answering. Use streaming (stream: true) in your own code, /compact very long contexts, and split long outputs. A one-off 504 just needs a retry and isn't billed.
New to CCSub?
Sign up, create an API key in the dashboard, and paste it into Claude Code, Codex CLI or your editor. You pay for what you use.