{
  "added_at": "2026-11-08",
  "additional_evidence_urls": [
    "https://github.com/noerdk/zwift-api/blob/ebd4869b617e1eaf7d023a6366fef2d06cc3bda1/CONTRIBUTING.md"
  ],
  "category": "reconstruction-cases",
  "class": "game",
  "description_en": "zwift-api maps selected private Zwift HTTP data interfaces and implements a read-only Node client for profile, achievements, events, quests and catalogue data. Its documentation records proxy-captured endpoints and protobuf wire decoding without schemas. The author reports that epic-challenge progress travels over a realtime UDP path rather than the mapped HTTP endpoints.",
  "description_zh": "zwift-api 梳理 Zwift 的部分私有 HTTP 数据接口，并实现读取个人资料、成就、活动、任务和目录数据的只读 Node 客户端。项目记录代理抓包得到的端点，并在没有 schema 的情况下解析 protobuf 字段。作者报告史诗挑战进度经实时 UDP 路径传输，而非已整理的 HTTP 端点。",
  "entry_url": "https://awesomerea.org/resources/zwift-api-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/zwift-api-case/",
  "evidence_class": 2,
  "evidence_status": "observed",
  "evidence_url": "https://github.com/noerdk/zwift-api/blob/ebd4869b617e1eaf7d023a6366fef2d06cc3bda1/README.md",
  "group": "cases",
  "id": "zwift-api-case",
  "json_url": "https://awesomerea.org/resources/zwift-api-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/zwift-api-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/zwift-api-case/index.md",
  "name": "zwift-api: mapping Zwift's private data endpoints",
  "name_zh": "zwift-api：梳理 Zwift 私有数据接口",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirement_facets": [
    "prerequisites",
    "limits",
    "license"
  ],
  "requirements": [
    "Node.js 18 or later; account endpoints require the user's Zwift credentials.",
    "The client is read-only; epic-challenge progress is outside its HTTP endpoint coverage.",
    "MIT license."
  ],
  "requirements_zh": [
    "需要 Node.js 18 或更高版本；账户接口需要用户自己的 Zwift 凭据。",
    "客户端仅提供读取操作；史诗挑战进度不在其 HTTP 接口覆盖范围内。",
    "MIT 许可证。"
  ],
  "scope": "unknown",
  "targets": [
    "protocol"
  ],
  "url": "https://github.com/noerdk/zwift-api",
  "verification": "source-reviewed",
  "verified_at": "2026-11-08"
}
