Did Codex Reset
AIニュース
GitHub

公開API

OpenAPI JSON

HTTP、MCP、インストール可能なエージェントスキルを使って、リセットシグナルを自分のツールに取り込めます

APIキー不要20リクエスト / 時間UTC · ミリ秒

クイックスタート

GET /records/latest
ベースURLhttps://didcodexreset.com/openapi/v1

GETリクエストでJSON応答を取得します。登録や認証ヘッダーは不要です

cURL
curl 'https://didcodexreset.com/openapi/v1/records/latest'
JavaScript
const res = await fetch('https://didcodexreset.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://didcodexreset.com/openapi/v1/records?page=1&pageSize=10')
with urlopen(req) as response:
    print(response.read().decode())

エンドポイント

読み取り専用 · 認証情報不要

GET/records/latest

条件に一致する最新の記録、またはnull

curl 'https://didcodexreset.com/openapi/v1/records/latest?kind=reset_completed'

GET/records

ページ分割された一覧、1ページ最大10件

curl 'https://didcodexreset.com/openapi/v1/records?kind=reset_scheduled&page=2&pageSize=10'

クエリパラメータ

kindは両方のデータエンドポイントで使用します(all、reset_scheduled、reset_completed)。pageとpageSizeは一覧用です。不明・重複・範囲外のパラメータは補正せず422を返します

パラメータ既定値説明
kindallall(既定)、reset_scheduled、reset_completed。allは公開中のライブ信号で、実施済み予定は含めません。予定の絞り込みには実施済み・期限経過の履歴も含まれます。取り消し・却下された記録は除外します
page11始まりのページ番号。末尾を超える場合は要求された番号を保ち、空のitems配列を返します
pageSize101~10、既定値10

allとreset_completedは、未終了のpending予定を先頭(窓の早い順)にし、その後announcedAt、completedAt、effectiveAt、idの降順です。実施済み予定はallから除外し、reset_scheduledに残します。reset_scheduledは従来どおりeffectiveAtの降順です。latestは同じ条件の先頭の記録です。totalはリセット日数ではなく記録件数です

実施済み・期限経過の予定を含め、現在保存されている公開記録を取得します。永続的な保存は保証しません。将来の予定を除く場合はkind=reset_completedを指定してください

記録のフィールド

JSON / camelCase

すべてのフィールドが含まれます。nullは不明または対象外を意味し、ゼロではありません

フィールド型説明
idstring記録ID。X投稿は数字の文字列、運営補記はop_…、手動確認はmanual:…を使用します
kindstringreset_scheduledまたはreset_completed。resetTypeとは別の分類です
resetTypestringglobal、banked、global_and_banked
announcedAtstring | null情報元の告知時刻。告知を伴わない手動確認はnull
effectiveAtstring | nullリセットの予定・実施時刻。不明ならnull。欠損値をannouncedAtで補いません
textstring | null公開投稿の本文または運営の文面。不明ならnull
confidencenumber | null既知なら0~1。ヒートマップのみの履歴と集約された手動確認はnull
scopeobject | null既知ならplansとwindows、それ以外はnull
sourceobjectorigin、postId、handle、url。手動確認ではorigin=operator、ほかはnull
schedulePrecisionstring | null予定はdateまたはdatetime、完了はnull
scheduleBasisstring | null予定はexplicitまたはcontextual_inference、完了はnull
scheduleWindowobject | null既知の予定時間帯を示すUTCのstartAt/endAt
scheduleStatestring | null予定はpending、elapsed、fulfilled、unknown。elapsedは予定時間帯を過ぎても完了が未確認であることを示します
completedAtstring | null予定の実施を確認した時刻。未確認ならnull
completionRecordIdstring | null予定に関連付けられた完了記録のID
fulfillmentOriginstring | nullauto、link、manual
relatedRecordIdsstring[]完了記録に関連する予定ID。なければ空配列
sourceオブジェクトのフィールド
フィールド型説明
originstring情報元の投稿はx、運営補記・手動確認はoperator
postIdstring | null元の文字列ID。独立した手動確認はnull
handlestring | nullXの情報元はthsottiaux、それ以外はnull
urlstring | nullX投稿の正規URL。情報元の投稿がなければnull
scopeオブジェクトのフィールド
フィールド型説明
plansstring[]対象プランのID。allは全プラン、unknownは指定なし
windowsstring[]five_hourやweeklyなど対象利用枠のID。unknownは指定なし
scheduleWindowオブジェクトのフィールド
フィールド型説明
startAtstring予定時間帯の開始時刻(UTC)
endAtstring予定時間帯の終了時刻(UTC)。正確な時刻の予定ではstartAtと同じ

