迁移公告/api/public/*2026 年 12 月 31 日停服,换用 /api/v1/*。RSS、已装 Skill 1.x、新接入不受影响。

为避免重复内容,我们会在本机生成一个匿名标识,并自动写入下方配置。 它不是账号或密钥;清除浏览器数据后会自动更换。数据如何处理详见隐私说明

匿名 GET,是技术入口

无需 token。浏览器跨域、curl 和默认 HTTP SDK 都是正式支持路径。临时查最近内容用 items;长期维护全部精选用一次快照加增量游标。字段、错误码与 schema 以 OpenAPI 3.1 为准;对外商业使用仍须先取得书面授权。

第一个请求
curl 'https://aihot.news/api/v1/items?mode=selected&window=24h&limit=20'

端点

GET/api/v1/items精选或最近 7 天公开池;支持分类、时间和关键词
GET/api/v1/codex-resetsTibo 全员重置与发重置卡:中文帖子、北京时间、预告与确认记录
GET/api/v1/hot-topics当前热点榜与事件排名
GET/api/v1/stories/{publicId}事件详情:报道时间线 + AI 综述 + 关联事件
GET/api/v1/dailies日报日期索引
GET/api/v1/dailies/latest最新日报
GET/api/v1/dailies/{date}指定日期日报
GET/api/v1/selected/snapshot当前全部精选;首次完整同步(分页)
GET/api/v1/selected/changes精选新增、修改和撤选;后续只取变化

打开 OpenAPI JSON

先知道这几件事

默认精选
不传 mode 等同 selected;只有明确需要公开池才用 all。
完整精选不限 7 天
snapshot 首次拿全,changes 只取变化;items 仍是最近 7 天。
公开池不等于全库
不含原公众号爆文榜来源、未审内容、低相关条目和已合并重复条目。按分类筛论文请加 category=paper
正文不在 items
返回摘要、推荐理由、站内阅读页与原文链接。
内容多久变一次
新条目全天陆续进入;精选的新增/修改/撤选通常每天几次到几十次;日报每天 08:00(北京时间)一次。轮询间隔按这个节奏定就好。
没有推送通道
不提供 SSE、Webhook 或流式订阅,这是刻意的:响应走共享缓存,其 TTL 已经决定了任何客户端能有多新,按 s-maxage 条件轮询拿到的新鲜度相同,还不用维持长连接、不受发布影响。
错误是 Problem JSON
统一格式;反馈时附上 requestId 即可定位。
维护全部精选:一次快照,之后只拉变化
快照 + 增量
# 首次:分页拿当前全部精选。保存第一页响应里的 cursor(逐页相同)
curl 'https://aihot.news/api/v1/selected/snapshot?fields=minimal&limit=500'

# hasMore 为 true 就带 nextPage 继续翻,直到翻完
curl 'https://aihot.news/api/v1/selected/snapshot?fields=minimal&limit=500&page=<上一页的 nextPage>'

# 翻完之后:原样回传 cursor,只拿新增、修改和撤选
curl 'https://aihot.news/api/v1/selected/changes?cursor=<第一页响应的 cursor>&limit=100'

每页成功应用后再保存新 cursor。变化包含新增、标题/摘要等原地修改和撤选;若返回 409 snapshot_required,重新取一次快照即可,接口不会静默漏数。

两件事省得你猜:快照全量已有数千条且只增不减,按 limit(默认 500、上限 1000)翻几页,fields=minimal 能显著缩小首次 bootstrap;cursor 是流水账水位而不是会话,不会因为放久了而过期,客户端离线几天回来仍可从原处续传,只有收到 409 才需要重新 bootstrap。

只关心最近头部:直接使用 ETag 条件请求
条件请求
# 首次请求:保存响应里的 ETag
curl -i 'https://aihot.news/api/v1/items?mode=selected&window=24h&limit=20'

# 后续请求同一个完整 URL;304 表示内容没有变化
curl -i -H 'If-None-Match: <上次响应的 ETag>' 'https://aihot.news/api/v1/items?mode=selected&window=24h&limit=20'

同一个完整 URL 返回的 ETag 会覆盖公开响应;新增、撤选、重排或标题摘要等原地编辑都能被下一次条件请求发现。

items 查询参数
参数
默认
取值
mode
selected
selected | all
window
7d
24h | 7d
by
timeline
timeline 与网页一致(慢推信源按收到时间落进窗口)|published 只按原文发布时间。两个时间戳每条都返回
limit
50
整数 1–100
category
ai-models / ai-products / industry / paper / tip
q
关键词 2–200 字
cursor
原样回传 nextCursor,不要解析,也不要跨天持久化
错误与恢复
400
参数不合法;按 OpenAPI 和稳定 code 修正,不要自动改成宽查询。无效或跨查询 cursor 不会静默回到第一页; 滚动窗口滑过 cursor 锚点(例如隔天再用昨天的书签)同样返回 invalid_cursor,从第一页重来,不会静默给一页空。
409
snapshot_required:增量游标无法安全续传,重新取一次完整快照。
429
严格遵守 Retry-After,不要增加并发重试。
5xx
指数退避并使用上次成功缓存;公开服务不提供 SLA。
旧接口迁移对照表(2026 年 12 月 31 日停服)

/api/public/* 会在 2026 年 12 月 31 日停止服务,替代品是同样匿名只读的 /api/v1/*。 迁移时不要复用旧 cursor 或 ETag:普通列表从 v1 首屏开始, 完整精选从 v1 snapshot 重建一次。

已经装了 Skill 的怎么办

已安装的 Skill 1.x 本来就走 v1,不用动;0.x 版 Skill 调的是旧 /api/public/*,在停服范围内——它每次会话会自检版本并提示升级,按提示重装即可。

让 Agent 帮你改

迁移提示词
我的项目还在调用 AIHOT 的旧接口 /api/public/*,它会在 2026 年 12 月 31 日 停止服务。

请读取 https://aihot.news/llms.txt 和 https://aihot.news/openapi-v1.json,然后:
1. 在我的代码里找出所有调用 /api/public/ 的地方,列给我看;
2. 按 v1 的字段映射改写,注意 url→links.original、permalink→links.aihot、title_en→originalTitle、source→source.name;
3. 不要复用旧的 cursor 或 ETag;精选同步要重新取一次 v1 snapshot;
4. 改完告诉我哪些地方需要我人工确认。

路径对照

旧入口v1 入口/替代方式迁移提醒
/api/public/items/api/v1/itemstake 改为 limit;since 改用覆盖 window 后按 publishedAt 收窄;移除 fields
/api/public/hot-topics/api/v1/hot-topics继续按多源热度读取当前热点
/api/public/daily/api/v1/dailies/latest最新日报;响应从顶层 report 读取
/api/public/daily/{date}/api/v1/dailies/{date}指定上海日历日期;响应从顶层 report 读取
/api/public/dailies?take=/api/v1/dailies?limit=日报归档索引;读取 schemaVersion、count 和 items
/api/public/selected/snapshot/api/v1/selected/snapshot迁移时重新获取一次 v1 快照
/api/public/selected/changes?take=/api/v1/selected/changes?limit=旧 cursor 不可复用;继续读取顶层 hasMore 和 cursor
/api/public/fingerprint对 v1 完整 URL 使用 ETag/If-None-Match304 表示内容没有变化
/api/public/version更新到最新 Skill;普通查询不再检查版本旧 0.x Skill 的升级桥,保留且不纳入本轮停服

字段对照

  • items/hot-topics/精选同步对象里原本存在的公共字段按以下方式迁移:url 改读 links.originalpermalink 改读 links.aihottitle_en 改读 originalTitlesource 改读 source.name
  • 只有 items 的顶层 counthasNextnextCursor 改读 page.countpage.hasMorepage.nextCursor; selected changes 继续读取顶层 hasMore cursor。错误改为标准 Problem JSON。
  • 所有返回 attribution 的 v1 对象,都从 { source, canonical } 改读 { name, url }
  • items 参数迁移:take 改为 limitsince 改选能覆盖目标范围的 window=24h|7d,再按 publishedAt 本地收窄。旧 fields=minimal 在 v1 items 没有直接等价参数,必须移除; selected snapshot 仍支持 fields,changes 沿用 snapshot cursor 绑定的字段模式,不再传 fields
  • 日报响应迁移:latest 和指定日期的 v1 响应增加稳定外层,报告本体改从 report 读取;条目里的 sourceNamesourceUrlpermalink 分别改读 source.namelinks.originallinks.aihot。v1 在日报索引项与报告顶层新增必有的 links.aihot; 旧客户端若曾用 attribution.canonical 作为日报站内地址, 改读这个字段。
  • v1 只接受 OpenAPI 声明且不重复的参数;旧客户端使用的 _ cache-buster、未知参数或重复参数必须移除,否则会返回 400。

这些不用改

  • RSS 订阅地址与 GUID 长期稳定,不参加本次停服。
  • /api/public/feed 是站内网页翻页接口,不属于外部 API 停服对象。
  • /api/public/version 会继续作为旧 0.x Skill 的轻量升级发现桥,不纳入本轮停服;1.x 在稳定 v1 合同内继续工作,普通后端更新不要求反复安装。

迁移遇到阻塞怎么办

从公告到停服有 159 天。 如果你的项目确实来不及,请通过 反馈页说明用途和阻塞点,我们会单独确认延期方案,而不是让你的服务直接中断。

匿名接入,先确认用途许可

重要事实回原文核对

摘要和翻译由 AI 生成。引用数字、政策或原话前,请使用返回的原文 URL 复核。

用途不同,许可不同

个人非商业、公益非商业和组织内部使用免费;任何面向外部的商业产品、收费服务、 客户交付、代理接口、数据转售、公开镜像或批量再分发,须先取得书面授权。 仅署名不构成授权;完整边界见 公开使用规则

按频率合同调用

带 If-None-Match 的条件轮询,间隔取该端点响应里的 s-maxage(items 60 秒、hot-topics 300 秒)就够,更密只会拿到同一份缓存副本;RSS 建议 30 分钟或更慢;MCP 按用户请求调用即可;收到 429 后按 Retry-After 退避。

稳定契约,不承诺 SLA

v1 不删除、改名或改变既有字段类型;关键链路仍请自行设置缓存、重试和降级。