Claude API Rate Limits: How They Work and How to Avoid Them
Claude API rate limits cap how many requests and tokens you can send within a given time window, and they're enforced per usage tier based on your account's spending history. If you're hitting 429 Too Many Requests errors, the fix usually isn't "wait longer" — it's understanding which limit you're hitting (requests per minute, input tokens per minute, or output tokens per minute) and either reducing load, batching smarter, or moving up a tier.
This matters most when you're building something that needs predictable throughput: a support bot handling concurrent users, a batch pipeline processing documents overnight, or a product with unpredictable traffic spikes. Rate limits aren't a bug — they protect Anthropic's infrastructure and your own bill from runaway loops — but they do require design decisions on your end.
How Claude API rate limits actually work
Anthropic enforces limits along three separate axes, all checked simultaneously:
- RPM (requests per minute) — how many API calls you can make
- ITPM (input tokens per minute) — total tokens sent across all requests
- OTPM (output tokens per minute) — total tokens generated across all requests
Hitting any single limit triggers a 429, even if the other two have headroom. A common surprise: you're nowhere near your RPM cap, but a handful of large-context requests blow through ITPM.
Limits scale with usage tier, which Anthropic assigns based on account age and cumulative spend. New accounts start on the lowest tier (low RPM/TPM), and tiers increase automatically as you spend more and maintain good standing. There's no manual "request more capacity" form for early tiers — it's tied to usage history and billing.
Every response includes rate limit headers so you can track your position before you hit a wall:
anthropic-ratelimit-requests-limit: 50
anthropic-ratelimit-requests-remaining: 42
anthropic-ratelimit-requests-reset: 2024-01-15T10:32:00Z
anthropic-ratelimit-tokens-limit: 40000
anthropic-ratelimit-tokens-remaining: 31200
anthropic-ratelimit-tokens-reset: 2024-01-15T10:32:00Z
Reading these on every response — not just when you get a 429 — lets you throttle proactively instead of reactively.
Practical ways to avoid hitting them
1. Implement exponential backoff with jitter
The naive retry-immediately approach makes bursts worse, not better. A standard pattern:
async function callClaude(payload, attempt = 0) {
const res = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": process.env.ANTHROPIC_API_KEY,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
body: JSON.stringify(payload),
});
if (res.status === 429 && attempt < 5) {
const delay = Math.min(1000 * 2 ** attempt, 30000) + Math.random() * 500;
await new Promise((r) => setTimeout(r, delay));
return callClaude(payload, attempt + 1);
}
return res.json();
}
This handles occasional bursts gracefully but won't save you from sustained overload — for that you need queuing.
2. Queue and throttle at the application layer
If you're fanning out requests (batch summarization, bulk classification, embedding-style workloads), don't fire them all concurrently. Use a queue with a concurrency cap tuned below your known RPM/TPM ceiling, and track the remaining-tokens header to slow down dynamically as you approach the limit.
3. Reduce token volume per request
Large system prompts, long conversation histories, and verbose tool schemas all count against ITPM. Trim context aggressively:
- Summarize or truncate old conversation turns instead of resending full history
- Cache static system prompts rather than reconstructing them
- Only include tool definitions relevant to the current turn
4. Separate latency-sensitive traffic from bulk jobs
If a single account handles both real-time chat and background batch processing, a batch job can eat your rate limit budget right when a user needs a fast response. Splitting workloads across separate API keys — or separate accounts — keeps interactive traffic isolated from bulk throughput.
5. Monitor per-key, not just per-account
If multiple services or team members share one API key, you lose visibility into which workload is actually consuming the limit. Attributing usage per application or per team member makes it much easier to diagnose which integration is causing throttling — and to enforce sane caps on each one instead of one shared, opaque pool.
This is one of the practical reasons teams put a layer like SubToAPI in front of their Claude access: it issues separate sub_live_... API keys per application or environment, so a runaway batch job in one service doesn't silently starve your production chat endpoint. Streaming and tool use work the same way you'd expect from a standard Claude integration — see the streaming docs and tool use docs — but usage and limits are visible per key in one dashboard instead of buried in a single account's aggregate numbers.
What to do when you actually hit a wall
If you're consistently rate-limited despite backoff and queuing, the underlying issue is usually one of:
- Genuine tier ceiling — your traffic has outgrown your current usage tier. Sustained, well-behaved spend typically moves you up over time.
- Bursty traffic pattern — you're within your average budget but spiking above the per-minute cap. Smoothing requests with a queue fixes this without needing a higher tier.
- Token-heavy requests — you're RPM-fine but ITPM/OTPM-constrained. Trim prompts and cap
max_tokenson responses where you don't need long output.
Start by checking the rate limit headers on your actual traffic before assuming you need a bigger plan — most rate-limit pain is a smoothing problem, not a capacity problem.
Getting started without managing limits yourself
If you'd rather not build backoff logic, header parsing, and per-key attribution from scratch, SubToAPI wraps Claude access behind a standard HTTPS API with application-level keys, usage metadata, and team seats already built in. Check the quickstart or the messages endpoint docs to see the request format, or sign up for a free trial to test it against your own workload.
questions
Do Claude API rate limits reset instantly after a 429? No — each limit (RPM, ITPM, OTPM) has its own rolling reset window shown in the response headers. Check anthropic-ratelimit-*-reset rather than guessing a fixed retry delay.
Does a higher-tier plan automatically raise my rate limits? Usage tiers are tied to account spend and history, not just plan choice. Sustained, well-behaved usage over time typically moves you to a higher tier with increased RPM/TPM caps.
Can I split traffic across multiple API keys to get more capacity? Rate limits are enforced per account/tier, not purely per key, so creating extra keys on the same account won't bypass the ceiling. Separate accounts or a gateway with proper key attribution is the practical way to isolate workloads.