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
codex-reset --license

The one condition: credit

  1. 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.
  2. 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.
  3. 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/".
  4. 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.

codex-reset --mcp

MCP server

Streamable HTTP
https://codex-reset.com/mcp
ToolWhat it returnsArguments (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.

CLI
claude mcp add --transport http codex-reset https://codex-reset.com/mcp
.mcp.json
{
  "mcpServers": {
    "codex-reset": { "type": "http", "url": "https://codex-reset.com/mcp" }
  }
}

Codex

Codex CLI and the IDE extension read ~/.codex/config.toml.

~/.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.

.cursor/mcp.json
{
  "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
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"}'
codex-reset --json

JSON API

EndpointWhat it returnsFields to build onQuery
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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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

Latest odds
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}'
Did Codex reset since I last looked?
curl -sS https://codex-reset.com/api/timeline \
  | jq -r '[.events[] | select(.group == "reset" and .announcement_state == "announced")][0]
           | "\(.announced_at)  \(.url)"'
Browser, with the credit in place
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>
codex-reset --discover

Machine-readable discovery

FileWhat 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.