{"openapi":"3.1.0","info":{"title":"Aly QC","description":"中转站六大质检统一入口（真伪 / 能力 / 协议 / 计费 / 性能 / 稳定）","version":"0.4.0"},"paths":{"/":{"get":{"summary":"Index","description":"离线首页：不加载任何外部资源。\n\nQC_DEV_PREFILL_TOKEN 只在本机演示时使用，生产必须留空。","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/api/meta":{"get":{"summary":"Meta","operationId":"meta_api_meta_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Meta Api Meta Get"}}}}}}},"/api/models":{"get":{"summary":"Models","description":"用调用者自己的 Key 拉模型列表，给前端下拉用。\n\n这是便利接口，不是检测接口：拿不到列表时前端仍允许手填模型名，\n所以失败也返回 200 + ok=false，不抛错打断用户。","operationId":"models_api_models_get","parameters":[{"name":"base_url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Base Url"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Api Key"}},{"name":"protocol","in":"query","required":false,"schema":{"enum":["anthropic","openai","gemini"],"type":"string","default":"openai","title":"Protocol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Models Api Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/detect":{"post":{"summary":"Detect","operationId":"detect_api_detect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Detect Api Detect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/detect/stream":{"post":{"summary":"Detect Stream","description":"边跑边推：每完成一项探针就推一条，最后推整份报告。\n\n门禁与地址校验在开流之前完成，失败仍返回普通 JSON 错误（不是 200 的事件流）。","operationId":"detect_stream_api_detect_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DetectRequest":{"properties":{"base_url":{"type":"string","title":"Base Url","description":"被测端点；留空则用配置里的默认站点（主站）","default":""},"api_key":{"type":"string","title":"Api Key","description":"被测端点的 Key；只在内存中使用，不落盘"},"model":{"type":"string","title":"Model","description":"声明要检测的模型名"},"protocol":{"type":"string","enum":["anthropic","openai","gemini"],"title":"Protocol","default":"openai"},"client":{"type":"string","enum":["api","claude_code"],"title":"Client","description":"客户端身份：api 直连，或伪装 Claude Code（只对仅限 CC 的分组有意义）","default":"api"},"mode":{"type":"string","enum":["quick","standard","full"],"title":"Mode","default":"standard"},"layers":{"items":{"type":"string"},"type":"array","title":"Layers"},"captcha_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Captcha Token","description":"public 档必填"},"timeout_seconds":{"type":"integer","title":"Timeout Seconds","default":300}},"type":"object","required":["api_key","model"],"title":"DetectRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}