GET/records/latest
조건에 맞는 최신 기록 또는 null
curl 'https://didcodexreset.com/openapi/v1/records/latest?kind=reset_completed'HTTP, MCP 또는 설치형 에이전트 스킬로 초기화 신호를 내 도구에 연결하세요
https://didcodexreset.com/openapi/v1GET 요청으로 JSON 응답을 받으세요. 가입이나 인증 헤더가 필요하지 않습니다
curl 'https://didcodexreset.com/openapi/v1/records/latest'
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);
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())
/records/latest조건에 맞는 최신 기록 또는 null
curl 'https://didcodexreset.com/openapi/v1/records/latest?kind=reset_completed'/records페이지별 목록, 페이지당 최대 10개
curl 'https://didcodexreset.com/openapi/v1/records?kind=reset_scheduled&page=2&pageSize=10'kind는 두 데이터 엔드포인트에 적용됩니다(all, reset_scheduled, reset_completed). page와 pageSize는 목록에 적용됩니다. 알 수 없거나 중복되거나 범위를 벗어난 매개변수는 보정하지 않고 422를 반환합니다
| 매개변수 | 기본값 | 설명 |
|---|---|---|
kind | all | all(기본값), reset_scheduled 또는 reset_completed. all은 실시간 공개 신호이며 이행된 일정은 빼습니다. 일정 필터에는 완료되거나 시간이 지난 일정도 포함됩니다. 취소되거나 제외된 기록은 포함되지 않습니다 |
page | 1 | 1부터 시작하는 페이지 번호. 범위를 넘으면 요청한 페이지 번호를 유지하고 빈 items 배열을 반환합니다 |
pageSize | 10 | 1~10, 기본값 10 |
all과 reset_completed는 아직 열린 pending 일정을 맨 앞(창이 빠른 순)에 두고, 나머지는 announcedAt, completedAt, effectiveAt, id 내림차순입니다. 이행된 일정은 all에서 빠지고 reset_scheduled에만 남으며, 이 필터는 계속 effectiveAt 내림차순입니다. latest는 같은 필터의 첫 기록이며, total은 날짜 수가 아닌 기록 수입니다
완료되거나 시간이 지난 일정을 포함하여 현재 저장된 공개 기록을 조회합니다. 영구 보관은 보장하지 않습니다. 향후 일정을 제외하려면 kind=reset_completed를 사용하세요
모든 필드가 포함됩니다. null은 알 수 없거나 해당하지 않음을 뜻하며, 0을 뜻하지 않습니다
| 필드 | 타입 | 설명 |
|---|---|---|
id | string | 기록 ID. X 게시물은 숫자 문자열, 운영진 보충 기록은 op_…, 수동 완료 기록은 manual:…를 사용합니다 |
kind | string | reset_scheduled 또는 reset_completed. resetType과 별개의 분류입니다 |
resetType | string | global, banked 또는 global_and_banked |
announcedAt | string | null | 출처의 공지 시각. 공지 없는 수동 완료 기록은 null |
effectiveAt | string | null | 예정 또는 실제 초기화 시각. 알 수 없으면 null이며 announcedAt으로 채우지 않습니다 |
text | string | null | 공개 게시물 본문 또는 운영진 문구. 알 수 없으면 null |
confidence | number | null | 알려진 경우 0~1. 히트맵에만 있는 이력과 집계된 수동 완료 기록은 null |
scope | object | null | 알려진 경우 plans와 windows, 그렇지 않으면 null |
source | object | origin, postId, handle, url. 수동 완료 기록은 origin=operator이며 나머지는 null |
schedulePrecision | string | null | 일정은 date 또는 datetime, 완료 기록은 null |
scheduleBasis | string | null | 일정은 explicit 또는 contextual_inference, 완료 기록은 null |
scheduleWindow | object | null | 알려진 예정 시간 구간의 UTC startAt/endAt |
scheduleState | string | null | 일정은 pending, elapsed, fulfilled 또는 unknown. elapsed는 예정 시간대가 지났지만 완료가 확인되지 않았음을 뜻합니다 |
completedAt | string | null | 예정된 초기화의 완료가 확인된 시각. 확인되지 않았으면 null |
completionRecordId | string | null | 일정에 연결된 완료 기록 ID |
fulfillmentOrigin | string | null | auto, link 또는 manual |
relatedRecordIds | string[] | 완료 기록에 관련된 일정 ID. 없으면 빈 배열 |
source객체 필드| 필드 | 타입 | 설명 |
|---|---|---|
origin | string | 출처 게시물은 x, 운영진 보충 기록 및 수동 완료 기록은 operator |
postId | string | null | 원본 문자열 ID. 독립적인 수동 완료 기록은 null |
handle | string | null | X 출처는 thsottiaux, 그 외는 null |
url | string | null | X 게시물의 정규 URL. 출처 게시물이 없으면 null |
scope객체 필드| 필드 | 타입 | 설명 |
|---|---|---|
plans | string[] | 영향을 받는 요금제 ID. all은 모든 요금제, unknown은 명시되지 않음을 뜻합니다 |
windows | string[] | five_hour, weekly 등 영향을 받는 한도 구간 ID. unknown은 명시되지 않음을 뜻합니다 |
scheduleWindow객체 필드| 필드 | 타입 | 설명 |
|---|---|---|
startAt | string | 예정 시간 구간의 시작 시각(UTC) |
endAt | string | 예정 시간 구간의 종료 시각(UTC). 정확한 시각이면 startAt과 같습니다 |
UTC, 밀리초 정밀도, Z 접미사. 날짜 단위 일정은 정밀도를 유지하며 해당 지역의 하루를 UTC 시간 구간으로 변환합니다
성공 시 ok: true, data, meta를 반환합니다. 최신 조회는 기록 한 개 또는 null, 목록 조회는 items와 페이지 정보를 반환합니다. 오류 시 ok: false, error, detail을 반환합니다
{
"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"
}
}
{
"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"
}
}
{
"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목록 페이지 정보| 필드 | 타입 | 설명 |
|---|---|---|
items | object[] | 최대 pageSize개의 기록 배열. 해당 페이지에 기록이 없으면 빈 배열 |
page | integer | 요청한 페이지 번호, 1부터 시작 |
pageSize | integer | 요청한 페이지당 기록 수, 1~10 |
total | integer | 조건에 맞는 기록 수. 예정과 완료 기록을 모두 포함합니다 |
totalPages | integer | 페이지 수. 일치하는 기록이 없으면 0 |
hasNext | boolean | 다음 페이지 존재 여부 |
meta데이터 최신 상태| 필드 | 타입 | 설명 |
|---|---|---|
generatedAt | string | 게시된 스냅샷 생성 시각(UTC) |
lastSuccessfulCheckAt | string | null | 마지막으로 성공한 모니터링 확인 시각(UTC). 알 수 없으면 null |
각 요청은 현재 데이터를 읽습니다. 추가 또는 수정된 기록은 다른 페이지로 이동할 수 있으므로 id로 중복을 제거하세요. meta는 요청 시각이 아닌 게시된 데이터의 상태를 나타냅니다
최근 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-After | 429에만 포함되며 재시도까지의 최소 대기 초를 올림한 값입니다. 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으로 반환합니다 |
{
"ok": false,
"error": "rate_limited",
"detail": "Request limit exceeded",
"retryAfter": 143
}