Reset tracker JSON API
Free, no key, CORS enabled, cached 5 minutes. Use it in a bot, a menu-bar app, a userscript, or a status page.
Endpoints
https://whenreset.app/api/resets.json— this site's copy, rebuilt whenever a new reset is detected.https://howtok.net/api/resets— the upstream endpoint (same data, updated first).
Shape
{
"schema": 1,
"updated_at": "2026-09-10T06:36:13Z",
"products": {
"codex": {
"name": "Codex",
"vendor": "OpenAI",
"sources": [
"thsottiaux"
],
"events": [
{
"id": "2097752790177370535",
"date": "2026-09-09",
"ts": null,
"type": "reset",
"scope": "all",
"source": "thsottiaux",
"url": "https://x.com/thsottiaux/status/2097752790177370535",
"summary": "Banked reset compensation for users affected by incomplete reset application in ChatGPT Work and Codex"
}
]
},
"claude": {
"...": "..."
}
}
}
products.codex.events/products.claude.events— newest first.dateis the announcement date (UTC).tsis the exact post time when known,nullfor rows imported from public archives.scope:all,paid,Max,Pro+Max,Plus+Pro+Business,affected— parsed from the post text.urllinks to the original post. Rows without a URL come from archives and carry the announcing handle insource.
Example
const r = await fetch("https://whenreset.app/api/resets.json").then(r => r.json());
const last = r.products.codex.events[0];
console.log(`Last Codex reset: ${last.date} (${last.scope})`);
Attribution appreciated: a link back to whenreset.app. Fair use only — please cache, don't hammer.