Data for developers

A free, no-key JSON API, an MCP server, an Atom feed, and an iCalendar feed — built for agents and bots, not just the web pages.

Endpoints

Attribution appreciated: "Data: claudereset.org". Free to use, cached 5 minutes at the edge, CORS enabled.

/api/v1/forecast.json — sample

{
  "schema_version": 1,
  "generated_at": "2026-09-23T09:09:19Z",
  "source": "https://claudereset.org",
  "available": true,
  "reset_today": false,
  "p24": 13,
  "p48": 22,
  "confidence": "low",
  "confidence_reasons": [
    "the selected rhythm model (memoryless) doesn't yet beat the climatology baseline in backtesting"
  ],
  "inputs": {
    "avg_gap_hours": 337.0,
    "hours_since_last": 445.0,
    "B": 0.0712,
    "C": null,
    "cad24": 0.0687,
    "official_signal": 0.0,
    "status_signal": 0.2762,
    "issues_signal": 0.0878,
    "S": 0.0691,
    "global": true,
    "rhythm_model": "memoryless"
  },
  "formula_version": "1",
  "disclaimer": "Independent project, not affiliated with Anthropic. Anthropic has never published or promised a reset schedule \u2014 every reset recorded here was announced ad hoc. Percentages are estimates from past announcements, not a schedule.",
  "freshness": {
    "events_checked_at": "2026-09-23T08:53:08Z",
    "signals_fetched_at": "2026-09-23T08:00:29Z",
    "built_at": "2026-09-23T09:09:19Z"
  }
}

/api/v1/timeline.json — sample (1 event)

{
  "schema_version": 1,
  "source": "https://claudereset.org",
  "events": [
    {
      "id": "2102438800836489554",
      "date": "2026-09-22",
      "ts": "2026-09-22T16:44:06Z",
      "scope": "Pro+Max+Team",
      "kind": "banked",
      "source": "ClaudeDevs",
      "url": "https://x.com/ClaudeDevs/status/2102438800836489554",
      "summary": "Opus 5.5 performs at the level of Fable 5.1, ~30% faster and ~40% cheaper than Opus 5 per task. In Claude Code: 5-hour session limits increase 20% today; Pro, Max, and Team users get a reset to use anytime (available in Settings \u2192 Usage, apply any time until Oct 22).",
      "partial": false,
      "global": false,
      "origin": "official_post"
    }
  ]
}

Example: curl

curl -s https://claudereset.org/api/v1/forecast.json | jq .p24

Example: JavaScript fetch

const r = await fetch("https://claudereset.org/api/v1/forecast.json").then(r => r.json());
console.log(`Next 24h: ${r.p24}% (confidence: ${r.confidence})`);

MCP server

A read-only Model Context Protocol server at https://claudereset.org/mcp: stateless JSON-RPC 2.0 over HTTP POST, no API key, no write operations.

claude mcp add --transport http claudereset https://claudereset.org/mcp

Tools

ToolArgumentsReturns
get_reset_forecastnoneThe current /api/v1/forecast.json payload.
list_claude_resetslimit (optional, default 20), since (optional, ISO date)Recorded events, newest first.
get_status_signalsnoneThe current /api/v1/signals.json payload.

Update frequency & versioning

The site checks its status and issue signals on a schedule (not continuously) — fetched_at in /api/v1/signals.json tells you exactly when. A breaking schema change ships as a new /api/v2/ path; /api/v1/ is never changed in place.

Claude Code status line script

Shows 5h: X% · 7d: Y% · reset odds 24h: Z% in your Claude Code status line — reads Claude Code's own rate_limits.five_hour.used_percentage/rate_limits.seven_day.used_percentage, plus this site's forecast API for the third figure (cached locally 10 minutes at ~/.cache/claudereset-forecast.json, 2s timeout). Also on /usage-check/, with a parser for your own pasted usage JSON.

#!/bin/bash
# claudereset.org example Claude Code status line script.
# Install: save this as ~/.claude/statusline.sh (chmod +x), then set it as your status line
# command per https://code.claude.com/docs/en/statusline — Claude Code pipes the status line's
# JSON into this script's stdin on every prompt render.
#
# Shows your own Claude Code usage (5-hour and 7-day windows, straight from the status line's own
# `rate_limits` object) plus this site's live 24h global-reset-odds forecast. The forecast fetch
# is cached locally for 10 minutes (by file mtime) and capped at a 2-second timeout, so a slow or
# unreachable network never blocks your prompt — it just falls back to showing only the usage
# figures.
set -u
input=$(cat)

# rate_limits is only present for Pro/Max subscribers (or a spend-limited gateway), and only
# after the session's first API response — `// empty` makes jq print nothing rather than "null"
# when it's absent, per code.claude.com/docs/en/statusline's own example.
FIVE_H=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')

LINE=""
[ -n "$FIVE_H" ] && LINE="5h: $(printf '%.0f' "$FIVE_H")%"
[ -n "$WEEK" ] && LINE="${LINE}${LINE:+ · }7d: $(printf '%.0f' "$WEEK")%"

CACHE="$HOME/.cache/claudereset-forecast.json"
mkdir -p "$(dirname "$CACHE")" 2>/dev/null

# 10-minute local cache, judged by the cache file's own mtime (works with either BSD or GNU stat).
CACHE_AGE=999999
if [ -f "$CACHE" ]; then
  MTIME=$(stat -f %m "$CACHE" 2>/dev/null || stat -c %Y "$CACHE" 2>/dev/null || echo "")
  if [ -n "$MTIME" ]; then
    CACHE_AGE=$(( $(date +%s) - MTIME ))
  fi
fi

if [ "$CACHE_AGE" -ge 600 ]; then
  if curl -s -m 2 https://claudereset.org/api/v1/forecast.json -o "$CACHE.tmp" 2>/dev/null; then
    mv "$CACHE.tmp" "$CACHE" 2>/dev/null
  else
    rm -f "$CACHE.tmp" 2>/dev/null
  fi
fi

P24=$(jq -r '.p24 // empty' "$CACHE" 2>/dev/null)
if [ -n "$P24" ]; then
  LINE="${LINE}${LINE:+ · }reset odds 24h: ${P24}%"
fi

echo "$LINE"