{
  "openapi": "3.1.0",
  "info": {
    "title": "408 复习知识库检索 API",
    "version": "1.1.0",
    "description": "检索 408 笔记、真题、Relax1000、勘误及学习资料库（Code59、一休算法、正式卡片、教材转写）。所有操作只读且公开；引用返回 URL 和 source 中实际存在的版本、页码、block id。"
  },
  "servers": [
    {"url": "https://408.yuchenxu.cn"}
  ],
  "paths": {
    "/api/search": {
      "get": {
        "operationId": "search408KnowledgeBase",
        "summary": "按自然语言、关键词或 Relax1000 题号检索",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string", "maxLength": 240}, "description": "问题、关键词，或如 计组第二章 Q15"},
          {"name": "scope", "in": "query", "required": false, "schema": {"type": "string", "default": "all", "enum": ["all", "library", "code59", "yixiu", "cards", "math", "books", "lecture", "relax", "audit", "zhenti", "freq", "ds", "co", "os", "cn", "algo", "dagang", "news", "school"]}},
          {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 20, "default": 8}}
        ],
        "responses": {
          "200": {"description": "带摘要、原页链接和资料权威提示的检索结果", "content": {"application/json": {"schema": {"type": "object"}}}},
          "400": {"description": "参数错误"}
        }
      }
    },
    "/api/document": {
      "get": {
        "operationId": "read408Document",
        "summary": "回读一个站内页面或具体小节",
        "description": "公开回读 Relax1000、真题以及 ds/co/os/cn 四科正文；无需 Cookie 或 Bearer Token。",
        "parameters": [
          {"name": "path", "in": "query", "required": true, "schema": {"type": "string"}, "description": "search 结果返回的 path 或 url，可包含 #q15"},
          {"name": "max_chars", "in": "query", "required": false, "schema": {"type": "integer", "minimum": 1000, "maximum": 80000, "default": 30000}}
        ],
        "responses": {
          "200": {"description": "纯文本化的页面或小节，并附原页 URL", "content": {"application/json": {"schema": {"type": "object"}}}},
          "404": {"description": "未找到对应页面或小节"}
        }
      }
    },
    "/api/meta": {
      "get": {
        "operationId": "get408CorpusMetadata",
        "summary": "读取检索语料规模与可用范围",
        "responses": {"200": {"description": "语料元数据"}}
      }
    }
  }
}
