[BUG] Extra-usage crossover banner doesn't disclose API-rate billing; /usage-credits falsely reports "unlimited" despite org monthly cap

Open 💬 0 comments Opened Jul 6, 2026 by Niall-Faughnan

Environment

  • Claude Code v2.1.201 (native binary), macOS (darwin 25.5.0)
  • Claude Team plan seat, org has extra usage (usage credits) enabled with a configured monthly org spend cap

Summary

A team member hit 100% of their included plan usage over a weekend, kept working, and unknowingly billed ~€1,300 to the organization at standard API rates. Two separate pieces of Claude Code messaging made this effectively invisible:

  1. the crossover banner does not disclose that billing switches to API rates, and
  2. /usage-credits reports the org's credits as "unlimited" even though the org has a monthly cap configured.

Problem 1 — crossover banner doesn't disclose the billing change

At the end of the 5-hour window, the only message shown was:

You're now using usage credits · Your session limit resets \<time>

(Same pattern for the weekly window; verbatim strings from the v2.1.201 binary.)

Nothing in this message says:

  • "usage credits" = metered billing at standard API token rates
  • whether any spending cap applies, or how much has been spent so far

It reads as an informational notice, not a billing-mode change. The pre-100% warnings ("You've used N% of your weekly limit") are equally cost-neutral. The user kept working for the rest of the weekend; every token was API-rate billed with no further prompt.

Problem 2 — /usage-credits reports "unlimited" when the org has a monthly cap

On the affected Team seat, /usage-credits returns:

"Your organization already has unlimited usage credits. No request needed."

The org in fact has a finite monthly cap configured (verified by the org owner in admin settings). So the one command a seat member can run to check their billing exposure gives a factually wrong answer — and a scary one in the other direction, too: after the incident it suggested spend was uncapped when it wasn't.

From the CLI's behavior this looks like the "unlimited" branch fires whenever the seat-visible monthly_limit is null — i.e. the org-level cap isn't surfaced to member seats and null is presented as "unlimited" rather than "unknown / managed by your admin".

Expected behavior / proposed fix

  1. Crossover banner should state the billing change explicitly, e.g.:

> You've hit your session limit. Continuing now bills your organization at standard API token rates (org monthly cap: €X — €Y used). Resets \<time>; switch models or stop to avoid charges.

Ideally paired with a per-member confirmation before crossing from included quota into paid extra usage — as proposed in #68351 (this issue is complementary: it's about the wording/accuracy of the messages, not the consent flow).

  1. /usage-credits should never claim "unlimited" when an org cap exists. If the cap isn't visible to member seats, say "managed by your org admin" (and preferably surface the org cap and month-to-date spend read-only).

Steps to reproduce

  1. Team plan org, extra usage enabled, org monthly cap set.
  2. As a member seat, use Claude Code until a 5-hour/weekly window reaches 100%.
  3. Observe the crossover banner mentions only "usage credits", with no rate/billing/cap disclosure.
  4. Run /usage-credits on the member seat → "Your organization already has unlimited usage credits. No request needed." despite the configured cap.

View original on GitHub ↗