Did Codex Reset
AI News
GitHub

Open API

OpenAPI JSON

Bring reset signals into your own tools over HTTP, MCP, or an installable agent skill.

No API key20 requests / hourUTC · milliseconds

Quick start

GET /records/latest
Base URLhttps://did-codex-reset.com/openapi/v1

Make a GET request and read the JSON response. No registration or authentication headers are needed.

cURL
curl 'https://did-codex-reset.com/openapi/v1/records/latest'
JavaScript
const res = await fetch('https://did-codex-reset.com/openapi/v1/records/latest?kind=reset_completed');
const body = await res.json();
if (res.status === 429) {
  const retry = Number(res.headers.get('Retry-After') || body.retryAfter);
  console.log('retry after', retry);
}
if (!res.ok) throw new Error(body.error);
console.log(body.data);
Python
from urllib.request import urlopen, Request
req = Request('https://did-codex-reset.com/openapi/v1/records?page=1&pageSize=10')
with urlopen(req) as response:
    print(response.read().decode())

Endpoints

Read only · no credentials

GET/records/latest

Newest matching record, or null.

curl 'https://did-codex-reset.com/openapi/v1/records/latest?kind=reset_completed'

GET/records

Paged list, max 10 items per page.

curl 'https://did-codex-reset.com/openapi/v1/records?kind=reset_scheduled&page=2&pageSize=10'

Query parameters

kind applies to both data endpoints (all, reset_scheduled, reset_completed). page and pageSize apply to the list. Unknown, duplicate, or out-of-range parameters return 422 and are not corrected.

ParameterDefaultMeaning
kindallall (default), reset_scheduled, or reset_completed. all is the live public signal list and omits fulfilled schedules. Scheduled filter includes fulfilled and elapsed history; undone or dismissed records are omitted.
page11-based page index. Pages past the end return an empty items array and keep the requested page.
pageSize101–10, default 10.

kind=all and reset_completed pin still-open pending schedules (soonest window first), then announcedAt, completedAt, effectiveAt, and id descending. Fulfilled schedules are omitted from all and listed on reset_scheduled, which still sorts by effectiveAt descending. latest is the first row of the same filter. total counts records, not distinct reset days.

The API includes all currently saved public records, including fulfilled and elapsed schedules. It does not promise a permanent archive. Use kind=reset_completed to exclude future schedules.

Record fields

JSON / camelCase

Every field is included. A null value means the value is unknown or not applicable; it never means zero.

FieldTypeMeaning
idstringRecord id. X posts are numeric strings; operator notes use op_…; manual completions use manual:…
kindstringreset_scheduled or reset_completed. Separate from resetType.
resetTypestringglobal, banked, or global_and_banked.
announcedAtstring | nullWhen the source was announced. null for manual completions with no announcement.
effectiveAtstring | nullPlanned or actual reset time. null if unknown; missing values are not filled from announcedAt.
textstring | nullPublic post text or operator copy. null when unknown.
confidencenumber | null0–1 when known. null for heatmap-only history and aggregated manual completions.
scopeobject | nullplans and windows when known; otherwise null.
sourceobjectorigin, postId, handle, url. Manual completions set origin=operator and the rest null.
schedulePrecisionstring | nulldate or datetime on schedules; null on completions.
scheduleBasisstring | nullexplicit or contextual_inference on schedules; null on completions.
scheduleWindowobject | nullUTC startAt/endAt for the known schedule window.
scheduleStatestring | nullpending, elapsed, fulfilled, or unknown on schedules. elapsed means the window passed without a confirmed completion.
completedAtstring | nullWhen a schedule was confirmed fulfilled; null if not confirmed.
completionRecordIdstring | nullLinked completion id on a schedule.
fulfillmentOriginstring | nullauto, link, or manual.
relatedRecordIdsstring[]On completions, related schedule ids. Empty array when none.
sourceObject fields
FieldTypeMeaning
originstringx for source posts; operator for operator notes and manual completions.
postIdstring | nullOriginal string ID; null for an independent manual completion.
handlestring | nullthsottiaux for X sources; otherwise null.
urlstring | nullCanonical X post URL; null when no source post exists.
scopeObject fields
FieldTypeMeaning
plansstring[]Affected plan IDs; all means all plans, unknown means unspecified.
windowsstring[]Affected quota-window IDs, such as five_hour or weekly; unknown means unspecified.
scheduleWindowObject fields
FieldTypeMeaning
startAtstringUTC start of the schedule window.
endAtstringUTC end of the schedule window; equal to startAt for an exact time.

UTC, millisecond precision, suffix Z. Date-level schedules keep date precision; their window is the civil day converted to UTC.

Responses

application/json

Success returns ok: true, data and meta. The latest endpoint returns one record or null; the list returns items and pagination. Errors return ok: false, error and detail.

