Summary
The claude.ai billing console combines two fundamentally different charge types into a single undifferentiated display. Users on Max plan with extra_usage_enabled: false see API direct charges and incorrectly assume they are subscription overages, causing misdiagnosis of plan size and incorrect support tickets.
Charge types being conflated
| Charge type |
What it is |
When it applies |
| API direct calls |
Pay-as-you-go from external apps calling the Anthropic API |
Always, when your app calls the API |
| Subscription extra usage |
Overages above plan-included usage, at API rates |
Only when extra_usage_enabled: true |
Steps to reproduce
- Active Claude Max subscription,
extra_usage_enabled: false
- Run API calls from an external application (Anthropic SDK)
- Navigate to console.anthropic.com → Billing
- Observe: both charge types appear in one block with no source label
Expected behaviour
Two-row breakdown:
Subscription: max-5x · $100/mo · Renews 2026-06-21 · Extra usage: OFF
API pool: $0.82 of $150 customer cap · Tier 2 · Resets 2026-06-01
Actual behaviour
Single undifferentiated "Usage" block. No indication of which charges are subscription-tier vs. API direct.
Impact
- Users misdiagnose plan size ("I'm over my plan limit" when they have no overages)
- Users disable
extra_usage_enabled thinking it will stop all API charges — it doesn't stop direct API calls
- Support tickets for correct but unexplained billing behaviour
Proposed fix (minimum viable)
Add a source label to each line item in the billing display:
"Claude.ai surfaces (subscription plan)"
"API direct calls (your applications)"
Reference
Open-source cost tracking tooling that tracks both pools separately via Admin API: https://github.com/daskuntal75/llm-cost-kit
Full analysis: https://github.com/daskuntal75/llm-cost-kit/blob/main/docs/responsible-ai-cost-framework.md
Summary
The claude.ai billing console combines two fundamentally different charge types into a single undifferentiated display. Users on Max plan with
extra_usage_enabled: falsesee API direct charges and incorrectly assume they are subscription overages, causing misdiagnosis of plan size and incorrect support tickets.Charge types being conflated
extra_usage_enabled: trueSteps to reproduce
extra_usage_enabled: falseExpected behaviour
Two-row breakdown:
Actual behaviour
Single undifferentiated "Usage" block. No indication of which charges are subscription-tier vs. API direct.
Impact
extra_usage_enabledthinking it will stop all API charges — it doesn't stop direct API callsProposed fix (minimum viable)
Add a
sourcelabel to each line item in the billing display:"Claude.ai surfaces (subscription plan)""API direct calls (your applications)"Reference
Open-source cost tracking tooling that tracks both pools separately via Admin API: https://github.com/daskuntal75/llm-cost-kit
Full analysis: https://github.com/daskuntal75/llm-cost-kit/blob/main/docs/responsible-ai-cost-framework.md