DEVELOPERS
API & MCP server
Everything this site knows about Codex usage-limit resets is public: the 24–48h forecast, the dated reset record, Tibo's announcement feed and Codex service status. Read it as JSON, or point an agent at the MCP server. No key, no sign-up, no rate plan — the one condition is credit.
- MCP
- /mcp
- REST
- /api/*
- Auth
- none
- CORS
- *
- Cost
- free, with credit
The one condition: credit
- Show the source where the data appears. A site, app, bot message, dashboard, MCP tool or API that passes this data on names the source and links to it on the same surface: “Data: codex-reset.com”, linked to https://codex-reset.com/. A credit on a separate page does not count, and neither does “computed here” over numbers read from /api/forecast.
- Identify server-side readers. Send a User-Agent that names the project and a way to reach it, for example myproject/1.0 (+https://myproject.example). When traffic has to be cut, anonymous readers go first.
- Relays carry the credit with them. An API or MCP server that wraps these endpoints credits the source in its own documentation and, where the format allows, in the payload: "source": "https://codex-reset.com/".
- Personal use needs no visible credit. A private script, a cron job that pings your own phone, a team chat alert: the identifying User-Agent is enough.
Copy this: Data: codex-reset.com
Readers that republish the data without credit, or hide who they are, are blocked at the firewall without notice. Credit restores access — write to the contact address in the footer.
MCP server
https://codex-reset.com/mcp| Tool | What it returns | Arguments (all optional) |
|---|---|---|
get_reset_forecast |
Probability of a reset in the next 24 and 48 hours, confidence, the last confirmed reset and any active official signal. A forecast, not a promise. | locale |
get_reset_timeline |
Dated record of verified resets and related announcements, newest first, each with its source URL. | group (reset | boost | unlock | credits), from, to (YYYY-MM-DD), limit (1–50, default 10), locale |
get_codex_status |
Current Codex service state, to tell an outage apart from a usage limit. | locale |
- Streamable HTTP, JSON-RPC 2.0, protocol 2025-06-18. POST only; a GET answers 405.
- Read-only and stateless: no session, no auth, no write tools. locale is en, zh, ja or es and changes only the human-readable copy.
- Tools read the same data as the JSON endpoints, so an agent and a browser never disagree.
Connect an agent
One line, then ask “did Codex reset today?”
Claude Code
HTTP transport, user or project scope.
claude mcp add --transport http codex-reset https://codex-reset.com/mcp{
"mcpServers": {
"codex-reset": { "type": "http", "url": "https://codex-reset.com/mcp" }
}
}Codex
Codex CLI and the IDE extension read ~/.codex/config.toml.
[mcp_servers.codex-reset]
url = "https://codex-reset.com/mcp"Cursor
Project file .cursor/mcp.json, or the global one under ~/.cursor.
{
"mcpServers": {
"codex-reset": { "url": "https://codex-reset.com/mcp" }
}
}Anything else
Any client that speaks streamable HTTP takes the bare URL. To check the server by hand:
curl -sS https://codex-reset.com/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'JSON API
| Endpoint | What it returns | Fields to build on | Query |
|---|---|---|---|
GET /api/forecast |
Reset probability for the next 24h and 48h, confidence, last confirmed reset, days since, and the active official signal if there is one. | probabilities.rounded_24h, probabilities.rounded_48h, confidence, last_reset_at, age_days, official_signal, updated_at |
tz=<IANA zone> localises the likely-hours window |
GET /api/timeline |
Every verified reset, boost, unlock and credit announcement with its date, type, summary and source URL. | events[].id, announced_at, announcement_state, group, type, summary, url |
locale=zh|ja|es adds translated summaries |
GET /api/feed |
Tibo's announcement feed as ingested, with fetch time, content age, a staleness flag and the current headline signal. | tweets[], events[], signal, newest_post_at, fetched_at, stale |
locale=zh|ja|es |
GET /api/status-history |
Current Codex service state per surface, the 90-day incident record, and any reset explicitly linked to an outage. | current, surfaces, incidents[], compensation_links, stats, checked_at, stale |
— |
Rules of the road
- A reset is real when the timeline says so. The signal is an /api/timeline event with group "reset" and announcement_state "announced"; equivalently, /api/forecast last_reset_at moves forward. That is the same condition the ✅ Telegram alert fires on. A rising probability is not a reset.
- Banked resets are a separate fact. banked_state (announced, arriving, available, unknown) never updates a reset timestamp, a count or a cadence. Treat it as supplemental.
- Poll once a minute at most. Responses are published copies refreshed about once a minute and served with Cache-Control: max-age=60; polling faster returns the same bytes. x-published-checked-at and x-published-expires-at say how fresh a copy is. Honour Retry-After on a 429.
- Depend only on documented fields. Paths and the fields named on this page are stable. Anything else in a payload may move or disappear without notice. Classifier internals and alert decisions are never exposed.
- GET only. Everything documented here is a GET. The POST routes under /api/ are this site's own interface — prayers, push subscriptions, ingest — and are not part of the contract; do not build on them.
Examples
curl -sS https://codex-reset.com/api/forecast \
-A 'myproject/1.0 (+https://myproject.example)' \
| jq '{p24: .probabilities.rounded_24h, p48: .probabilities.rounded_48h, last: .last_reset_at}'curl -sS https://codex-reset.com/api/timeline \
| jq -r '[.events[] | select(.group == "reset" and .announcement_state == "announced")][0]
| "\(.announced_at) \(.url)"'const res = await fetch("https://codex-reset.com/api/forecast");
const { probabilities } = await res.json();
odds.textContent = `${probabilities.rounded_24h}% in 24h`;
// next to it, in the markup:
// <small>Data: <a href="https://codex-reset.com/">codex-reset.com</a></small>Machine-readable discovery
| File | What it is |
|---|---|
/llms.txt |
Route map for language models: every page and public endpoint in one file. |
/llms-full.txt |
The same map plus source priority, provenance and the usage-limit reference. |
/.well-known/api-catalog |
RFC 9727 linkset of the public JSON routes. |
/.well-known/mcp/server-card.json |
MCP server card: endpoint, protocol version and the tool list. |
/.well-known/ai-catalog.json |
Capability manifest pointing at the API catalog, the MCP server and the agent skill. |
If all you want is to be told when a reset lands, you do not need to build anything: the Telegram and Discord channels, browser push and email alerts in the footer fire on the same signal.