Latest response
JSON
{
  "ok": true,
  "data": {
    "id": "1960000000000000001",
    "kind": "reset_scheduled",
    "resetType": "global",
    "announcedAt": "2026-09-08T08:00:00.000Z",
    "effectiveAt": "2026-09-09T07:00:00.000Z",
    "text": "Usage limits will be reset tomorrow.",
    "confidence": 0.97,
    "scope": {
      "plans": [
        "all"
      ],
      "windows": [
        "unknown"
      ]
    },
    "source": {
      "origin": "x",
      "postId": "1960000000000000001",
      "handle": "thsottiaux",
      "url": "https://x.com/thsottiaux/status/1960000000000000001"
    },
    "schedulePrecision": "datetime",
    "scheduleBasis": "explicit",
    "scheduleWindow": {
      "startAt": "2026-09-09T07:00:00.000Z",
      "endAt": "2026-09-09T07:00:00.000Z"
    },
    "scheduleState": "pending",
    "completedAt": null,
    "completionRecordId": null,
    "fulfillmentOrigin": null,
    "relatedRecordIds": []
  },
  "meta": {
    "generatedAt": "2026-09-08T08:30:00.000Z",
    "lastSuccessfulCheckAt": "2026-09-08T08:29:00.000Z"
  }
}
List response
JSON
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "1960000000000000001",
        "kind": "reset_scheduled",
        "resetType": "global",
        "announcedAt": "2026-09-08T08:00:00.000Z",
        "effectiveAt": "2026-09-09T07:00:00.000Z",
        "text": "Usage limits will be reset tomorrow.",
        "confidence": 0.97,
        "scope": {
          "plans": [
            "all"
          ],
          "windows": [
            "unknown"
          ]
        },
        "source": {
          "origin": "x",
          "postId": "1960000000000000001",
          "handle": "thsottiaux",
          "url": "https://x.com/thsottiaux/status/1960000000000000001"
        },
        "schedulePrecision": "datetime",
        "scheduleBasis": "explicit",
        "scheduleWindow": {
          "startAt": "2026-09-09T07:00:00.000Z",
          "endAt": "2026-09-09T07:00:00.000Z"
        },
        "scheduleState": "pending",
        "completedAt": null,
        "completionRecordId": null,
        "fulfillmentOrigin": null,
        "relatedRecordIds": []
      }
    ],
    "page": 1,
    "pageSize": 10,
    "total": 1,
    "totalPages": 1,
    "hasNext": false
  },
  "meta": {
    "generatedAt": "2026-09-08T08:30:00.000Z",
    "lastSuccessfulCheckAt": "2026-09-08T08:29:00.000Z"
  }
}
Manual completion record
JSON
{
  "id": "manual:1960000000000000001",
  "kind": "reset_completed",
  "resetType": "global",
  "announcedAt": null,
  "effectiveAt": "2026-09-09T07:05:00.000Z",
  "text": null,
  "confidence": null,
  "scope": {
    "plans": [
      "all"
    ],
    "windows": [
      "unknown"
    ]
  },
  "source": {
    "origin": "operator",
    "postId": null,
    "handle": null,
    "url": null
  },
  "schedulePrecision": null,
  "scheduleBasis": null,
  "scheduleWindow": null,
  "scheduleState": null,
  "completedAt": "2026-09-09T07:05:00.000Z",
  "completionRecordId": null,
  "fulfillmentOrigin": "manual",
  "relatedRecordIds": [
    "1960000000000000001"
  ]
}

dataList pagination

FieldTypeMeaning
itemsobject[]Record array, up to pageSize items; empty if this page has no records.
pageintegerRequested page number, starting at 1.
pageSizeintegerRequested page size, between 1 and 10.
totalintegerMatching record count, including both schedules and completions.
totalPagesintegerNumber of pages, or 0 when no records match.
hasNextbooleanWhether another page is available.

metaData freshness

FieldTypeMeaning
generatedAtstringUTC generation time of the published snapshot.
lastSuccessfulCheckAtstring | nullUTC time of the last successful monitor check; null if none is known.

Each request reads the current dataset. New or corrected records may move between pages; deduplicate by id. meta reflects the published data, not the request time.

Limits & errors

20 requests / hour

Up to 20 requests in any rolling 3600 seconds, shared by Open API data endpoints and MCP query tools.

Requests admitted to either data endpoint or an MCP query tool count once, even if validation or processing later fails. Handshake, tool listing, rejected protocol requests, documentation, the specification, skill downloads and OPTIONS do not count. A shared outbound IP shares quota. Admitted responses, including successful 200s, include X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Window and X-RateLimit-Reset. Those headers are omitted only when limiting is disabled. Retry-After is sent only with HTTP 429.

Response headerMeaning
X-RateLimit-LimitMaximum requests in the sliding window, as an integer.
X-RateLimit-RemainingRequests remaining after this request, as an integer.
X-RateLimit-WindowSliding window length in seconds.
X-RateLimit-ResetUTC timestamp when the oldest counted request leaves the window; this does not refill the whole quota.
Retry-AfterOn 429 only: minimum seconds before retrying, rounded up. Also available as retryAfter in the JSON body.

Errors

422 invalid_queryIllegal, duplicate, or unknown query parameters.
429 rate_limitedSliding-window quota exceeded. Honor Retry-After / retryAfter.
503 rate_limit_unavailableRate limit is on but Redis is unavailable. The docs page still works.
503 data_unavailableNo published snapshot yet. Distinct from an empty match.
500 internal_errorUnexpected server error; internal details are not returned.
404 / 405Unknown path or method on the Open API app, as JSON.
429 / rate_limited
{
  "ok": false,
  "error": "rate_limited",
  "detail": "Request limit exceeded",
  "retryAfter": 143
}