{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/wecom/callback":{"get":{"summary":"Verify","operationId":"verify_wecom_callback_get","parameters":[{"name":"msg_signature","in":"query","required":true,"schema":{"type":"string","title":"Msg Signature"}},{"name":"timestamp","in":"query","required":true,"schema":{"type":"string","title":"Timestamp"}},{"name":"nonce","in":"query","required":true,"schema":{"type":"string","title":"Nonce"}},{"name":"echostr","in":"query","required":true,"schema":{"type":"string","title":"Echostr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Callback","operationId":"callback_wecom_callback_post","parameters":[{"name":"msg_signature","in":"query","required":true,"schema":{"type":"string","title":"Msg Signature"}},{"name":"timestamp","in":"query","required":true,"schema":{"type":"string","title":"Timestamp"}},{"name":"nonce","in":"query","required":true,"schema":{"type":"string","title":"Nonce"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthz":{"get":{"summary":"Health","operationId":"health_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/export/download":{"get":{"summary":"Export Download","description":"导出 Excel 的公网下载端点。\n\n新方式：d=下载ID，从 manifest 查回文件名（ID 不可猜即鉴权，链接不含文件名/裸&）。\n旧方式兜底：t=EXPORT_TOKEN & f=文件名（过渡兼容）。\n安全：文件名仅取 basename，禁止路径穿越。","operationId":"export_download_export_download_get","parameters":[{"name":"d","in":"query","required":false,"schema":{"type":"string","default":"","title":"D"}},{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}},{"name":"f","in":"query","required":false,"schema":{"type":"string","default":"","title":"F"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"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"}}}}