TIBO API 使用文档
地址:https://tibo.cc。无需 API Key;数据查询只读,站内互动另有写入接口。交互式文档:打开 /docs,接口结构:OpenAPI。
数据来源:Codex Resets。本网站展示的是公开社区数据、历史记录或预测信息,不代表 OpenAI 的官方承诺。数据可能存在延迟或误差。
接口
| 方法与路径 | 用途 | 参数 |
|---|---|---|
GET /api/v1/status |
当前状态、最近历史、待执行公告、预测观察 | 无 |
GET /api/v1/resets |
最近历史记录 | limit:1—100 整数,默认 20 |
GET /health |
应用、数据库、缓存与数据来源状态 | 无 |
curl -fsS https://tibo.cc/api/v1/status
curl -fsS 'https://tibo.cc/api/v1/resets?limit=20'
curl -fsS https://tibo.cc/health
返回结构
以下仅为字段解释。真实数据由数据来源提供,字段可能为 null;不要把文档示意当成当前状态。
| 字段 | 含义 |
|---|---|
data |
状态对象或历史记录数组;尚无真实数据时为 null |
source / source_url |
第三方来源与 https://codex-resets.com 回链 |
upstream_url |
对应的数据来源接口地址 |
is_official |
固定 false:本站提供社区汇集数据,不作官方认证 |
is_prediction |
status 包含 active_watch 时 true;历史为 false;无数据时 null |
confidence |
数据来源未提供来源可靠性评分,返回 null,表示 unknown |
fetched_at / last_successful_update |
本站此数据集最后一次成功获取并存储的时间 |
last_updated |
数据来源未提供独立数据更新时间,返回 null |
upstream_generated_at |
数据来源本次 JSON 的生成时间,不是事件更新时间 |
stale |
超过缓存有效期、最近拉取失败或重启后尚未核实时为 true |
cached |
true:公开请求读取缓存,不直接向数据来源发请求 |
upstream_status |
ok、cached_not_checked、network_error、http_429、http_5xx、invalid_payload 等 |
raw |
保留数据来源原始字段;历史 data 按本次 limit 裁切,完整最新缓存保存在数据库 |
provenance |
时间含义、官方确认 unknown、预测概率与预测是否过期 |
disclaimer |
免责声明,请下游继续展示 |
error |
正常时 null,错误时包含 code 和 message |
status.data 含 latest_reset、scheduled_reset、active_watch、stats。scheduled_for=null 表示没有给定计划时间;正文日期的北京时间换算不能自动变成确定重置时刻。active_watch.reset_chance_percent 是预测概率,不是可信度。已过有效期的预测由 provenance.watch_expired=true 标注,即使缓存本身新鲜也不能当作当前有效预测。
历史记录保留 id、reset_type、announced_at、text、source。announced_at 是公告或首次观察时间,未必是所有账号实际到账时间。source.url 缺失时不能编造。
历史附带 pagination:limit、returned、cached_records、has_more、upstream_has_more、maximum。第一版最多保存最新 100 条,不提供 cursor 翻页。raw.pagination 是数据来源原始分页元数据,不是本站分页协议。
真实示例
开发时从数据来源实际获取的一条记录(2026-09-21 留样,不是实时状态):
{
"id": "2098685367058612394",
"reset_type": "regular",
"announced_at": "2026-09-12T08:09:17.000Z",
"text": "Reset all propagated. Sweet dreams. https://t.co/VgKVUixoJG",
"source": {
"type": "x_post",
"author": "thsottiaux",
"url": "https://x.com/thsottiaux/status/2098685367058612394"
}
}
完整接口还会包裹上述来源、新鲜度和免责声明字段。请运行 curl 读取实时完整返回。
错误与健康检查
200:可用的真实缓存;可能stale=true,必须检查。400:非法 Host 或跨域预检不允许。403:MCP 或互动写入的 Origin 不在允许列表。404:不存在的路径,返回 JSON 错误。405:该路径不支持请求方法;MCP 普通 GET 返回 405 不表示服务宕机。408:请求体读取超过 10 秒。413:请求体超过 64 KiB。422:limit 等参数无效。429:超过限流,按Retry-After秒数等待。500:内部异常,返回通用错误,不暴露堆栈。503:从未成功取得所需数据;不返回假数据。健康检查在数据库异常或任一数据集缺失时也返回 503。
/health 返回 application、database、cache、upstream、last_successful_update、datasets、version、来源及免责声明。旧缓存仍可用时 HTTP 200,但 cache=stale;因此健康检查成功不代表数据来源最新数据一定可用。总体 last_successful_update 取两个数据集较早的获取时间;分别时间见 datasets。
缓存、限流与跨域
默认缓存有效期 300 秒,后台每 180 秒开始一轮刷新(自定义 TTL 时取 min(180, TTL × 0.6)),为请求及后续工作预留时间;失败轮次按至多 30 秒起始间隔重试,超时轮次结束后至少等待 1 秒,不并发追赶。连接超时 5 秒、读取超时 10 秒、每次尝试总时长不超过 20 秒,最多 2 次重试。初次失败无真实缓存时返回 503;已有缓存时不中断展示,只标记过期。请求不会触发无限重试。
API 每个 IP 每分钟 60 次;MCP 每个 IP 每分钟 30 次,独立计数。共享出口用户会共享配额。采用单进程内存滑动窗口,重启会清空,多进程不会共享计数,因此第一版固定一个进程。限流客户端记录最多 10,000 个,超限拒绝新来源而非无限占用内存。
CORS 仅允许配置的前端域名,生产为 https://tibo.cc。服务器端 curl、MCP 客户端不受浏览器 CORS 限制。CORS 不是身份认证;数据查询接口公开只读;互动写入额外校验 Origin。
数据使用约定
引用或再次展示时保留 codex-resets.com 来源链接、原始公告链接、新鲜度与免责声明;请勿将预测写成官方确定事件。本站不提供 OpenAI 账号查询或个人额度判断。
中文译文(v1.2.0)
匹配到中文的记录在 data 中增加 translation:text、language、source_url、fetched_at、stale。英文 text 和 raw 均保留不变;没有匹配译文时不添加此字段。
译文来源为 https://codex-resets.com/api/resets?locale=zh-CN ,这是该站中文前端正在使用的接口,未列入其稳定 v1 OpenAPI。本站仅用它补充译文,不用它决定状态。失败时保留此前真实译文并标记过期,无缓存则展示英文。
正文时间自动换算(v1.6.7)
含可识别日期线索的记录增加独立 text_time_conversion。覆盖 status.data.latest_reset、scheduled_reset、active_watch、历史 data[] 及归档 notice_context.record;没有日期线索时不添加。各 HTTP/MCP 接口共用同一转换结果,未来同类消息按正文自动计算,无需按事件名、活动日期逐次修改代码。
| 字段 | 含义 |
|---|---|
method_version |
当前为 text-time-v1 |
text / reference_at |
本次转换绑定的原始正文与消息记录时间;观察取 observed_at,其他记录取 announced_at |
status |
converted 已换算;needs_review 有日期线索但不能可靠换算,不能自行填补北京时间 |
precision |
day 对应原时区整天;minute 对应正文明确时刻;未换算时 null |
source_timezone / source_date |
识别的原时区与该时区日期,不是重置安排 |
beijing_start / beijing_end |
day 的北京时间起止,ISO 8601 +08:00;起点包含、终点不含 |
beijing_time |
minute 的北京时间;仅整天日期时为 null |
end_exclusive |
整天范围为 true;明确单一时刻为 false |
assumptions / reason |
缺年份、相对日期等处理依据,以及无法换算的原因 |
规则使用正文明确的唯一时区。PT / Pacific Time / 太平洋时间按 America/Los_Angeles 的日期规则自动处理夏令时;明确 PDT 固定为 UTC−7,PST 固定为 UTC−8,不把两者混用。明确北京时间和无偏移的 UTC/GMT 也可识别。日期支持年-月-日、中英文月日、星期及今天/明天等限定写法;其他写法不保证可解析。
省略年份时使用消息记录时间在原时区的年份;今天/明天及单独星期同样锚定该记录时间,不随访问日期滚动,不读取当前年份、观察有效期或作者习惯来补日期。单独星期采用从消息当地日期起、含当天的下一次该星期,并在 assumptions 中明示;“下周”等含义不唯一的写法需要核对。正文、记录时间改变会重算,撤回或删除日期线索不会沿用旧结果。客户端展示前应核对 text 与当前正文完全一致,reference_at 与当前记录时间表示同一时刻。
缺失/未知/冲突时区、多日期或时刻、模糊范围、非法日期、夏令时造成的不存在或重复时刻等,保守返回 needs_review,北京时间字段保留 null。只有日期时换算原时区自然日的两个边界,夏令时切换日可以为 23 或 25 小时,不硬加 24 小时。
真实 DevDay 观察回归样本(字段节选,不是实时重置安排):正文为 OpenAI DevDay 2026 is on September 29 (Pacific Time). We expect a possible Codex reset around the event.,观察记录时间为 2026-09-27T10:39:35.426Z,换算结果为:
{
"status": "converted",
"precision": "day",
"source_timezone": "America/Los_Angeles",
"source_date": "2026-09-29",
"beijing_start": "2026-09-29T15:00:00+08:00",
"beijing_end": "2026-09-30T15:00:00+08:00",
"beijing_time": null,
"end_exclusive": true
}
这只表示文中活动日期对应的北京时间整天范围,不是重置观察窗口、开始时间或截止承诺。expires_at 仍仅为观察有效期,不能用它补正文日期;forecast_window 也不参与正文转换。text、translation.text、raw、scheduled_for 均不改写;转换只在响应中附加,不持久化为新的来源事实,不触发通知、不登记预测或修改既有评分。text_time_conversion 与已有 time_assessment / text_time_assessment 的预测研判契约分开。
站内互动与浏览器提醒
| 方法与路径 | 用途 |
|---|---|
GET /api/v1/wishes |
返回 count(总热度)、visitor_clicks(实际点击)、base_heat(初始基础值)、说明 |
POST /api/v1/wishes |
JSON {"request_id":"客户端生成的 UUID"},成功最多加 1;24 小时内相同 ID 不重复计数;另返回 counted |
GET /api/v1/notifications/config |
返回浏览器推送公钥 public_key 与服务支持标记 supported;不代表当前浏览器支持 |
POST /api/v1/notifications/subscribe |
保存浏览器 PushManager 生成的 endpoint 和 keys(auth、p256dh) |
POST /api/v1/notifications/unsubscribe |
JSON {"endpoint":"当前浏览器的订阅地址"},移除订阅 |
写入必须来自配置中的本站 Origin,浏览器跨站请求被拒绝。求重置默认每 IP 每分钟 15 次,订阅操作合计 5 次;同时受普通 API 60 次上限约束。无效参数 422、跨站 403、限流 429、订阅容量耗尽 503。订阅地址不是公开信息,不要粘贴到聊天、日志或文档中。
新安装初始热度为 128,761;已有站点通过一次性维护仅调整基础值使总热度从 128,761 继续累计,保留既有点击数,重启不重复调整。实际访客点击独立累计,不是人数,不影响真实重置状态。MCP 仍只有原来的三个只读工具,没有互动写入能力。
本站时间研判
GET /api/v1/status 新增顶层 time_assessment。它与原始 data/raw 分开,不改写来源的 scheduled_for。
| 字段 | 含义 |
|---|---|
mode |
source_schedule 转述上游给定时间,未独立核实;estimated 本站推测;unavailable 证据不足 |
state |
upcoming 尚未进入窗口;window_open 窗口内;window_passed 已过;time_passed 来源参考时间已过;newer_record 同一 ID 已重分类或有较新同类型记录;stale 依据过期;needs_review 待核查 |
window_start/window_end |
带时区的 ISO 时间;估计通常为一整个当地自然日,end_exclusive=true 表示不含终点 |
calculation_timezone |
采用的时区;依据见 timezone_basis,不能将历史假设写成原帖明示 |
confidence |
本站定性把握 low/medium/unknown/not_applicable,不是发生概率,也不是来源可信度评分 |
is_prediction/is_official |
推测必须为预测,本站研判不属于官方数据 |
evidence/assumptions/reason |
公开原帖链接、引用内容、时间、推断条件和无法判断的原因 |
timeline_relation |
当前预告与已收录重置记录的时间线关系;只用于判断该预告是否仍应作为当前线索,不证明已经兑现 |
stale/computed_at/method_version |
研判依据是否过期、计算时刻与规则版本;计算时刻不是原帖更新时间 |
观察窗口由当前记录动态计算。具体窗口及依据请读取本接口,不将文档示例作为当前安排。原理见 /guide/forecast。
time_assessment.timeline_relation.status 可能为 same_record_reclassified、newer_same_type_record_seen、newer_other_type_record_seen 或 no_related_reset。same_record、same_type_record 和 newer_record 分别保留可核查的关联记录摘要;只有同一 ID 已重分类或出现较新同类型记录时,retires_current_schedule=true,客户端停止把该 scheduled_reset 当作当前预告。较新的其他类型记录只说明时间线有更新,不能淘汰另一类型的有效预告。所有分支的 fulfillment_confirmed=false:发布时间更晚、类型相同或 ID 相同都不能证明个人额度到账,也不能自动证明两条消息一一对应。
顶层 is_prediction 现在同时反映来源预测或本站推测;顶层 confidence 仍保留“来源未提供则为 null”的原语义。没有待执行消息时 time_assessment=null。窗口过期不顺延,也不会自动标记完成。原理见 /guide/forecast。
概率维度(第三版本地候选)
读取 GET /api/v1/status 的 time_assessment.probability。这是证据覆盖结果,目前没有可用的已校准概率模型。不存在待执行公告时,父字段 time_assessment 为 null。
| 字段 | 含义 |
|---|---|
status |
insufficient_evidence 证据不足;stale 依据待更新;inactive 旧窗口已停止研判 |
event/source_record_id/reset_type |
目标事件、本条预告编号与额度类型 |
window_start/window_end |
对应父字段的观察窗口,不能和其他预测窗口混用 |
range_percent |
当前为 null,表示暂无可信概率区间;不是0%,不能用随意默认值替代 |
empirical_accuracy_percent/evaluated_forecasts/calibrated |
实测命中率、已评估预测样本数、是否校准;目前依次为null/null/false |
message_basis |
当前时间线索、时区依据、原帖链接 |
history_basis |
同类型、预告之前的已收录历史数量/编号/相邻间隔/平均公告间隔/证据截止/完整性/过期标记 |
source_forecast |
来源另行发布的预测;仅转述,不自动认定与本事件及窗口相同;当前为null |
reason/stale/computed_at/method_version |
缺少哪些证据、是否过期、计算时刻、评估规则版本 |
2026-09-21真实结果的节选(省略其他字段,不是完整响应):
{
"method_version": "evidence-coverage-v1",
"status": "insufficient_evidence",
"range_percent": null,
"empirical_accuracy_percent": null,
"evaluated_forecasts": null,
"calibrated": false,
"history_basis": {
"same_type_records": 3,
"adjacent_intervals": 2,
"average_interval_days": 7.27,
"timestamp_semantics": "announcement_or_first_observation",
"source_url": "https://codex-resets.com/api/v1/resets"
}
}
source_forecast.percent如有值,也不等于本站range_percent或empirical_accuracy_percent。历史接口通常只包含已收录事件,缺少负例和实际到账时间,不能把“3条记录”当作“3次预告全部兑现”。当前历史预测表现读取独立顶层 forecast_performance,不使用旧概率模型的预留空值。
公告不再列入当前列表(v1.3.1)
成功响应中 scheduled_reset=null 不会伪装为请求失败,也不会用旧公告覆盖 data/raw。顶层 notice_context 保留此前真实见到的公告、first_seen_at、last_seen_at、missing_since、source_generated_at 与来源链接;固定为 show_on_home=false、is_current=false、stale=true。缺失原因未知,不能等同于取消或已完成。当前 time_assessment 仍为 null。
notice_context.previous_time_assessment 从存档原帖及真实历史重建此前窗口,basis=archived_notice_reconstruction、state=source_unlisted、is_active=false、stale=true;window_state 仅用于复核此前日期窗口,不是新的有效预告。notice_context.timeline_relation.status 可能为 same_record_reclassified、newer_same_type_record_seen、newer_record_seen 或 no_newer_record,并始终返回 fulfillment_confirmed=false;关联摘要分别在 same_record、same_type_record、newer_record。归档公告只可出现在“判断依据与边界”,永远不回填首页黄卡正文、倒计时、分享或许愿阶段;即使没有更晚记录、仍在旧窗口内,也保持 show_on_home=false。首次无公告不生成虚构上下文。
历史预测成绩单(本地验收版)
GET /api/v1/status 新增顶层 forecast_performance,MCP get_current_status 共用。该字段是跨预测的历史表现,不是当前窗口发生概率;原 time_assessment.probability 的预留实测字段暂保留 null,客户端应读取此新字段。
initial_reference_percent=100,is_initial=true表示没有已评估样本;此时hit_rate_percent=null,不当作100%的实测命中率。score_percent = (baseline_count × baseline_score_per_sample + 后续实测得分之和) / scored_sample_count,保留一位小数。初始基准持久化为54条、每条100分;scored_sample_count=54+evaluated_count,aggregation_method=initial-baseline-weighted-v1。初始基准不是伪造的预测台账记录,total/records仍只包含实际锁定的预测。- 单次偏差得分:窗口内100分,窗口外每偏离1小时扣100/24分,最低0分。首次0分后综合98.2%,首次晚3小时后综合99.8%。
hit_rate_percent为后续实测的严格窗口内命中比例,不含初始基准;evaluated_count/hit_count/total/pending_count单列样本。records最近50条预测保留原窗口、registered_at、source_record、matched_record、offset_minutes、score、outcome与修订轨迹;总分使用所有持久记录。outcome:pending等结果、hit命中、miss窗口外、unmatched窗口结束24小时后仍无对应记录、awaiting_data数据待恢复。迟到的补录可以修正unmatched,并保留轨迹。- 窗口开始前才可注册;同一来源ID不会重复记样本或移动原窗口;新结果按首次未匹配的同类型公开记录关联,前后各24小时为范围,一条结果不重复归属。
stale表示当前数据新鲜度。来源失败、历史不完整时不新增预测或结算未命中。
完整解释见 预测与计时原理。新增SQLite表只存公开预测与结果,不含订阅或凭据。
v1.6.3 时间来源与卡片归属契约(2026-09-24)
data / raw 中的 scheduled_for 原样保留。此前 time_assessment.mode=announced 不再输出,改为 source_schedule:仅表明第三方提供了参考截止时间,不代表作者已承诺、重置会在该时刻开始或本站已核实。消费端应处理该模式,不把未知模式降级为“确定重置”。
precision=source_deadline、timezone_basis=upstream_timestamp、source_time_verified=false、reference_kind=deadline。source_scheduled_for保留原始值;timestamp_origin=scheduled_reset.scheduled_for;timestamp_semantics=upstream_deadline_not_execution;window_start=null,window_end为该参考截止时间。text_time_assessment是根据正文与注明的时区假设得到的独立研判,不能解释成上游生成时间的方法。is_prediction=false仅表示顶层时间没有由本站推算,不代表官方确认。is_official=false;概率仍未校准。fresh_until是缓存有效截止时刻;前端到期暂停倒计时和复制,不能把旧缓存继续当作当前公告。time_passed是参考截止时间已过、仍等新消息;needs_review是时间异常;newer_record是同一 ID 已重分类或已有较新同类型记录。均不等于预告已兑现。- 时间先后与兑现关系分开:
timeline_relation.fulfillment_confirmed当前固定为 false;较新的其他类型记录不会让有效预告退场。
网页、API、MCP共用同一后端评估。第三方计划时间不自动进入本站预测成绩单,不改写先前已锁定的预测样本。
首页客户端固定分工:黄卡只展示仍有效的当前 scheduled_reset;没有有效预告时只显示等待。白卡只展示 latest_reset,是最近重置正文的唯一入口。两者同时存在时仍各自展示;有效预告固定决定黄卡、倒计时、分享和许愿阶段,不能用 latest_reset 或 notice_context 的正文替代。
预测成绩与最新重置核对(v1.6.5)
forecast_performance 的 records 只计事前锁定的本站预测。来源已有参考时间时,只允许独立 text_time_assessment 中的本站观察窗口参与登记;不拿第三方截止时间评分、不从归档预告新增预测、不事后补造。
reset_observations:按时间倒序列出最新公开重置,outcome为hit/miss/awaiting_evaluation/unscored,含原因、原记录和关联预测 ID;无事前预测时score=null,既非命中也非未命中。coverage:覆盖起点observation_since、范围observation_scope、已核对/未计分/待核对数量、历史完整性和时效。已有预测时自首次锁定时刻统计;尚无预测时展示当前可用历史。current_forecast_status:说明当前有无已锁定预测,或为何暂不登记(无预告、仅参考时间、线索不足、窗口已开始、数据未更新等)。
成绩核对依赖状态与历史数据均新鲜;失败或历史不完整时暂停结算,已锁定的原始窗口保持不变。公开记录不证明个人额度已到账。
active_watch 观察消息
data.active_watch 保留来源观察;匹配到同一原文、observed_at、expires_at 与 forecast_window 的中文才附加 translation,raw 不变。provenance.watch_note 说明观察边界:expires_at 仅观察有效期,不是重置倒计时或执行承诺。网页依次选择有效预告、24 小时内重置庆祝、观察消息;观察不进入重置通知和本站评分预测。