Developer reference
Reset Beacon API.
Read public Codex reset announcements, completion status, source evidence and history. Public reads need no account. Community responses and alert sign-up use POST requests with Cloudflare Turnstile.
Contract rules
Small, versioned by behavior.
- Base URL:
https://resetbeacon.com - JSON responses use UTF-8. Reset status and community summary reads may be held at the edge for 60 seconds. Browsers must revalidate.
- Instants are ISO 8601 strings ending in
Z. Renderanswerwords directly instead of rebuilding dates or verdicts. HEADis accepted wherever a publicGETis listed.- Six reads allow cross-origin requests from any site and answer with
Access-Control-Allow-Origin: *, so browser-side code can read them directly:/api/forecast,/api/history,/api/community/summary,/api/alerts,/api/v1/evidenceand its per-capture path, and/feed.xml. Every other route, including the health checks,/api/v1/alerts/shadow,/api/client-configand every POST, answers without that header and must be read from your own server. - An unavailable status is a valid response. Clients must check
answer.stateand must not turn missing information into a completion claim.
Reset status
GET /api/forecast
The existing URL now returns event status without numerical forecasts. Render the shared answer text and its source posts.
{
"calculatedAt": "2026-10-07T03:52:04.280Z",
"validUntil": "2026-10-07T04:52:04.280Z",
"displayMode": "events",
"publicationState": "confirmed",
"answer": {
"state": "confirmed",
"headline": "Codex reset confirmed",
"secondLine": "OpenAI confirmed the reset.",
"percent": null,
"deadline": null,
"tone": "confirmed"
},
"probabilities": null,
"accuracyGate": { "passes": false, "verdict": "base_rate" },
"factors": [],
"changes": []
}displayMode is events. Legacy numerical fields remain null or empty for compatibility: probabilities, baseRate, namedDayRecord, chanceCurve, factors and change rows do not carry live predictions. accuracyGate retains the historical model assessment; it is not a confidence score for a reset event.
answer is the canonical visitor wording. Possible, announced and confirmed events are distinct. The compatibility state forecast now means no new source-backed announcement. checking, stale and unavailable describe missing or outdated current checks. A scheduled deadline passing does not establish completion.
answer.posts contains captured primary-source text, source URLs and original posting timestamps. The posting time is not necessarily the exact time every account changed. answer.deadline is present only when the source-backed status has a time boundary. Private account observations are excluded.
calculatedAt, validUntil and staleSince preserve freshness information. Use ?live=1 for an uncached refresh. Do not reconstruct a percentage from empty legacy fields.
History
GET /api/history
Returns { "items": [...] }. Each item is one event, even when several events share a date. It includes scope, eventKind, status, summaryFull, operativeSentence, evidenceUrl, source records and visible corrections.
- eventKind
completed,scheduled,intentorpolicy_change.- status
active,completed,fulfilled,expired,missed,recordedorsuperseded. Fulfilled hints identify the reset that closed them; aged-out hints remain expired.- scope
- Only
allcompleted reset actions can enter the broad forecast history. - sources
- Each source has a canonical
url, anannouncementIdand anevidenceUrlwhen its saved copy is available.
The event evidenceUrl points to its first saved source. The date is the source-account archive date. Use the ISO 8601 instant in announcedAt for calculations; source-post displays are labelled Pacific.
Evidence archive
GET /api/v1/evidence
GET /api/v1/evidence?limit=20 lists the newest version of each captured public source. The limit is held between 1 and 100. Captures contain public source material only, never visitor data, and are kept permanently.
GET /api/v1/evidence/<capture-id>
Returns the selected capture, every retained version for the same source, and a changed flag. Text fingerprints use SHA-256. A new version is inserted when source text changes; earlier text is never overwritten.
GET /evidence/<capture-id>/
Returns the noindex HTML record with the archived text, author, source time, capture time, fingerprint, live link, Wayback link when available, and version list.
Browser setup
GET /api/client-config
Returns the public Turnstile site key plus subscriptionsEnabled and communityActionsEnabled. A client must leave the related controls unavailable when its flag is false. Secret keys never appear in this response.
Community
Daily responses
GET /api/community/summary
Returns the service date, yes and no vote counts, today's thanks count, a privacy-rounded confirmed subscriber minimum, and asOf. It returns 503 while community responses are paused.
POST /api/community/vote
{
"value": "yes",
"turnstileToken": "browser-issued token",
"website": ""
}POST /api/community/thanks
{
"turnstileToken": "browser-issued token",
"website": ""
}Both POST routes require the canonical site origin and a Turnstile token with the community action. A successful response returns recorded and the refreshed summary. A repeated daily response can return recorded: false. Community responses are informational and never change the forecast.
POST /api/alerts/subscribe
{
"email": "person@example.com",
"topics": ["likely", "schedule", "action"],
"consent": true,
"turnstileToken": "browser-issued token",
"website": ""
}Allowed topics are likely, schedule and action; correction is still accepted and ignored, because no correction email is sent. The likely topic is the advance warning: the chance for the exact stated window must be at least 80%, or at least 70% when an official post has promised the reset. The action topic covers a reset seen rolling out on the site's own account and an official confirmation. Odds alerts are capped at one per subscriber per 48 hours. At least one topic is required. The Turnstile token must use the subscribe action. A valid request returns 202 with a generic confirmation message. Confirmation still requires the explicit action in the email.
Expected errors are 400 for an invalid request or anti-abuse check, 405 for a non-POST request, and 503 while subscriptions are closed.
State vocabularies
Retrieval and delivery
retrieval_state
Source post records use new_post_found, context_loading, ready_to_classify, retrieval_failed_retrying or retrieval_exhausted_needs_review. retrieval_reason carries the failure or review reason when one exists.
Alert outbox status
Delivery rows use queued, sent, practice_only, retry_scheduled, duplicate_not_sent, expired_not_sent, subscriber_cap_not_sent, provider_cap_deferred, failed, outcome_unknown or suppressed_policy. Only sent counts as a successful subscriber delivery.
Health
GET /api/v1/health
Returns service status, checkedAt, generic reasons and warnings. This reports service health, not evidence that a reset occurred. A healthy response has status: "ok"; operational faults may report degraded.
Detailed diagnostics require an administrator bearer token and are never stored in the public edge cache. GET /api/v1/crosscheck and GET /api/v1/alerts/shadow also require administrator authentication. These are private operations routes, outside the public event contract. GET /api/health remains the earlier storage check.
Alert feeds
Alerts in JSON. History in RSS.
GET /api/alerts
Returns the newest durable published alerts in JSON. Each item includes its topic, state, source, evidence capture ID, model version and the time it was published. The withdrawn field is true when the site withdrew an alert, and withdrawnReason gives the reason or is null. Withdrawn alerts remain in the feed. The evidenceId is always an evidence_captures.id value, never an event ID. Email links use that capture ID in /evidence/<capture-id>/. An empty items array means no alert has been published; it is never filled with sample data.
GET /api/v1/alerts/shadow
Requires administrator authentication. Returns alert shadow events. Each item shows the topic, alert ID, recipient count, subject, and whether the alert was stale. It never includes email addresses.
GET /feed.xml
Returns history events and corrections as RSS 2.0, newest first. Stable event and correction IDs prevent duplicate reader entries. Source text is XML-escaped and the feed sends no cookies.
Telegram
Telegram is not an API. The public channel is linked from the home page, and a post there carries the same two answer lines and the same source link this API returns in answer. There is nothing to request and no endpoint to read it from.