Rate limit quota is shared per organizationUuid, not per account
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
What's Wrong?
Rate limit quota is pooled at the organization level (organizationUuid), not per-account. All accounts sharing the same organizationUuid consume from a single quota pool — using one account exhausts the limit for all others in the same organization.
Root cause: claude login does not clear the oauthAccount field in .claude.json, causing cross-contamination of account UUIDs across config directories. These leaked UUIDs are likely sent to the backend and trigger org-level grouping. See detailed analysis in the comment below.
cc @dliedke
Evidence
I'm on the Max plan ($200/mo) and checked my accounts via the OAuth usage API (/api/oauth/usage) and local config (oauthAccount.organizationUuid in .claude.json):
| organizationUuid | Accounts | Session | Weekly | Behavior |
|-----------------|----------|---------|--------|----------|
| 34d83544-a7e... | Account A, B, C, D, E | 100% (identical) | 83% (identical) | Shared — same utilization & reset times |
| 1b8fb384-9be... | Account F | 0% | 100% | Independent |
| c2b1b50a-454... | Account G | 0% | 100% | Independent |
| 1d6df450-33f... | Account H | 0% | 100% | Independent |
- Accounts under the same org show identical utilization percentages and reset times
- Accounts under different orgs have fully independent quotas
- Billing method and phone number are not the grouping factor (verified: different cards and phone numbers within the same org group)
What Should Happen?
Each Max subscription account should have its own independent rate limit quota. Per-organization pooling is unexpected and undocumented — users paying for separate subscriptions will find them silently linked if they end up in the same organization.
At minimum, this behavior should be clearly documented so users understand what they're paying for.
How to Check Your Own Grouping
# Check organizationUuid in your config:
python3 -c "import json; d=json.load(open('$HOME/.claude/.claude.json')); print(d['oauthAccount']['organizationUuid'])"
# Or check the API response header 'anthropic-organization-id'
Related Issues
- #41881 (closing — superseded by this issue)
- #41788 — Max 20 plan: rate limit 100% exhausted within ~70 minutes
- #41590 — New account immediately hits rate limit with zero usage
- #38335, #38239, #41663, #41084 — Various rate limit reports
Claude Code Version
2.1.89
This issue has 7 comments on GitHub. Read the full discussion on GitHub ↗