Public APIs, Atom feed and MCP servers
tokenusage.dev publishes Codex reset announcements and Nerf Watch scores as read-only JSON and through separate MCP servers, with an Atom feed for resets. There is no key and no sign-up.
Reset announcements
GET https://tokenusage.dev/api/resetsPosts by @thsottiaux on X that the monitor classified as announcing a Codex usage-limit reset, newest first, at most 50. An announcement can describe an automatic reset, a banked reset grant or both, forthcoming or completed. A post is not proof that any account's limit was reset: open its link for the exact wording and eligibility.
resets[].postId, resets[].url
The X post's id, as a string, and its address on X.
resets[].postedAt
When the post was published, ISO 8601 in UTC.
resets[].detectedAt
When this site recorded it. Posts recorded when the monitor started share one time.
resets[].resetType
automatic means a direct usage-limit reset with no saved reset. banked means a reset grant saved for eligible users to apply later; granting it does not itself refill limits. both means the announcement includes both types. null means recorded before Reset Alerts recorded reset types. This field is the monitor's classification of the post; both classifier calls must give the same type. It is not proof that any account's limit was reset. See Banked vs automatic Codex resets for what each type means.
lastPolledAt
The monitor's latest successful fetch of @thsottiaux's X timeline, checks that found no new posts included, ISO 8601 in UTC; null before the first, or when an older record lacks it. It is not a sign that classification or alert delivery is working.
generatedAt
When the response was made.
source
The fixed credit URL, https://tokenusage.dev/resets. It is returned by the JSON endpoint and both reset MCP tools.
Reset announcement feed
GET https://tokenusage.dev/api/resets.atomThe Atom feed (English) contains the same recorded announcements as the reset JSON endpoint, in the same order, with no post text. Entry links open the source posts.
Each entry has a stable source-post URL as its id, its post time as published, and its detection time as updated. The feed uses the latest detection time, or response generation time when empty. It is a current window, not a complete history or a deletion log. Each summary ends with linked credit; the feed also carries the reuse condition.
Codex reset widget
The widget shows up to five recorded Codex reset announcements from @thsottiaux on X, newest first, in English, with times in your time zone. It refreshes every five minutes while visible.
<iframe src="https://tokenusage.dev/embed/resets" title="Codex reset announcements from tokenusage.dev" width="360" height="420" style="border:0;max-width:100%" loading="lazy"></iframe>
<p><a href="https://tokenusage.dev/resets">Data: tokenusage.dev</a></p>The widget shows its own credit link. Please keep the paragraph visible below it to put the same credit in your page.
The theme follows the reader's color preference. Append #theme=light or #theme=dark to the iframe URL to choose a theme. There are no other widget options.
The widget loads no analytics and does not read or write cookies or browser storage. Your site's Content Security Policy must allow frames from https://tokenusage.dev.
Nerf Watch JSON
GET https://tokenusage.dev/api/nerfwatchEach model's latest score, previous run, changes, baseline and history. Models are ordered by provider, name and model id. History runs oldest first; a missing day is missing, not zero. Scores and changes are rounded to two decimals.
generatedAt is response generation time. dataUpdatedAt is when the newest retained run was stored, or null. historyDays is the history retained per model. baselineDays is the UTC-day window before the latest run; minBaselineRuns is the number of same-suite runs it needs. flatPoints is the largest absolute move against the baseline treated as flat.
Each model has model, name, provider, latest, previous, change, baseline, baselineRuns, changeVsBaseline, trend and history. Each run has day, score and suiteVersion. Latest and previous can be null. Comparisons are only within one suite version. A change or baseline without enough comparable runs is null; baselineRuns still reports the count. trend is down, flat, up or null.
A lower score is a lower score on this suite, not proof that a provider changed a model: runs are noisy, and a provider's defaults, the endpoint or the runner itself can change. Please retain that qualification when displaying scores or changes.
evidenceAvailable is this site's own interface, outside the stable reuse contract. Evidence answers and test questions are not included.
OpenAPI
OpenAPI document: an OpenAPI 3.1 description of the three public data paths, including GET and HEAD, stable JSON fields, caching and errors. It is a static, CORS-readable JSON file.
Codex reset MCP server
https://tokenusage.dev/mcpStreamable HTTP, read-only, with no sign-in and no session. It speaks MCP 2026-07-28, and 2025-11-25, 2025-06-18 and 2025-03-26 through initialize.
get_codex_reset_announcements
The announcements /api/resets returns, newest first, up to its limit (1 to 50, default 10), with lastPolledAt and each item's resetType. No other argument is accepted.
get_codex_reset_calendar
The announcements /api/resets returns grouped by UTC calendar date, newest dates first, with posts within each date newest first. Optional month selects a UTC month written YYYY-MM; no other argument is accepted. Filtering does not fetch older announcements.
The result carries source, generatedAt, lastPolledAt, timeZone: "UTC", coverage, month (the filter or null), and days. Each day has date and resets; each item has postId, url, postedAt and resetType.
Only announcements this monitor recorded from @thsottiaux are shown, at most the 50 newest; this is not a complete history. A date without an entry does not mean no reset was announced.
Claude Code
claude mcp add --transport http tokenusage https://tokenusage.dev/mcpCodex
codex mcp add tokenusage --url https://tokenusage.dev/mcpCursor
{ "mcpServers": { "tokenusage": { "url": "https://tokenusage.dev/mcp" } } }In .cursor/mcp.json. Identity and connection metadata are in the server card, advertised by the AI catalog. The tool list is available through tools/list.
Nerf Watch MCP server
https://tokenusage.dev/mcp/nerfwatchStreamable HTTP, read-only, with no sign-in and no session. It speaks MCP 2026-07-28, and 2025-11-25, 2025-06-18 and 2025-03-26 through initialize.
get_nerfwatch_scores
No arguments. Returns source, generatedAt, dataUpdatedAt, baselineDays, minBaselineRuns, flatPoints and models. Each model has model, name, provider, latest, previous, change, baseline, baselineRuns, changeVsBaseline and trend.
get_nerfwatch_history
Required model is an id from get_nerfwatch_scores: 1 to 64 lowercase letters, digits, dots, underscores or hyphens, starting with a letter or digit. No other argument is accepted.
Returns source, generatedAt, dataUpdatedAt, historyDays, model, name, provider and history. Points have day, score and suiteVersion, oldest first. Missing days are missing, not zero. Both tools use one 300-second read cache.
A lower score is a lower score on this suite, not proof that a provider changed a model. Runs are noisy, and a provider's defaults, the endpoint or the runner itself can change. Data: tokenusage.dev linked to https://tokenusage.dev/nerfwatch.
The fixed source is https://tokenusage.dev/nerfwatch. Only stable public fields are returned. Evidence answers, grader check lines and test questions are not included.
Claude Code
claude mcp add --transport http nerfwatch https://tokenusage.dev/mcp/nerfwatchCodex
codex mcp add nerfwatch --url https://tokenusage.dev/mcp/nerfwatchmcpServers file
{ "mcpServers": { "nerfwatch": { "type": "http", "url": "https://tokenusage.dev/mcp/nerfwatch" } } }For Claude Code project scope, use .mcp.json. Other clients that accept this HTTP format can use the same entry. Identity and connection metadata are in the Nerf Watch server card, advertised by the AI catalog. The tool list is available through tools/list.
Using it
- Please poll reset JSON, the Atom feed and reset MCP tools no faster than every 15 seconds, and Nerf Watch JSON and MCP tools no faster than every 5 minutes. The reset tools share one 15-second read cache; the Nerf Watch tools share one 300-second read cache.
- Depend only on the fields named on this page and in the OpenAPI document. Fields may be added. A field is never removed or given a new meaning without a new name.
- Please use the canonical URLs without cache-busting query strings. Please send a User-Agent that names your project and a way to reach you when your client supports it.
- Successful GET and HEAD reads of /api/resets, /api/resets.atom and /api/nerfwatch allow browser access without credentials or custom request headers. /openapi.json is CORS-readable too. API errors, OPTIONS and other API paths do not gain CORS access. Make MCP connections from a server: both MCP endpoints accept no foreign Origin.
- Credit is the condition of reuse: when you show reset data to other people, show
Data: tokenusage.devlinked to https://tokenusage.dev/resets on the same screen or in the same message. Personal use needs no visible credit. - When you show Nerf Watch data to other people, show
Data: tokenusage.devlinked to https://tokenusage.dev/nerfwatch on the same screen or in the same message. Personal use needs no visible credit. - A reset JSON or MCP relay must retain
source: "https://tokenusage.dev/resets"and pass on the credit condition. An Atom relay must retain the feed's rights statement and each entry's credit link, and pass on the credit condition. - A Nerf Watch API or MCP relay must retain https://tokenusage.dev/nerfwatch and its credit condition. MCP results carry that URL in
source. Anyone displaying either dataset must show its credit. See Terms. - tokenusage.dev is unofficial and not affiliated with OpenAI or Anthropic. Only @thsottiaux is watched for reset announcements, so an announcement made elsewhere is missing.
Credit to copy
For reset data:
<a href="https://tokenusage.dev/resets">Data: tokenusage.dev</a>For Nerf Watch data:
<a href="https://tokenusage.dev/nerfwatch">Data: tokenusage.dev</a>Example
curl -sS https://tokenusage.dev/api/resets \
-A 'myproject/1.0 (+https://example.com)'A summary of the site for language models is at /llms.txt. Questions and corrections: Contact.