{
  "meta": {
    "version": "1",
    "generatedAt": "2026-07-06T21:08:05+08:00",
    "disclaimer": "CyberFocus 对公开 AI 资讯的聚合索引与 AI 生成摘要，仅供参考。摘要由 AI 自动生成、可能有误，引用前请以 sourceUrl 原文为准。原文版权归各来源所有；本服务只提供链接与导览，不替代原文。测试版，接口与可用性可能调整，勿用于生产强依赖。",
    "docs": "/v1/index.json"
  },
  "name": "CyberFocus Public Data API",
  "description": "CyberFocus 对外只读数据服务（纯静态、只发自产内容索引 + AI 生成摘要）。",
  "endpoints": [
    {
      "path": "/v1/index.json",
      "description": "本清单（端点 + 契约文档）。"
    },
    {
      "path": "/v1/digest/latest.json",
      "description": "最新一日 AI 精编。"
    },
    {
      "path": "/v1/digest/{YYYY-MM-DD}.json",
      "description": "近 14 天每日精编（各一份）。",
      "available": [
        "2026-07-06",
        "2026-07-05",
        "2026-07-04",
        "2026-07-03",
        "2026-07-02",
        "2026-07-01",
        "2026-06-30",
        "2026-06-29",
        "2026-06-28",
        "2026-06-27",
        "2026-06-26",
        "2026-06-25",
        "2026-06-24",
        "2026-06-23"
      ]
    },
    {
      "path": "/v1/articles/recent.json",
      "description": "最近 50 条（fetchedAt 倒序）。"
    },
    {
      "path": "/v1/rss.xml",
      "description": "全站 RSS 2.0 订阅（link 指向原文 sourceUrl）。"
    },
    {
      "path": "/v1/modules/reports/recent.json",
      "description": "「AI 报告速览」最近 50 条（publishedAt 倒序，白名单）。"
    },
    {
      "path": "/v1/modules/reports/rss.xml",
      "description": "「AI 报告速览」独立 RSS 2.0（link 指原文 sourceUrl）。"
    },
    {
      "path": "/v1/modules/orgs/recent.json",
      "description": "「人服机构动态」最近 50 条（publishedAt 倒序，白名单）。"
    },
    {
      "path": "/v1/modules/orgs/rss.xml",
      "description": "「人服机构动态」独立 RSS 2.0（link 指原文 sourceUrl）。"
    },
    {
      "path": "/v1/modules/social/recent.json",
      "description": "「AI 精选热点」最近 50 条（publishedAt 倒序，白名单）。"
    },
    {
      "path": "/v1/modules/social/rss.xml",
      "description": "「AI 精选热点」独立 RSS 2.0（link 指原文 sourceUrl）。"
    },
    {
      "path": "/v1/modules/podcast/recent.json",
      "description": "「精选播客」最近 20 集（只发自产解读摘要 + 单集链接，不含逐字稿/源描述）。"
    },
    {
      "path": "/v1/modules/podcast/rss.xml",
      "description": "「精选播客」独立 RSS 2.0（link 指单集 sourceUrl）。"
    }
  ],
  "modules": [
    {
      "key": "reports",
      "label": "AI 报告速览"
    },
    {
      "key": "orgs",
      "label": "人服机构动态"
    },
    {
      "key": "social",
      "label": "AI 精选热点"
    },
    {
      "key": "podcast",
      "label": "精选播客"
    }
  ],
  "fields": [
    "id",
    "titleZh",
    "titleEn",
    "tldrZh",
    "source",
    "sourceUrl",
    "publishedAt",
    "fetchedAt",
    "category",
    "tags",
    "docType"
  ],
  "moduleFields": {
    "reports": [
      "id",
      "titleZh",
      "titleEn",
      "tldrZh",
      "source",
      "sourceUrl",
      "publishedAt",
      "fetchedAt",
      "category",
      "tags",
      "docType"
    ],
    "orgs": [
      "id",
      "titleZh",
      "titleEn",
      "tldrZh",
      "source",
      "sourceUrl",
      "publishedAt",
      "fetchedAt",
      "category",
      "tags",
      "docType"
    ],
    "social": [
      "id",
      "titleZh",
      "titleEn",
      "tldrZh",
      "source",
      "sourceUrl",
      "publishedAt",
      "fetchedAt",
      "category",
      "tags",
      "docType"
    ],
    "podcast": [
      "id",
      "titleZh",
      "titleEn",
      "tldrZh",
      "source",
      "sourceUrl",
      "publishedAt",
      "docType"
    ]
  },
  "contract": {
    "sort": "fetchedAt desc（收录时间倒序，冻结口径；缺失回退 publishedAt）",
    "supportedNow": false,
    "note": "P1 纯静态：以下参数为契约预留，当前由静态切片近似（recent=最近50、digest=近14天）。语义已冻结，未来动态后端原样支持。",
    "params": {
      "since": {
        "type": "string",
        "format": "ISO8601",
        "description": "时间窗起点（含），按 fetchedAt 过滤。P1 未实现。"
      },
      "category": {
        "type": "string",
        "enum": [
          "social",
          "research"
        ],
        "description": "内容分类枚举。P1 未实现。"
      },
      "module": {
        "type": "string",
        "enum": [
          "reports",
          "orgs",
          "social",
          "podcast"
        ],
        "supportedNow": true,
        "description": "内容模块维度（reports/orgs/social/podcast）。静态切片已支持：见 /v1/modules/{module}/。归属与站内 board 逻辑一致。"
      },
      "limit": {
        "type": "integer",
        "default": 50,
        "description": "返回条数上限。P1 固定切片。"
      },
      "cursor": {
        "type": "string",
        "description": "分页游标（不透明）。P1 保留位、不实现。"
      }
    }
  }
}
