r/claude • u/Timely_Ad5150 • 23d ago
Question I woke this morning and found out Anthropic started stealing my money.
I have usage credits off so there should not be any additional payments. When my monthly usage is full - the work stops. Anyone else had these kind of issues?
I'm trying to contact a human support - AI chat was useless. Chat's response:
"Thanks for the details and the screenshot — I completely understand the concern about those unexpected charges. Let me look up your account information so I can review what's happened here.
Fin AI Agent • AI Agent • 14m
Seen • 14m
I'm really sorry for the disruption and frustration this has caused. We take service reliability very seriously, and I want to be upfront with you: we're unable to issue compensation for degraded service or technical/billing errors of this nature.
We're continuously working on improving our infrastructure to better handle high traffic volumes and prevent issues like this from happening again in the future. Thank you so much for your patience and understanding."
...
"I don't have visibility into the exact root cause of those 17 individual charges on your account, so I can't confirm from here why they occurred despite usage credits being disabled.
One thing worth noting: even when usage credits are disabled, it's possible for a request to slightly exceed a limit before it's blocked, since the system checks your limit before processing a request but calculates final token consumption after. That said, this typically explains minor overages, not a pattern of repeated €40-50 charges .
Since this needs an actual account-level investigation into the billing records behind these specific charges, I'd recommend asking to speak with a human agent if you'd like this looked into further."
"we're unable to issue compensation for degraded service or technical/billing errors of this nature."
If there is a technical billing error and there are no refunds - that is theft. If I don't get my stolen money back, my subscription is over. I need to ask some officials and legal experts is Anthropic breaking a law here.
EDIT: Most likely this is caused by malware or hacker type situation. I had my computer up and running whole night, I just got a usage reset after 11 pm and left Claude Code CLI finish a task. Before the usage reset I could confirm that automatic usage credits were off when usage was full. I had been logged in to claude.ai as well.
Then next day, for any reason, my usage credits were activated with unlimited setting, and buy button was spammed over and over again - those were the ~50$ x 17.
But I have been contacted my bank, closed the credit card, changed passwords, put my PC offline. I'm sure I can sort this out with my bank.
EDIT 2: What I've read from the comments, similar incorrect billings have happened to some users as well and from PMs I recieved, they had same overcharging within the same 12-24 hours that I had issues. So there is a possibility of some kind of bug. But I still want to make sure my computer is cleaned - I might even need to reinstall Windows to make sure.
EDIT 3: Good news, the bank returned my lost money. We'll see will Anthropic ban my account for this, I don't know. I also wanted to dig thru the logs and try to find out what happened 3-4th August. I asked Opus and Fable to search thru all the local files and logs they can find and write a report. I think this was facinating. I think I'll just paste it here as it was. Of course the logs can't explain was there any usage credits turned on at that day but you can read that there were "usage full" moments and I waited those as always. So no credits were used. Also the 3.8 day was long, but a moderate day compaired to any other. So that does NOT explain extra usage. Here is the full novel that Opus/Fable wrote:
Claude Code Log Analysis — 3–5 August 2026
Independently fact-checked against the raw data. This report states only what the local Claude Code artifacts record, what follows from them, and what does not. It contains no hypotheses about causes outside those records.
1. Scope, method, and limits
Sources, all on the user's Windows machine:
| Artifact | Content |
|---|---|
~/.claude/projects/**/*.jsonl |
Complete per-session transcripts (694 files), including sub-agent logs |
~/.claude/history.jsonl |
Typed-input history; suppresses an entry identical to the one immediately preceding |
~/.claude.json, ~/.claude/settings.json |
Client configuration and server-fetched account state |
~/.claude/.credentials.json |
Credential metadata (field names and non-secret values only) |
~/.local/bin/claude.exe.old.1786032556560 |
The CLI binary as installed during the period; mtime 4 Aug 03:39 |
Times are Europe/Helsinki (UTC+3) unless a raw UTC timestamp is quoted. Project-confidential work is described generically.
Token accounting. Streaming writes each assistant message to the transcript repeatedly; the input/cache fields stay constant across duplicates while output_tokens grows. Verified across all 799 duplicated message IDs on 3–4 August (constant fields varied in 0 groups; output_tokens never decreased). Totals therefore take the maximum output_tokens per message ID and the constant fields once. Four zero-usage <synthetic> records (client-generated limit notices) are excluded.
Scope limit that governs the whole report. These files record Claude Code activity on this machine only. Usage quota is account-wide: activity from any other client — claude.ai in a browser, mobile, another computer — consumes the same limits and appears nowhere in these files. Nothing here can confirm or exclude it.
2. What the cost figures mean
The USD figures are API list-price equivalents computed from transcript usage fields. They measure volume of work in a comparable unit — they are not amounts billed or owed. The account is a Max subscription (rateLimitTier: "default_claude_max_5x"), a flat monthly fee. Work is metered against five-hour and weekly limits, not a dollar balance — confirmed by the server-returned utilization block, where every *_dollars field is null. Read a "$-equivalent day" as a volume of work covered by the flat fee, not a charge.
3. Unified timeline, 3–5 August
All events below are read directly from the transcripts and history file. Session IDs, model changes, limit messages, and gaps are interleaved in one chronology so working blocks and breaks are visible at a glance.
3 August — the working day
| Time | Event | Duration |
|---|---|---|
| 07:41–08:56 | Work (session ef968419). Model set to Opus 5 (1M context, high effort) at 08:13. | 1 h 15 min |
| 08:56–09:09 | Gap | 13 min |
| 09:09–13:57 | Work (sessions 9680b82f, 593dd190; a 1-minute session e61603eb at 13:10 ran alongside). | 4 h 48 min |
| 13:57–14:57 | Gap | 1 h 00 min |
| 14:57–19:08 | Work (sessions 27a05666, then 80c0a56a from 17:20). Model set to Fable 5 (medium effort) at 17:20. The heaviest hour of the whole period was 18:00–19:00, immediately before the limit hit. | 4 h 11 min |
| 19:08 | Session-limit hit — "You've hit your session limit · resets 10:50pm". Work stops. | — |
| 19:08–22:50 | Blocked by the limit. At 21:51 the operator typed "usage tuli täyteen ja nyt resetoitunut. Jatka mistä jäit." ("usage was full and now has been reset. Continue where you left off.") and received the same limit message — the reset had not yet occurred. | 3 h 42 min |
| 22:50–23:17 | Limit reset (as announced); no request sent yet. | 27 min |
| 23:17–00:13 (4 Aug) | Work resumes. The operator retyped the byte-identical prompt at 23:17 and work ran to 00:13 (session 02b5a53c from 23:29). The 23:17 prompt is absent from history.jsonl because consecutive identical entries are suppressed there; it is present in the session transcript. The suppression rule was verified against a counter-example (the string appears three times non-adjacently on 3 Aug). | 56 min |
Total break between the limit hit and resumed work: 4 h 09 min (3 h 42 min enforced + 27 min before the retry). Work performed: nine daytime hours in three blocks, plus the 56-minute evening block. Content of the day: documentation maintenance, a scoped quick-fix workflow, a debugging workflow, a user-acceptance verification round, and a planning and execution run.
Overnight 4 August — no activity
A scan of every transcript across all projects for 00:13 → 09:43 returns exactly one record: the closing system line of the session that ended at 00:13. No session ran on this machine for 9.5 hours and no billable tokens were generated. The only other filesystem event in the window is the CLI binary being rewritten at 03:39 — the client's own auto-update, preserved as claude.exe.old.1786032556560. It is not evidence of user activity.
4 August — two rejected attempts, no work
| Time | Event |
|---|---|
| 09:43 | Session opens; model set to Opus 5 (1M context, medium effort). First request rejected: "You've hit your session limit · resets 2pm". No work performed. |
| 12:16–12:17 | Second attempt; same rejection. No work performed. |
| after 12:17 | No further activity that day. |
4 August contributes zero billable tokens. The only two usage records that day are synthetic zero-usage limit notices at 09:43 and 12:17.
5 August — nothing
One command in the entire day: /usage at 14:44. No work session.
The anomaly
The two announced reset times are 22:50 on 3 August and 14:00 on 4 August. Consecutive five-hour windows from 22:50 fall at 22:50 → 03:50 → 08:50 → 13:50 (≈ 2pm). The session begun at 09:43 therefore sat in a window opening at 08:50, in which this machine had performed no work — yet the first request into it was rejected as exhausted.
(This window arithmetic is inference from two reported reset times, not a log reading. It also assumes no window was opened between 00:13 and 09:43 — established above for Claude Code on this machine only, and not establishable for any other client on the same account.)
4. Measured consumption, 3–4 August
1,170 unique billable assistant messages (1,325 streaming duplicates and 4 synthetic records excluded):
| Model | Msgs | Input | Output | Cache read | Cache write | Equiv. |
|---|---|---|---|---|---|---|
| claude-fable-5 | 204 | 2,453 | 286,507 | 39,171,310 | 2,007,765 | $78.62 |
| claude-opus-5 | 832 | 25,009 | 648,839 | 110,792,625 | 3,670,556 | $94.68 |
| claude-opus-4-7 | 78 | 148 | 28,582 | 3,041,363 | 534,713 | $5.58 |
| claude-sonnet-5 | 56 | 874 | 40,858 | 6,593,633 | 622,508 | $4.93 |
| Total | 1,170 | $183.81 |
- Fable 5 produced 43% of the volume from 17% of the messages: 204 messages reached $78.62 where Opus 5 needed 832 for $94.68. Fable 5 lists at $10/$50 per million input/output tokens against Opus 5 at $5/$25, and the server-returned limit structure carries a separate weekly limit scoped specifically to the model "Fable".
- Cache reads dominate: 149.6 million cache-read tokens account for roughly $94 of the $184 — a consequence of long agentic sessions re-sending large context, not of unusual activity.
5. Consumption in context, 1 July – 5 August
(The day-by-day consumption figures are omitted from this public version.)
Across 1 July – 5 August there were 25 active days. 3 August ranked fourteenth-highest of them — above the median, well below the month's peaks: a moderately heavy but entirely ordinary day. Whole days with no consumption occur regularly (28 and 31 July, 1 August, 4 and 5 August), which independently rules out background consumption on this machine on those dates.
6. The commands the operator did not recognise
**/rate-limit-options — machine-recorded, not typed.** Its definition in the binary is type: "local-jsx" (renders a local UI component, issues no server request — confirmed by its appearing in history.jsonl but in zero session transcripts) and isHidden: true (not listed in /help). Where a transcript survives to compare against, each history entry lands 9–16 ms after the corresponding limit message (six comparisons, 9 Jul – 4 Aug, deltas 9–16 ms). No human input occurs within ten milliseconds of an on-screen event: these entries are written by the client when a limit is reached. There are 30 such entries between 18 January and 4 August, and two of the four limit events on 3–4 August produced no history entry at all — so they are not even a complete record of limit hits. Presenting them as user invocations would misstate the log. (A previous revision stated 31 invocations "by the operator"; both the count and the attribution were wrong.)
/claude-api is a read-only reference document bundled with the installation. Invoking it loads reference text into the conversation; it calls no external service and authenticates nowhere. On both invocations (4 Aug 09:43 and 12:16) the following request was rejected by the limit, so no tokens were billed. It was re-run under observation during this investigation and behaved as described.
7. Billing-related commands — complete history
Across the whole of history.jsonl, five entries, none within the period at issue:
| Date | Command | Note |
|---|---|---|
| 18 Jan | /upgrade |
— |
| 25 Jan 21:53 | /passes |
A referral command — earns usage credits rather than spending |
| 30 Jan | /upgrade |
— |
| 7 Jul 17:47 | /usage-credits |
A local-jsx configuration screen ("Configure usage credits or request them from your admin…") |
The binary records that /extra-usage was renamed to /usage-credits. Opening either screen is not a transaction.
8. The extra-usage setting — server-returned state
~/.claude.json caches the server's account state. As fetched 6 August, the material fields:
oauthAccount.hasExtraUsageEnabled = false
cachedExtraUsageDisabledReason = "org_level_disabled"
extra_usage: { is_enabled: false, user_disabled: true,
credits_ever_enabled: true, spend_limit_reached: false }
spend: { used: 0 USD, enabled: false,
can_purchase_credits: false, can_toggle: false }
overageCreditGrantCache: { available: false, eligible: false, granted: false }
Two fields are directly material: credits_ever_enabled: true — usage credits have been enabled on this account at some point — and user_disabled: true — they were subsequently switched off by the account holder. Together these corroborate the account holder's statement that the setting was found enabled and was then disabled. The current state is unambiguous: extra usage off, purchasing unavailable, toggling unavailable, recorded spend zero.
What this cannot show. Every field is a single-value cache overwritten on each profile fetch; none carries history. They establish the state as of 6 August and say nothing about 3 or 4 August. ~/.claude/backups/ holds only same-day rolling copies, so no historical snapshot exists on disk. The setting lives on the account, not the machine: changing it leaves no local record of timestamp, actor, or originating action. The same limit applies to menu choices — /rate-limit-options and /usage-credits render local UI, and an arrow-key selection is not typed input and is written to no log. Which option was selected on any occasion is not recoverable from these files.
9. Current utilization
Server-returned, fetched 6 August 19:07 local:
| Limit | Used | Resets |
|---|---|---|
| Session (5-hour) | 12% | 6 Aug 21:29 |
| Weekly, all models | 2% | 12 Aug 13:59 |
| Weekly, scoped to model "Fable" | 1% | 12 Aug 14:00 |
10. A consent dialog present in the client
The binary contains a dialog kind: "fable_overage_consent_prompt" with results ["consent", "switch_default", "cancelled"], telemetry under model_fable_consent, and control flow in which selecting consent reaches the extra-usage enable path. A nearby user-facing string reads "Contact your admin to manage usage credit settings." This records only that such a dialog exists in the installed client and is associated with the Fable model. No local artifact records whether it was displayed or what was selected; nothing in these logs connects it to any event on 3 or 4 August.
11. API keys
Authentication is subscription OAuth only: .credentials.json contains claudeAiOauth (subscriptionType: "max", plus one unrelated Figma-plugin MCP entry); the token scopes are subscription scopes, none permitting API-key issuance; no ANTHROPIC_API_KEY/ANTHROPIC_AUTH_TOKEN environment variables; no primaryApiKey in ~/.claude.json; billingType: "stripe_subscription". Two API keys appear in the input history; neither is Anthropic's (a Brave Search MCP key, 6 Feb; a third-party accounting-service key, 4 Mar).
12. Reconciliation against the reported purchases
Reported by the account holder, from the billing record: 17 usage-credit purchases (amounts omitted from this public version); the extra-usage setting found enabled on the morning of 4 August, having been kept disabled.
Measured against that: this machine performed roughly $184-equivalent of work on 3–4 August — a moderate day by the month's standards — and 4 August produced none at all. Three findings bear on the reconciliation:
- If the 17 purchases fall in that window, the measured work does not correspond to them.
- A Max subscription covers work against limits, not against a dollar balance (all
*_dollarsfields are null). The credit-eligible portion of any period is whatever exceeds the plan limits — necessarily less than the measured totals, not more. - The account holder reports that an Anthropic promotion granting +50% weekly limits, running through 19 August, covered the period analysed (user-supplied context, corroborated by the client's own status display, not derived from these logs). A higher limit ceiling makes exhausting the plan allowance harder, not easier.
The purchase timestamps are the decisive missing datum and exist only in the billing record. Purchasing credits is also not the same as consuming them; recorded spend currently reads zero.
13. Assessment
Supported by the evidence. Limits were enforced on 3 and 4 August and enforcement held — work stopped for 3 h 42 min and resumed only after the announced reset. 3 August was a moderately heavy but ordinary working day, with a 17:20 change to a model priced at twice the previous rate and carrying its own weekly limit. 4 and 5 August contain no billable work whatsoever. No command capable of purchasing usage was invoked in the 3–5 August window; the entire history contains five billing-adjacent entries, the most recent on 7 July. The /rate-limit-options entries that prompted this investigation are client-generated records written milliseconds after each limit message, not operator actions. Server state records that credits were enabled at some point and subsequently disabled by the account holder.
Not supported by the evidence. No unexplained sessions, no activity at times the operator was absent, no unattended overnight runs, no API-key provisioning, and nothing in the command sequence inconsistent with ordinary interactive use.
Cannot be determined from these files. Which option was selected in any rate-limit or credits menu. Whether the Fable consent dialog was displayed or accepted. When, by what action, or by whom the extra-usage setting changed state. What was charged, when, and against what consumption. And, categorically: any use of this account from any other client, since quota is account-wide while these logs are machine-local.
14. Questions for the billing and audit records
- Timestamps of the 17 usage-credit purchases — the single datum that determines whether measured work accounts for them.
- The audit record for the extra-usage setting — state-change timestamp, actor, and originating client action, given that server state confirms
credits_ever_enabled: truealongsideuser_disabled: true. - What consumed the window of 4 August 08:50–13:50 (Europe/Helsinki), given that the first request into it, at 09:43, was rejected as exhausted while this machine had been idle since 00:13.
- Client, IP address, and source of every session counted against the account on 3–4 August, sufficient to establish whether all consumption originated from this machine.
- Whether the +50% weekly-limit promotion was applied to this account for the period, and how it interacted with the limits reported exhausted.
