Skip to main content

Claude Code usage monitor — fetches rate limits from Anthropic's API

Project description

ccusage

Claude Code usage monitor. Fetches your real rate limit data from Anthropic's API and displays it in the Claude Code statusline.

Example output

ccusage command:

Plan: max_5x
  Session (5h)         39%  resets 1h26m
  Week (all)           15%  resets 143h26m
  Week (Sonnet)        39%  resets 65h26m
  Extra usage          $0.00 / $1000.00

Claude Code statusline (self-caching — refreshes from API when stale, no daemon needed):

~/projects/myapp [Opus 4.6] 5h:39% 7d:15% son:39% | $1.37 | max_5x | reset:1h26m

Install

uv tool install ccusage

Then run:

# Check usage once
ccusage

# Run the daemon (keeps usage-limits.json updated)
ccusage daemon

Configure the statusline in ~/.claude/settings.json:

{
  "statusLine": {
    "type": "command",
    "command": "ccusage statusline"
  }
}

Commands

Command Description
ccusage Show current usage (colored terminal output)
ccusage json Print raw JSON
ccusage daemon [-i SECS] Run in foreground, refresh every 5 min (customizable)
ccusage statusline Claude Code statusline (self-caching, no daemon needed)
ccusage install Print setup instructions

How Claude Code rate limiting works

Discovered by inspecting Claude Code's bundled cli.js (v2.1.32).

Data sources

Claude Code gets rate limit data from two places:

  1. /api/oauth/usage endpoint — Called by the /status slash command. Returns utilization percentages and reset times for each rate limit bucket. Requires the anthropic-beta: oauth-2025-04-20 header.

  2. Response headers on every API call — Every message response includes headers like:

    • anthropic-ratelimit-unified-{claim}-utilization (0-100 float)
    • anthropic-ratelimit-unified-{claim}-reset (unix timestamp)
    • anthropic-ratelimit-unified-status (allowed / allowed_warning / rejected)
    • anthropic-ratelimit-unified-fallback (available when fallback models are available)
    • anthropic-ratelimit-unified-overage-status / overage-reset
    • anthropic-ratelimit-unified-representative-claim

Rate limit types

Type Key in API response Description
five_hour five_hour Rolling 5-hour session window
seven_day seven_day Rolling 7-day all-models window
seven_day_sonnet seven_day_sonnet Rolling 7-day Sonnet-specific window
seven_day_opus seven_day_opus Rolling 7-day Opus-specific window
overage extra_usage Extra/overage usage (if enabled)

API response format

GET https://api.anthropic.com/api/oauth/usage
Authorization: Bearer <oauth_access_token>
anthropic-beta: oauth-2025-04-20
{
    "five_hour": {
        "utilization": 35.0,
        "resets_at": "2026-02-06T22:00:00+00:00"
    },
    "seven_day": {
        "utilization": 14.0,
        "resets_at": "2026-02-12T20:00:00+00:00"
    },
    "seven_day_sonnet": {
        "utilization": 39.0,
        "resets_at": "2026-02-09T14:00:00+00:00"
    },
    "seven_day_opus": null,
    "seven_day_oauth_apps": null,
    "seven_day_cowork": null,
    "iguana_necktie": null,
    "extra_usage": {
        "is_enabled": true,
        "monthly_limit": 100000,
        "used_credits": 0.0,
        "utilization": null
    }
}

Authentication

The OAuth token lives at ~/.claude/.credentials.json:

{
    "claudeAiOauth": {
        "accessToken": "sk-ant-oat01-...",
        "refreshToken": "sk-ant-ort01-...",
        "expiresAt": 1770412938485,
        "subscriptionType": "team",
        "rateLimitTier": "default_claude_max_5x"
    }
}

The access token expires roughly hourly. When it's expired (or rejected with a 401/403), ccusage refreshes it itself using the refreshToken and writes the rotated credentials back to .credentials.json — the same flow Claude Code uses, so the two stay in sync and no active Claude Code session is needed.

Warning thresholds (from cli.js)

Claude Code shows inline warnings based on these thresholds:

five_hour:  90% utilization when 72% of window has passed
seven_day:  75% at 60%, 50% at 35%, 25% at 15%

Other endpoints found in cli.js

  • /api/oauth/profile — User profile
  • /api/oauth/account/settings — Account settings
  • /api/claude_code/policy_limits — Org policy limits (needs organizationUuid)
  • /api/organization/claude_code_first_token_date — Org onboarding date

Local files Claude Code uses

File Written by Contains
~/.claude/.credentials.json Claude Code OAuth tokens, plan tier
~/.claude/stats-cache.json Claude Code Local usage stats (message counts, token counts per model)
~/.claude/usage-limits.json ccusage daemon Cached API usage data (this tool)
~/.claude/statsig/ Claude Code Feature flags, experiment assignments

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ccusage-0.1.7.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ccusage-0.1.7-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file ccusage-0.1.7.tar.gz.

File metadata

  • Download URL: ccusage-0.1.7.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ccusage-0.1.7.tar.gz
Algorithm Hash digest
SHA256 10eb556d5aff1d01b85d8055af6ba353b762989a2e07f88cdfcc84ede26a2d4c
MD5 33502841eab7a23fdacc3782235d3490
BLAKE2b-256 29148202effa0f3d0c4c9408d57bc7b7e5d01f90b363dec5fc8bb5387ec3ac19

See more details on using hashes here.

Provenance

The following attestation bundles were made for ccusage-0.1.7.tar.gz:

Publisher: publish.yml on wakamex/ccusage

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ccusage-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: ccusage-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ccusage-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 0af7986b0c5f2d064afb02e88b084b945eac4c560255b20d64fce4b8fba9d548
MD5 18900be80e8b8a9289bbc32846f0ca15
BLAKE2b-256 1d9b46290e7a9aa9225bf6750936f024d6109755da9dde797c84adc00d798bd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ccusage-0.1.7-py3-none-any.whl:

Publisher: publish.yml on wakamex/ccusage

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page