{
  "added_at": "2026-11-09",
  "category": "reconstruction-cases",
  "class": "website",
  "description_en": "tutti-api reconstructs client access to the tutti.ch private API in TypeScript, covering search filters, listings, seller profiles, messaging, and Auth0 login. Its documentation identifies inferred request constraints, a captured Android client header set, session-token exchange, and NDJSON chat streams.",
  "description_zh": "tutti-api 用 TypeScript 重建 tutti.ch 私有 API 的客户端访问，涵盖筛选搜索、商品信息、卖家资料、消息和 Auth0 登录。项目文档记录了推断的请求约束、抓取的 Android 客户端请求头、会话令牌交换及 NDJSON 聊天流。",
  "entry_url": "https://awesomerea.org/resources/tutti-api-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/tutti-api-case/",
  "evidence_url": "https://github.com/filippofinke/tutti-api/blob/976f348c2799b676b9a63d9f92feffeac8b740cb/README.md",
  "group": "cases",
  "id": "tutti-api-case",
  "json_url": "https://awesomerea.org/resources/tutti-api-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/tutti-api-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/tutti-api-case/index.md",
  "name": "tutti-api: reconstructing a tutti.ch private API client",
  "name_zh": "tutti-api：重建 tutti.ch 私有 API 客户端",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirement_facets": [
    "prerequisites",
    "prerequisites",
    "limits",
    "license"
  ],
  "requirements": [
    "Node.js 18 or later, or a browser.",
    "Messaging requires an authenticated session; full login uses a captcha provider.",
    "Most filter element shapes are inferred; location and interval payloads need comparison with live traffic.",
    "MIT license."
  ],
  "requirements_zh": [
    "需要 Node.js 18 或更高版本，或浏览器环境。",
    "消息功能需要已认证的会话；完整登录使用验证码处理组件。",
    "大多数筛选条件元素的结构为推断所得；位置和区间参数仍需与实际请求流量对照。",
    "采用 MIT 许可证。"
  ],
  "targets": [
    "website"
  ],
  "url": "https://github.com/filippofinke/tutti-api",
  "verification": "source-reviewed",
  "verified_at": "2026-11-07"
}
