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
GET https://claudereset.org/api/v1/forecast.json— current p24/p48, confidence, and every input.GET https://claudereset.org/api/v1/timeline.json— every recorded event.GET https://claudereset.org/api/v1/signals.json— the latest status + issues snapshot.GET https://claudereset.org/api/v1/banked.json— currently-active banked resets.POST https://claudereset.org/mcp— MCP server (JSON-RPC 2.0, Streamable HTTP).https://claudereset.org/feed.xml— Atom feed.https://claudereset.org/calendar.ics— iCalendar feed (past resets + banked-expiry reminders).
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
| Tool | Arguments | Returns |
|---|---|---|
get_reset_forecast | none | The current /api/v1/forecast.json payload. |
list_claude_resets | limit (optional, default 20), since (optional, ISO date) | Recorded events, newest first. |
get_status_signals | none | The 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"