B1.2Bloom · ANot started

Product-tier vs API-level limit

Reading depth

What you'll learn

Claude.ai stacks subscription-tier limits on top of model capacity. The API exposes model capacity directly with no tier in between.

  • Claude.ai = product surface on top of the API. Tier-side caps stack on top of model capacity.
  • Daily message caps and dropdown model selection are pure tier features. The API has neither.
  • Per-message context on Claude.ai = min(model window, tier cap). The API exposes the model number directly.

Claude.ai (the chat product) and the Claude API expose the same underlying models — but Claude.ai sits behind a product-tier envelope that imposes its own caps on top. The model's capacity (e.g. a 200K-token window for Sonnet) is what the API exposes; what you actually get inside Claude.ai depends on your subscription (Free, Pro, Team, Enterprise) and on per-product features the API never sees.

Three families of limits look identical on the surface but live in different layers. Per-message context length is set by the model on the API side, but trimmed by the product tier on Claude.ai. Daily / hourly message caps are pure product caps — the API has rate limits and credit budgets, not 'you've used your 50 messages today.' Model selection (which models are even pickable from the dropdown) is also tier-bound: a Free user can't pick the same model the API would happily serve their key.

When a user hits a wall on Claude.ai, the diagnostic question is *which layer is enforcing this?* If the answer changes per subscription tier, it's a product cap and the fix is account-side (upgrade, switch surface, or move to the API). If the answer is identical across all tiers and the API hits the same wall with a different shape (rate-limit error, credit exhaustion), it's a model- or platform-level cap and the fix is architectural (retry, batch, smaller prompt).

Mis-attributing the layer is the canonical failure. Telling a Free user 'the model has a 50-message limit' is wrong (it's the tier). Telling an API user 'just upgrade to Pro' is also wrong (the API doesn't go through Pro). Naming the layer correctly is what lets you give the right fix.

Key points

  • Claude.ai = product surface on top of the API. Tier-side caps stack on top of model capacity.
  • Daily message caps and dropdown model selection are pure tier features. The API has neither.
  • Per-message context on Claude.ai = min(model window, tier cap). The API exposes the model number directly.
  • Diagnostic question: does the limit change per subscription? If yes, it's product-tier.

Examples

'Why is my context smaller on Claude.ai than the docs say?'

User is on Free tier. The model's API-side window may be 200K tokens, but Free clamps the per-message context envelope to a much smaller number. The API will not enforce that clamp. Fix: name it as a tier cap, recommend Pro/Team if they need the bigger envelope, or use the API directly.

'I hit a daily limit on Claude.ai — does the API have one?'

Daily message caps are tier features. The API has rate limits (per minute / per token) and credit budgets, not a daily message ceiling. Same user, same model, different surface = different cap shape.

Pitfalls

  • Quoting model-card limits as Claude.ai limits without checking the tier first.
  • Telling a user to 'switch to a bigger model' when the binding constraint is a tier cap, not the model.
  • Conflating API rate-limits with Claude.ai daily caps — different layer, different remedy.

Source notes: 00-academy-basics/notes/01-claude-101.md

Ask Claude

Build a prompt with this lesson + your question, copy it, and open the Claude Project in a new tab.