{"openapi":"3.1.0","info":{"title":"化工社 API","version":"1.0.0"},"paths":{"/api/stats":{"get":{"tags":["chemistry"],"summary":"Stats","operationId":"stats_api_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/config":{"get":{"tags":["chemistry"],"summary":"Public Config","description":"公开系统配置，供前端 layout 动态渲染。","operationId":"public_config_api_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/search":{"get":{"tags":["chemistry"],"summary":"统一查询化合物和反应","description":"One entry point for names, external identifiers, SMILES and structures.","operationId":"search_chemistry_data","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4000,"title":"Q"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(exact|substructure|similarity)$","default":"exact","title":"Mode"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chemicals/{chemical_id}":{"get":{"tags":["chemistry"],"summary":"读取一个化合物记录","operationId":"get_chemical","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"Chemical Id"}},{"name":"enrich","in":"query","required":false,"schema":{"type":"string","pattern":"^(core|full)$","default":"core","title":"Enrich"}},{"name":"display","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Display"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chemicals/{chemical_id}/synonyms":{"get":{"tags":["chemistry"],"summary":"Chemical Synonyms","operationId":"chemical_synonyms_api_chemicals__chemical_id__synonyms_get","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"Chemical Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chemicals/{chemical_id}/reactions":{"get":{"tags":["chemistry"],"summary":"Chemical Reactions","operationId":"chemical_reactions_api_chemicals__chemical_id__reactions_get","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","title":"Chemical Id"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","pattern":"^(any|reactant|reagent|solvent|catalyst|product)$","default":"any","title":"Role"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chemicals/{chemical_id}/substructure":{"get":{"tags":["chemistry"],"summary":"Chemical Substructure","operationId":"chemical_substructure_api_chemicals__chemical_id__substructure_get","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"Chemical Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chemicals/{chemical_id}/similarity":{"get":{"tags":["chemistry"],"summary":"Chemical Similarity","operationId":"chemical_similarity_api_chemicals__chemical_id__similarity_get","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"Chemical Id"}},{"name":"threshold","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.4,"default":0.7,"title":"Threshold"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reactions/{reaction_id}":{"get":{"tags":["chemistry"],"summary":"读取一个反应记录","operationId":"get_reaction","parameters":[{"name":"reaction_id","in":"path","required":true,"schema":{"type":"integer","title":"Reaction Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["reactions"],"summary":"Update Reaction","operationId":"update_reaction_api_reactions__reaction_id__put","parameters":[{"name":"reaction_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Reaction Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["reactions"],"summary":"Delete Reaction","operationId":"delete_reaction_api_reactions__reaction_id__delete","parameters":[{"name":"reaction_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Reaction Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datasets":{"get":{"tags":["chemistry"],"summary":"Datasets","operationId":"datasets_api_datasets_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sitemap/reactions":{"get":{"tags":["chemistry"],"summary":"Sitemap Reactions","description":"Keyset-paginated public reaction IDs for sitemap generation.","operationId":"sitemap_reactions_api_sitemap_reactions_get","parameters":[{"name":"after_id","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"After Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":50000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-guide":{"get":{"tags":["agent"],"summary":"连接化工社并读取 AI 可用操作","description":"Return the complete, bounded operation guide; a Bearer token also confirms its owner.","operationId":"get_agent_connection_guide","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mol/{chemical_id}/svg":{"get":{"tags":["molecule"],"summary":"Render Molecule","description":"Render a chemical structure to SVG by HCID.\n\nCaching is handled entirely by Cloudflare (immutable) — no Redis layer\nto avoid write-only keys from crawler traffic hitting unique URLs.","operationId":"render_molecule_api_mol__chemical_id__svg_get","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","title":"Chemical Id"}},{"name":"w","in":"query","required":false,"schema":{"type":"integer","default":400,"title":"W"}},{"name":"h","in":"query","required":false,"schema":{"type":"integer","default":300,"title":"H"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reactions/{reaction_id}/svg":{"get":{"tags":["molecule"],"summary":"Render Reaction","description":"Render the stored reaction expression by stable reaction ID.\n\nCaching is handled entirely by Cloudflare (immutable for public) — no Redis\nlayer to avoid write-only keys from crawler traffic hitting unique URLs.","operationId":"render_reaction_api_reactions__reaction_id__svg_get","parameters":[{"name":"reaction_id","in":"path","required":true,"schema":{"type":"integer","title":"Reaction Id"}},{"name":"w","in":"query","required":false,"schema":{"type":"integer","default":1200,"title":"W"}},{"name":"h","in":"query","required":false,"schema":{"type":"integer","default":300,"title":"H"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chemicals/{chemical_id}/details":{"get":{"tags":["enrichment"],"summary":"Chemical Details","operationId":"chemical_details_api_chemicals__chemical_id__details_get","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","title":"Chemical Id"}},{"name":"sections","in":"query","required":false,"schema":{"type":"string","maxLength":200,"default":"computed,identifiers","title":"Sections"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/enrichment/jobs/{job_id}":{"get":{"tags":["enrichment"],"summary":"Enrichment Job","operationId":"enrichment_job_api_enrichment_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","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/auth/check-username":{"get":{"tags":["users"],"summary":"Check Username","description":"注册时实时校验用户名是否可用。","operationId":"check_username_api_auth_check_username_get","parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","minLength":4,"maxLength":30,"title":"Username"}}],"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":["users"],"summary":"Register","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["users"],"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"tags":["users"],"summary":"Logout","operationId":"logout_api_auth_logout_post","parameters":[{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me":{"get":{"tags":["users"],"summary":"Me","operationId":"me_api_users_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["users"],"summary":"Update Profile","operationId":"update_profile_api_users_me_patch","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/dashboard":{"get":{"tags":["users"],"summary":"Dashboard Summary","operationId":"dashboard_summary_api_users_me_dashboard_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/password":{"post":{"tags":["users"],"summary":"Change Password","operationId":"change_password_api_users_me_password_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordBody"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/avatar":{"post":{"tags":["users"],"summary":"Upload Avatar","operationId":"upload_avatar_api_users_me_avatar_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_avatar_api_users_me_avatar_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/tokens":{"get":{"tags":["users"],"summary":"List Tokens","operationId":"list_tokens_api_users_me_tokens_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create Token","operationId":"create_token_api_users_me_tokens_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/tokens/{token_id}":{"delete":{"tags":["users"],"summary":"Revoke Token","operationId":"revoke_token_api_users_me_tokens__token_id__delete","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{username}":{"get":{"tags":["users"],"summary":"Public Profile","operationId":"public_profile_api_users__username__get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{username}/followers":{"get":{"tags":["users"],"summary":"Public Followers","operationId":"public_followers_api_users__username__followers_get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":40,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{username}/following":{"get":{"tags":["users"],"summary":"Public Following","operationId":"public_following_api_users__username__following_get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":40,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reactions/validate":{"post":{"tags":["reactions"],"summary":"校验并标准化反应草稿","operationId":"validate_reaction","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reactions":{"post":{"tags":["reactions"],"summary":"保存用户确认的反应记录","operationId":"create_reaction","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactionBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/reactions":{"get":{"tags":["reactions"],"summary":"读取当前用户自己的反应记录","operationId":"list_my_reactions","parameters":[{"name":"visibility","in":"query","required":false,"schema":{"enum":["all","public","private"],"type":"string","default":"all","title":"Visibility"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{username}/reactions":{"get":{"tags":["reactions"],"summary":"User Reactions","operationId":"user_reactions_api_users__username__reactions_get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{username}/follow":{"post":{"tags":["follows"],"summary":"Follow User","operationId":"follow_user_api_users__username__follow_post","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["follows"],"summary":"Unfollow User","operationId":"unfollow_user_api_users__username__follow_delete","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chemicals/{chemical_id}/follow":{"post":{"tags":["follows"],"summary":"Follow Chemical","operationId":"follow_chemical_api_chemicals__chemical_id__follow_post","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","title":"Chemical Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["follows"],"summary":"Unfollow Chemical","operationId":"unfollow_chemical_api_chemicals__chemical_id__follow_delete","parameters":[{"name":"chemical_id","in":"path","required":true,"schema":{"type":"integer","title":"Chemical Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reactions/{reaction_id}/follow":{"post":{"tags":["follows"],"summary":"Follow Reaction","operationId":"follow_reaction_api_reactions__reaction_id__follow_post","parameters":[{"name":"reaction_id","in":"path","required":true,"schema":{"type":"integer","title":"Reaction Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["follows"],"summary":"Unfollow Reaction","operationId":"unfollow_reaction_api_reactions__reaction_id__follow_delete","parameters":[{"name":"reaction_id","in":"path","required":true,"schema":{"type":"integer","title":"Reaction Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/follows/chemicals":{"get":{"tags":["follows"],"summary":"Followed Chemicals","operationId":"followed_chemicals_api_users_me_follows_chemicals_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":40,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/follows/reactions":{"get":{"tags":["follows"],"summary":"Followed Reactions","operationId":"followed_reactions_api_users_me_follows_reactions_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":40,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/notifications":{"get":{"tags":["follows"],"summary":"Notifications","operationId":"notifications_api_users_me_notifications_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/notifications/read":{"post":{"tags":["follows"],"summary":"Read Notifications","operationId":"read_notifications_api_users_me_notifications_read_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"hgs_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hgs Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health":{"get":{"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_upload_avatar_api_users_me_avatar_post":{"properties":{"image":{"type":"string","contentMediaType":"application/octet-stream","title":"Image"}},"type":"object","required":["image"],"title":"Body_upload_avatar_api_users_me_avatar_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LoginBody":{"properties":{"account":{"type":"string","maxLength":254,"minLength":1,"title":"Account"},"password":{"type":"string","maxLength":128,"minLength":1,"title":"Password"}},"type":"object","required":["account","password"],"title":"LoginBody"},"ParticipantBody":{"properties":{"role":{"type":"string","enum":["REACTANT","REAGENT","CATALYST","SOLVENT","PRODUCT"],"title":"Role"},"smiles":{"type":"string","maxLength":4000,"minLength":1,"title":"Smiles"},"occurrence_count":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Occurrence Count","default":1},"amount_value":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Amount Value"},"amount_unit":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Amount Unit"},"equivalents":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Equivalents"},"concentration_value":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Concentration Value"},"concentration_unit":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Concentration Unit"},"yield_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Yield Percent"}},"type":"object","required":["role","smiles"],"title":"ParticipantBody"},"PasswordBody":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"},"confirm_password":{"type":"string","maxLength":128,"minLength":8,"title":"Confirm Password"}},"type":"object","required":["current_password","new_password","confirm_password"],"title":"PasswordBody"},"ProfileBody":{"properties":{"display_name":{"type":"string","maxLength":80,"minLength":1,"title":"Display Name"},"bio":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bio"},"email":{"type":"string","maxLength":200,"minLength":3,"title":"Email"},"location":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Location"},"institution":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Institution"},"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"website":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Website"},"orcid":{"anyOf":[{"type":"string","maxLength":19},{"type":"null"}],"title":"Orcid"}},"type":"object","required":["display_name","email"],"title":"ProfileBody"},"ReactionBody":{"properties":{"visibility":{"type":"string","enum":["public","private"],"title":"Visibility"},"participants":{"items":{"$ref":"#/components/schemas/ParticipantBody"},"type":"array","maxItems":100,"minItems":2,"title":"Participants"},"procedure_details":{"anyOf":[{"type":"string","maxLength":30000},{"type":"null"}],"title":"Procedure Details"},"conditions_detail":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Conditions Detail"},"temperature_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature Value"},"temperature_unit":{"anyOf":[{"type":"string","enum":["CELSIUS","KELVIN"]},{"type":"null"}],"title":"Temperature Unit"},"duration_value":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Duration Value"},"duration_unit":{"anyOf":[{"type":"string","enum":["MINUTE","HOUR","DAY"]},{"type":"null"}],"title":"Duration Unit"},"ph":{"anyOf":[{"type":"number","maximum":14.0,"minimum":0.0},{"type":"null"}],"title":"Ph"},"atmosphere":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Atmosphere"},"pressure_value":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Pressure Value"},"pressure_unit":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Pressure Unit"},"workup_details":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Workup Details"},"safety_notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Safety Notes"},"source_type":{"type":"string","enum":["self","doi","patent","database","url","other"],"title":"Source Type"},"doi":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Doi"},"patent":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Patent"},"source_url":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Source Url"},"source_citation":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Source Citation"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Note"}},"type":"object","required":["visibility","participants","source_type"],"title":"ReactionBody"},"RegisterBody":{"properties":{"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"confirm_password":{"type":"string","maxLength":128,"minLength":8,"title":"Confirm Password"}},"type":"object","required":["username","email","password","confirm_password"],"title":"RegisterBody"},"TokenBody":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"expires_in_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Expires In Days"}},"type":"object","required":["name"],"title":"TokenBody"},"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"}}}}