UTC、ミリ秒精度、末尾はZ。日付単位の予定はその精度を保ち、現地の暦日をUTCの時間帯に変換します

応答

application/json

成功時はok: true、data、metaを返します。最新取得は記録1件またはnull、一覧取得はitemsとページ情報です。エラー時はok: false、error、detailを返します

最新記録の応答
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"
  }
}
一覧の応答
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"
  }
}
手動確認の記録
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"
  ]
}

data一覧のページ情報

フィールド型説明
itemsobject[]最大pageSize件の記録配列。このページに記録がなければ空配列
pageinteger要求されたページ番号、1始まり
pageSizeinteger要求された1ページの件数、1~10
totalinteger条件に一致する記録数。予定と完了の両方を含みます
totalPagesintegerページ数。一致する記録がなければ0
hasNextboolean次のページがあるかどうか

metaデータの鮮度

フィールド型説明
generatedAtstring公開スナップショットの生成時刻(UTC)
lastSuccessfulCheckAtstring | null最後に成功したモニタリング確認の時刻(UTC)。不明ならnull

各リクエストは現在のデータを読み取ります。追加や訂正で記録のページが移る場合があるため、idで重複を除いてください。metaはリクエスト時刻ではなく公開データの状態です

制限とエラー

20リクエスト / 時間

直近3600秒間で最大20リクエスト。公開APIのデータエンドポイントとMCP検索ツールで共有します

データエンドポイントまたはMCP検索ツールで受理されたリクエストは、その後の検証・処理が失敗しても1回と数えます。接続の初期化、ツール一覧、拒否されたプロトコル要求、ドキュメント、仕様、スキルのダウンロード、OPTIONSは対象外です。同じ外向きIPは上限を共有します。受理された応答(成功の200を含む)には X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Window、X-RateLimit-Reset を返します。これらを省くのは制限を無効にしたときだけです。Retry-After は HTTP 429 のときだけ返します

応答ヘッダー説明
X-RateLimit-Limit移動時間枠内の最大リクエスト数(整数)
X-RateLimit-Remainingこのリクエスト後の残りリクエスト数(整数)
X-RateLimit-Window移動時間枠の長さ(秒)
X-RateLimit-Reset最古の集計対象リクエストが時間枠から外れるUTC時刻。上限全体が一度に回復する時刻ではありません
Retry-After429のみ。再試行までの最短秒数を切り上げた値。JSON本文のretryAfterでも取得できます

エラー

422 invalid_query不正・重複・不明なクエリパラメータ
429 rate_limited移動時間枠の上限を超えました。Retry-After / retryAfterに従ってください
503 rate_limit_unavailable制限は有効ですがRedisを利用できません。ドキュメントページは引き続き利用できます
503 data_unavailable公開済みスナップショットがまだありません。検索結果が空の状態とは異なります
500 internal_error予期しないサーバーエラー。内部の詳細は返しません
404 / 405公開APIの不明なパス・メソッドはJSONで返します
429 / rate_limited
{
  "ok": false,
  "error": "rate_limited",
  "detail": "Request limit exceeded",
  "retryAfter": 143
}