{"openapi":"3.1.0","info":{"title":"Telegram Session API","description":"管理 Telegram Session 的 API 服务","version":"2.0.0"},"paths":{"/api/sessions/key/{api_key}":{"get":{"tags":["接码"],"summary":"Key Entry","description":"接码链接入口：默认 HTML 接码页；?format=json 等价 GetJSON；?proxy=名称/auto 指定代理","operationId":"key_entry_api_sessions_key__api_key__get","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Format"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"proxy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/key/{api_key}/GetHTML":{"get":{"tags":["接码"],"summary":"Key Get Html","operationId":"key_get_html_api_sessions_key__api_key__GetHTML_get","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"proxy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/key/{api_key}/GetJSON":{"get":{"tags":["接码"],"summary":"Key Get Json","operationId":"key_get_json_api_sessions_key__api_key__GetJSON_get","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"proxy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/key/{api_key}/code":{"get":{"tags":["接码"],"summary":"Key Get Code","operationId":"key_get_code_api_sessions_key__api_key__code_get","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"proxy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/register":{"post":{"tags":["认证"],"summary":"Register","description":"注册新用户","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["认证"],"summary":"Login","description":"用户登录","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_api_auth_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"tags":["认证"],"summary":"Read Users Me","description":"获取当前用户信息","operationId":"read_users_me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/page-settings":{"get":{"tags":["认证"],"summary":"Get Page Settings","description":"获取接码页配置 + 接码公开域名（客户端导出链接用）","operationId":"get_page_settings_api_auth_page_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["认证"],"summary":"Update Page Settings","description":"更新接码页配置（自定义版权 / 页面语言），显示在接码链接页面上","operationId":"update_page_settings_api_auth_page_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageSettings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/users/":{"get":{"tags":["租户管理"],"summary":"List Users","description":"获取所有租户（管理员）","operationId":"list_users_api_users__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserListResponse"},"title":"Response List Users Api Users  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["租户管理"],"summary":"Create Tenant","description":"创建租户（管理员）","operationId":"create_tenant_api_users__post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}":{"patch":{"tags":["租户管理"],"summary":"Update User","description":"更新租户（管理员）：改密码 / 启停 / 重设到期 / 最大账号数 / 版权","operationId":"update_user_api_users__user_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["租户管理"],"summary":"Delete User","description":"删除租户（连同其账号，管理员）","operationId":"delete_user_api_users__user_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}/renew":{"post":{"tags":["租户管理"],"summary":"Renew Tenant","description":"续期租户：在现有到期基础上顺延 N 天（已过期则从今天起算）","operationId":"renew_tenant_api_users__user_id__renew_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/":{"post":{"tags":["Session管理"],"summary":"Create Session","description":"创建单个 Session","operationId":"create_session_api_sessions__post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Session管理"],"summary":"Get Sessions","description":"获取当前用户的所有 Session","operationId":"get_sessions_api_sessions__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SessionResponse"},"title":"Response Get Sessions Api Sessions  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/batch":{"post":{"tags":["Session管理"],"summary":"Create Sessions Batch","description":"批量创建 Session","operationId":"create_sessions_batch_api_sessions_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionBatchCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Create Sessions Batch Api Sessions Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/batch/set-password":{"post":{"tags":["Session管理"],"summary":"Batch Set Password","description":"批量设置账号密码","operationId":"batch_set_password_api_sessions_batch_set_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionSetPassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/batch/renew":{"post":{"tags":["Session管理"],"summary":"Batch Renew Sessions","description":"批量续期（客户端“重新上传”已在服务器上的账号时调用）\n- 过期时间重置为 now + days，清除过期标记，接码链接恢复可用\n- reset_key=True：重新生成 api_key，旧接码链接立即失效","operationId":"batch_renew_sessions_api_sessions_batch_renew_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionBatchRenew"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/batch/set-proxy":{"post":{"tags":["Session管理"],"summary":"Batch Set Proxy","description":"为账号绑定代理：接码时该账号连接 Telegram 走这个代理\nproxy_name: \"\"=直连（清除绑定，按服务器默认 PROXY_DEFAULT），auto=代理池按账号自动分配，或代理名称","operationId":"batch_set_proxy_api_sessions_batch_set_proxy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionSetProxy"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/batch/check":{"post":{"tags":["Session管理"],"summary":"Batch Check","description":"批量检测账号（后台任务）：死号 / 冻结 / 双向 / 二级密码是否正确\n返回 job_id，用 GET /api/sessions/check-jobs/{job_id}?since=N 轮询进度和结果","operationId":"batch_check_api_sessions_batch_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionBatchCheck"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/check-jobs/{job_id}":{"get":{"tags":["Session管理"],"summary":"Get Check Job","description":"查询检测任务进度；since=已收到的结果数，只返回新结果","operationId":"get_check_job_api_sessions_check_jobs__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/check-jobs/{job_id}/cancel":{"post":{"tags":["Session管理"],"summary":"Cancel Check Job","description":"取消检测任务（正在检测的几个账号完成后停止）","operationId":"cancel_check_job_api_sessions_check_jobs__job_id__cancel_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/qr/start":{"post":{"tags":["Session管理"],"summary":"Qr Start","description":"扫码转API：开始一次扫码登录，返回二维码内容（tg://login?token=...），之后轮询 GET /qr/{qr_id}","operationId":"qr_start_api_sessions_qr_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QRStart"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/qr/{qr_id}":{"get":{"tags":["Session管理"],"summary":"Qr Poll","description":"轮询扫码状态：waiting（qr_url 可能刷新）/ password（要二级密码）/ success（session=建好的账号）/ error","operationId":"qr_poll_api_sessions_qr__qr_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"qr_id","in":"path","required":true,"schema":{"type":"string","title":"Qr Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Session管理"],"summary":"Qr Cancel","description":"取消 / 关闭扫码","operationId":"qr_cancel_api_sessions_qr__qr_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"qr_id","in":"path","required":true,"schema":{"type":"string","title":"Qr Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/qr/{qr_id}/password":{"post":{"tags":["Session管理"],"summary":"Qr Password","description":"扫码后账号要二级密码：提交密码","operationId":"qr_password_api_sessions_qr__qr_id__password_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"qr_id","in":"path","required":true,"schema":{"type":"string","title":"Qr Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QRPassword"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/convert-tdata":{"post":{"tags":["Session管理"],"summary":"Convert Tdata","description":"接收 tdata 压缩包（zip），转换为 Pyrogram session 字符串（不创建记录，仅返回）。\nzip 内可包含单个账号（tdata/ 在根）或多个手机号子目录（各含 tdata/）。","operationId":"convert_tdata_api_sessions_convert_tdata_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_convert_tdata_api_sessions_convert_tdata_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/{session_id}":{"get":{"tags":["Session管理"],"summary":"Get Session","description":"获取指定 Session 详情","operationId":"get_session_api_sessions__session_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Session管理"],"summary":"Delete Session","description":"删除指定 Session","operationId":"delete_session_api_sessions__session_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/batch/delete":{"delete":{"tags":["Session管理"],"summary":"Delete Sessions Batch","description":"批量删除 Session","operationId":"delete_sessions_batch_api_sessions_batch_delete_delete","requestBody":{"content":{"application/json":{"schema":{"items":{"type":"integer"},"type":"array","title":"Session Ids"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/sessions/{session_id}/renew":{"post":{"tags":["Session管理"],"summary":"Renew Session","description":"续期 Session","operationId":"renew_session_api_sessions__session_id__renew_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/clean-expired":{"post":{"tags":["Session管理"],"summary":"Clean Expired Sessions","description":"清理过期的 Session","operationId":"clean_expired_sessions_api_sessions_clean_expired_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/stats/dashboard":{"get":{"tags":["统计信息"],"summary":"Get Dashboard Stats","description":"获取仪表盘统计信息","operationId":"get_dashboard_stats_api_stats_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/stats/admin/overview":{"get":{"tags":["统计信息"],"summary":"Get Admin Overview","description":"获取管理员概览统计","operationId":"get_admin_overview_api_stats_admin_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/organize/tags":{"get":{"tags":["标签分组"],"summary":"List Tags","description":"获取所有标签","operationId":"list_tags_api_organize_tags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TagResponse"},"type":"array","title":"Response List Tags Api Organize Tags Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["标签分组"],"summary":"Create Tag","description":"创建标签","operationId":"create_tag_api_organize_tags_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/organize/tags/{tag_id}":{"delete":{"tags":["标签分组"],"summary":"Delete Tag","description":"删除标签","operationId":"delete_tag_api_organize_tags__tag_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"integer","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organize/groups":{"get":{"tags":["标签分组"],"summary":"List Groups","description":"获取所有分组","operationId":"list_groups_api_organize_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GroupResponse"},"type":"array","title":"Response List Groups Api Organize Groups Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["标签分组"],"summary":"Create Group","description":"创建分组","operationId":"create_group_api_organize_groups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/organize/groups/{group_id}":{"delete":{"tags":["标签分组"],"summary":"Delete Group","description":"删除分组","operationId":"delete_group_api_organize_groups__group_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"integer","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organize/sessions/{session_id}/tags":{"post":{"tags":["标签分组"],"summary":"Update Session Tags","description":"更新 Session 的标签","operationId":"update_session_tags_api_organize_sessions__session_id__tags_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionTagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organize/sessions/{session_id}/group":{"post":{"tags":["标签分组"],"summary":"Update Session Group","description":"更新 Session 的分组","operationId":"update_session_group_api_organize_sessions__session_id__group_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionGroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organize/groups/{group_id}/sessions":{"get":{"tags":["标签分组"],"summary":"Get Group Sessions","description":"获取分组下的所有 Session","operationId":"get_group_sessions_api_organize_groups__group_id__sessions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"integer","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organize/tags/{tag_id}/sessions":{"get":{"tags":["标签分组"],"summary":"Get Tag Sessions","description":"获取标签下的所有 Session","operationId":"get_tag_sessions_api_organize_tags__tag_id__sessions_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"integer","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/":{"get":{"tags":["Webhook通知"],"summary":"List Webhooks","description":"获取所有 Webhook 配置","operationId":"list_webhooks_api_webhooks__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WebhookResponse"},"type":"array","title":"Response List Webhooks Api Webhooks  Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Webhook通知"],"summary":"Create Webhook","description":"创建 Webhook 配置","operationId":"create_webhook_api_webhooks__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/webhooks/{webhook_id}":{"get":{"tags":["Webhook通知"],"summary":"Get Webhook","description":"获取 Webhook 详情","operationId":"get_webhook_api_webhooks__webhook_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Webhook通知"],"summary":"Update Webhook","description":"更新 Webhook 配置","operationId":"update_webhook_api_webhooks__webhook_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Webhook通知"],"summary":"Delete Webhook","description":"删除 Webhook 配置","operationId":"delete_webhook_api_webhooks__webhook_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/{webhook_id}/test":{"post":{"tags":["Webhook通知"],"summary":"Test Webhook","description":"测试 Webhook","operationId":"test_webhook_api_webhooks__webhook_id__test_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proxies/":{"get":{"tags":["代理池"],"summary":"List Proxies","description":"当前用户可用的代理：自己的 + 全局","operationId":"list_proxies_api_proxies__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["代理池"],"summary":"Create Proxy","description":"添加代理","operationId":"create_proxy_api_proxies__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/proxies/batch":{"post":{"tags":["代理池"],"summary":"Create Proxies Batch","description":"批量导入：每行一个代理，格式 url 或 名称<空格/逗号/Tab>url；# 开头的行忽略","operationId":"create_proxies_batch_api_proxies_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyBatchCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/proxies/{proxy_id}":{"patch":{"tags":["代理池"],"summary":"Update Proxy","description":"修改代理（改地址时名称不变，已导出的链接继续可用）","operationId":"update_proxy_api_proxies__proxy_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proxy_id","in":"path","required":true,"schema":{"type":"integer","title":"Proxy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["代理池"],"summary":"Delete Proxy","description":"删除代理（使用该名称的链接会提示“代理不存在”）","operationId":"delete_proxy_api_proxies__proxy_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proxy_id","in":"path","required":true,"schema":{"type":"integer","title":"Proxy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proxies/test-all":{"post":{"tags":["代理池"],"summary":"Test All Proxies","description":"测试全部可用代理（并发 10 个），返回每个的连通性","operationId":"test_all_proxies_api_proxies_test_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/proxies/{proxy_id}/test":{"post":{"tags":["代理池"],"summary":"Test Proxy","description":"测试单个代理连通性（通过代理 TCP 连接 Telegram 服务器）","operationId":"test_proxy_api_proxies__proxy_id__test_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proxy_id","in":"path","required":true,"schema":{"type":"integer","title":"Proxy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/metrics":{"get":{"summary":"Metrics","description":"Prometheus 监控指标","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/system/info":{"get":{"summary":"System Info","description":"系统信息","operationId":"system_info_api_system_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"健康检查（容器探活用，不暴露业务信息）","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_convert_tdata_api_sessions_convert_tdata_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_convert_tdata_api_sessions_convert_tdata_post"},"Body_login_api_auth_login_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"password"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login_api_auth_login_post"},"GroupCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"GroupCreate"},"GroupResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"session_count":{"type":"integer","title":"Session Count","default":0}},"type":"object","required":["id","name","description"],"title":"GroupResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PageSettings":{"properties":{"page_copyright":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Copyright"},"page_lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Lang"}},"type":"object","title":"PageSettings"},"ProxyBatchCreate":{"properties":{"lines":{"type":"string","title":"Lines"},"proxy_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Type","default":"static"},"is_global":{"type":"boolean","title":"Is Global","default":false},"name_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Prefix","default":"p"}},"type":"object","required":["lines"],"title":"ProxyBatchCreate"},"ProxyCreate":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"proxy_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Type","default":"static"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"is_global":{"type":"boolean","title":"Is Global","default":false}},"type":"object","required":["name","url"],"title":"ProxyCreate"},"ProxyUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"proxy_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Type"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ProxyUpdate"},"QRPassword":{"properties":{"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"QRPassword"},"QRStart":{"properties":{"proxy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Name"},"expire_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expire Days"}},"type":"object","title":"QRStart"},"SessionBatchCheck":{"properties":{"session_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Session Ids"},"mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode","default":"full"}},"type":"object","title":"SessionBatchCheck"},"SessionBatchCreate":{"properties":{"sessions":{"items":{"type":"string"},"type":"array","title":"Sessions"},"protocol_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol Type","default":"Telegram"},"default_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Password"},"passwords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Passwords"},"expire_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expire Days"},"proxy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Name"}},"type":"object","required":["sessions"],"title":"SessionBatchCreate"},"SessionBatchRenew":{"properties":{"session_ids":{"items":{"type":"integer"},"type":"array","title":"Session Ids"},"days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days"},"reset_key":{"type":"boolean","title":"Reset Key","default":false}},"type":"object","required":["session_ids"],"title":"SessionBatchRenew"},"SessionCreate":{"properties":{"session_string":{"type":"string","title":"Session String"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"api_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Id"},"api_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Hash"},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"protocol_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol Type","default":"Telegram"},"account_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Password"}},"type":"object","required":["session_string"],"title":"SessionCreate"},"SessionDetail":{"properties":{"id":{"type":"integer","title":"Id"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"api_key":{"type":"string","title":"Api Key"},"is_active":{"type":"boolean","title":"Is Active"},"is_expired":{"type":"boolean","title":"Is Expired"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"is_valid":{"type":"boolean","title":"Is Valid"},"protocol_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol Type"},"account_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Uuid"},"account_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Password"},"last_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Code"},"login_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Login Count","default":0},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"code_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Status"},"proxy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Name"},"check_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Status"},"twofa_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twofa Status"},"health_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Message"},"last_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Check At"},"session_string":{"type":"string","title":"Session String"},"api_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Id"},"api_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Hash"},"device_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Model"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version"}},"type":"object","required":["id","phone_number","api_key","is_active","is_expired","created_at","expires_at","last_used_at","note","is_valid","session_string","api_id","api_hash","device_model","app_version"],"title":"SessionDetail"},"SessionGroupUpdate":{"properties":{"group_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Group Id"}},"type":"object","required":["group_id"],"title":"SessionGroupUpdate"},"SessionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"api_key":{"type":"string","title":"Api Key"},"is_active":{"type":"boolean","title":"Is Active"},"is_expired":{"type":"boolean","title":"Is Expired"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"is_valid":{"type":"boolean","title":"Is Valid"},"protocol_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol Type"},"account_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Uuid"},"account_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Password"},"last_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Code"},"login_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Login Count","default":0},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"code_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Status"},"proxy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Name"},"check_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Status"},"twofa_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twofa Status"},"health_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Message"},"last_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Check At"}},"type":"object","required":["id","phone_number","api_key","is_active","is_expired","created_at","expires_at","last_used_at","note","is_valid"],"title":"SessionResponse"},"SessionSetPassword":{"properties":{"session_ids":{"items":{"type":"integer"},"type":"array","title":"Session Ids"},"password":{"type":"string","title":"Password"}},"type":"object","required":["session_ids","password"],"title":"SessionSetPassword"},"SessionSetProxy":{"properties":{"session_ids":{"items":{"type":"integer"},"type":"array","title":"Session Ids"},"proxy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Name","default":""}},"type":"object","required":["session_ids"],"title":"SessionSetProxy"},"SessionTagUpdate":{"properties":{"tag_ids":{"items":{"type":"integer"},"type":"array","title":"Tag Ids"}},"type":"object","required":["tag_ids"],"title":"SessionTagUpdate"},"TagCreate":{"properties":{"name":{"type":"string","title":"Name"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","default":"#3B82F6"}},"type":"object","required":["name"],"title":"TagCreate"},"TagResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"type":"string","title":"Color"},"session_count":{"type":"integer","title":"Session Count","default":0}},"type":"object","required":["id","name","color"],"title":"TagResponse"},"TenantCreate":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Id"},"expire_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expire Days"},"max_sessions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Sessions"},"page_copyright":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Copyright"}},"type":"object","required":["username","password"],"title":"TenantCreate"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"}},"type":"object","required":["access_token","token_type"],"title":"Token"},"UserCreate":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"customer_id":{"type":"string","title":"Customer Id"}},"type":"object","required":["username","password","customer_id"],"title":"UserCreate"},"UserListResponse":{"properties":{"id":{"type":"integer","title":"Id"},"username":{"type":"string","title":"Username"},"customer_id":{"type":"string","title":"Customer Id"},"is_active":{"type":"boolean","title":"Is Active"},"is_admin":{"type":"boolean","title":"Is Admin"},"session_count":{"type":"integer","title":"Session Count","default":0},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_expired":{"type":"boolean","title":"Is Expired","default":false},"max_sessions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Sessions"}},"type":"object","required":["id","username","customer_id","is_active","is_admin"],"title":"UserListResponse"},"UserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"username":{"type":"string","title":"Username"},"customer_id":{"type":"string","title":"Customer Id"},"is_active":{"type":"boolean","title":"Is Active"},"is_admin":{"type":"boolean","title":"Is Admin"}},"type":"object","required":["id","username","customer_id","is_active","is_admin"],"title":"UserResponse"},"UserUpdate":{"properties":{"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"expire_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expire Days"},"max_sessions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Sessions"},"page_copyright":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Copyright"}},"type":"object","title":"UserUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookCreate":{"properties":{"name":{"type":"string","title":"Name"},"webhook_type":{"$ref":"#/components/schemas/WebhookType"},"webhook_url":{"type":"string","title":"Webhook Url"},"notify_on_expired":{"type":"boolean","title":"Notify On Expired","default":true},"notify_on_unhealthy":{"type":"boolean","title":"Notify On Unhealthy","default":true},"notify_on_quota_exceeded":{"type":"boolean","title":"Notify On Quota Exceeded","default":true},"extra_params":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Extra Params"}},"type":"object","required":["name","webhook_type","webhook_url"],"title":"WebhookCreate"},"WebhookResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"webhook_type":{"type":"string","title":"Webhook Type"},"webhook_url":{"type":"string","title":"Webhook Url"},"is_active":{"type":"boolean","title":"Is Active"},"notify_on_expired":{"type":"boolean","title":"Notify On Expired"},"notify_on_unhealthy":{"type":"boolean","title":"Notify On Unhealthy"},"notify_on_quota_exceeded":{"type":"boolean","title":"Notify On Quota Exceeded"}},"type":"object","required":["id","name","webhook_type","webhook_url","is_active","notify_on_expired","notify_on_unhealthy","notify_on_quota_exceeded"],"title":"WebhookResponse"},"WebhookType":{"type":"string","enum":["dingtalk","feishu","telegram","custom"],"title":"WebhookType","description":"Webhook 类型"},"WebhookUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"notify_on_expired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify On Expired"},"notify_on_unhealthy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify On Unhealthy"},"notify_on_quota_exceeded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify On Quota Exceeded"},"extra_params":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Extra Params"}},"type":"object","title":"WebhookUpdate"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/auth/login"}}}}}}