{"openapi":"3.1.0","info":{"title":"data-hub","description":"可扩展的数据 API 平台。API key 鉴权(X-API-Key)+ 按 key 限流。","version":"0.14.0"},"paths":{"/v1/news":{"get":{"tags":["news"],"summary":"查询新闻联播(简单查询,可贴链接)","operationId":"query_news_v1_news_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"全文检索;整体作为一个精确短语(空格按字面,不拆词)。需要多词 AND/OR 用 POST /news/search。有 q 时默认返回命中片段 snippet,要整段正文请在 fields 带上 content","title":"Q"},"description":"全文检索;整体作为一个精确短语(空格按字面,不拆词)。需要多词 AND/OR 用 POST /news/search。有 q 时默认返回命中片段 snippet,要整段正文请在 fields 带上 content"},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"仅按标题模糊匹配","title":"Title"},"description":"仅按标题模糊匹配"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"起始日期(含)","title":"Start Date"},"description":"起始日期(含)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"结束日期(含)","title":"End Date"},"description":"结束日期(含)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"字段投影,逗号分隔。可选:id,news_date,title,url,content,created_at,updated_at","title":"Fields"},"description":"字段投影,逗号分隔。可选:id,news_date,title,url,content,created_at,updated_at"},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"按时间粒度聚合计数:year|month|day。给定时返回 {group_by,total,buckets},忽略分页/排序/fields","title":"Group By"},"description":"按时间粒度聚合计数:year|month|day。给定时返回 {group_by,total,buckets},忽略分页/排序/fields"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段:news_date,created_at,id","default":"news_date","title":"Order By"},"description":"排序字段:news_date,created_at,id"},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"排序方向","default":"desc","title":"Order Dir"},"description":"排序方向"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"每页条数(1-500)","default":50,"title":"Limit"},"description":"每页条数(1-500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"偏移量","default":0,"title":"Offset"},"description":"偏移量"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/news/search":{"post":{"tags":["news"],"summary":"结构化查询(多词 AND/OR/精确短语)","operationId":"search_news_v1_news_search_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/news/stats/daily":{"get":{"tags":["news"],"summary":"某天的新闻条数","operationId":"daily_count_v1_news_stats_daily_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"日期","title":"Date"},"description":"日期"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/news/{news_id}":{"get":{"tags":["news"],"summary":"按 ID 取单条新闻","operationId":"get_one_v1_news__news_id__get","parameters":[{"name":"news_id","in":"path","required":true,"schema":{"type":"integer","title":"News Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/yc/companies":{"get":{"tags":["yc"],"summary":"查询 YC 公司(轻量、可链接)","operationId":"list_companies_v1_yc_companies_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"单一精确短语检索(空格按字面)","title":"Q"},"description":"单一精确短语检索(空格按字面)"},{"name":"batch","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"含该标签,如 AI","title":"Tag"},"description":"含该标签,如 AI"},{"name":"batch_year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch Year From"}},{"name":"batch_year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch Year To"}},{"name":"is_hiring","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hiring"}},{"name":"top_company","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Top Company"}},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"聚合维度,逗号分隔 ≤2 维","title":"Group By"},"description":"聚合维度,逗号分隔 ≤2 维"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"投影,可选:['id', 'slug', 'name', 'batch', 'batch_year', 'batch_season', 'status', 'one_liner', 'long_description', 'industry', 'subindustry', 'tags', 'regions', 'all_locations', 'team_size', 'is_hiring', 'top_company', 'nonprofit', 'stage', 'launched_date', 'website', 'yc_url', 'year_founded', 'city', 'country', 'cb_url', 'github_url', 'linkedin_url', 'twitter_url', 'fb_url', 'group_partner', 'former_names']","title":"Fields"},"description":"投影,可选:['id', 'slug', 'name', 'batch', 'batch_year', 'batch_season', 'status', 'one_liner', 'long_description', 'industry', 'subindustry', 'tags', 'regions', 'all_locations', 'team_size', 'is_hiring', 'top_company', 'nonprofit', 'stage', 'launched_date', 'website', 'yc_url', 'year_founded', 'city', 'country', 'cb_url', 'github_url', 'linkedin_url', 'twitter_url', 'fb_url', 'group_partner', 'former_names']"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","default":"batch_year","title":"Order By"}},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order Dir"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Companies V1 Yc Companies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/yc/companies/search":{"post":{"tags":["yc"],"summary":"结构化查询 YC 公司(复杂筛选 / 聚合)","operationId":"search_companies_v1_yc_companies_search_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/YcSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Companies V1 Yc Companies Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/yc/companies/{slug}":{"get":{"tags":["yc"],"summary":"单个 YC 公司全字段 + 创始人","operationId":"get_company_v1_yc_companies__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Company V1 Yc Companies  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/yc/founders":{"get":{"tags":["yc"],"summary":"检索 YC 创始人(bio 全文 + 公司过滤)","operationId":"list_founders_v1_yc_founders_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"姓名 / bio 精确短语检索","title":"Q"},"description":"姓名 / bio 精确短语检索"},{"name":"batch","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"}},{"name":"batch_year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch Year From"}},{"name":"batch_year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch Year To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Founders V1 Yc Founders Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/policy":{"get":{"tags":["policy"],"summary":"查询政策文件(轻量、可链接)","operationId":"query_policy_v1_policy_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"全文检索;整体作为一个精确短语(空格按字面,不拆词)。多词 AND/OR 用 POST /policy/search。有 q 时默认返回命中片段 snippet,要整段正文请在 fields 带上 content","title":"Q"},"description":"全文检索;整体作为一个精确短语(空格按字面,不拆词)。多词 AND/OR 用 POST /policy/search。有 q 时默认返回命中片段 snippet,要整段正文请在 fields 带上 content"},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"仅按标题模糊匹配","title":"Title"},"description":"仅按标题模糊匹配"},{"name":"pcode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"发文字号精确匹配(如 国发〔2026〕15号)","title":"Pcode"},"description":"发文字号精确匹配(如 国发〔2026〕15号)"},{"name":"doctype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"文种:国发|国办发|国函|国办函|…","title":"Doctype"},"description":"文种:国发|国办发|国函|国办函|…"},{"name":"org","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"发文机关精确匹配(如 国务院)","title":"Org"},"description":"发文机关精确匹配(如 国务院)"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"主题分类顶层(如 综合政务)","title":"Theme"},"description":"主题分类顶层(如 综合政务)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"发布日期起(含)","title":"Start Date"},"description":"发布日期起(含)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"发布日期止(含)","title":"End Date"},"description":"发布日期止(含)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"字段投影,逗号分隔。可选:id,source_id,title,url,pcode,doc_type,puborg,pub_date,write_date,theme,theme_top,index_no,summary,content,withdrawn,created_at,updated_at","title":"Fields"},"description":"字段投影,逗号分隔。可选:id,source_id,title,url,pcode,doc_type,puborg,pub_date,write_date,theme,theme_top,index_no,summary,content,withdrawn,created_at,updated_at"},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"聚合维度,逗号分隔 ≤2 维。可选:year,month,doctype,org,theme。给定时返回 {group_by,total,buckets},忽略分页/排序/fields","title":"Group By"},"description":"聚合维度,逗号分隔 ≤2 维。可选:year,month,doctype,org,theme。给定时返回 {group_by,total,buckets},忽略分页/排序/fields"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段:pub_date,write_date,id","default":"pub_date","title":"Order By"},"description":"排序字段:pub_date,write_date,id"},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"排序方向","default":"desc","title":"Order Dir"},"description":"排序方向"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"每页条数(1-500)","default":50,"title":"Limit"},"description":"每页条数(1-500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"偏移量","default":0,"title":"Offset"},"description":"偏移量"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Query Policy V1 Policy Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/policy/search":{"post":{"tags":["policy"],"summary":"结构化查询政策文件(多词 AND/OR/短语 + 复杂筛选/聚合)","operationId":"search_policy_v1_policy_search_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicySearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Policy V1 Policy Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/policy/{doc_id}":{"get":{"tags":["policy"],"summary":"按 ID 取单条政策全文","operationId":"get_one_v1_policy__doc_id__get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"integer","title":"Doc Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get One V1 Policy  Doc Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/opinion":{"get":{"tags":["opinion"],"summary":"查询人民日报评论(轻量、可链接;不含全文,见 fields 白名单)","operationId":"query_opinion_v1_opinion_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"全文检索(标题+提要+正文定位);整体作为一个精确短语。命中返回 snippet 片段;全文不对外输出,正文请走 url 原文链接","title":"Q"},"description":"全文检索(标题+提要+正文定位);整体作为一个精确短语。命中返回 snippet 片段;全文不对外输出,正文请走 url 原文链接"},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"申论主题(slug 或中文名,目录见 GET /v1/opinion/topics),服务端展开为同义词 OR 检索;可与 q 叠加(AND 收窄)","title":"Topic"},"description":"申论主题(slug 或中文名,目录见 GET /v1/opinion/topics),服务端展开为同义词 OR 检索;可与 q 叠加(AND 收窄)"},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"仅按标题模糊匹配","title":"Title"},"description":"仅按标题模糊匹配"},{"name":"column","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"栏目基名精确匹配(人民时评|人民论坛|评论员观察|今日谈|…)","title":"Column"},"description":"栏目基名精确匹配(人民时评|人民论坛|评论员观察|今日谈|…)"},{"name":"author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"作者精确匹配(如 彭飞)","title":"Author"},"description":"作者精确匹配(如 彭飞)"},{"name":"page_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"版面名精确匹配(如 评论)","title":"Page Name"},"description":"版面名精确匹配(如 评论)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"见报日期起(含)","title":"Start Date"},"description":"见报日期起(含)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"见报日期止(含)","title":"End Date"},"description":"见报日期止(含)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"字段投影,逗号分隔。可选:id,source_id,source,pub_date,page_no,page_name,column,column_raw,title,author,digest,excerpt,url,created_at,updated_at(提要/摘要请带 digest,excerpt)","title":"Fields"},"description":"字段投影,逗号分隔。可选:id,source_id,source,pub_date,page_no,page_name,column,column_raw,title,author,digest,excerpt,url,created_at,updated_at(提要/摘要请带 digest,excerpt)"},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"聚合维度,逗号分隔 ≤2 维。可选:year,month,day,column,author。给定时返回 {group_by,total,buckets},忽略分页/排序/fields","title":"Group By"},"description":"聚合维度,逗号分隔 ≤2 维。可选:year,month,day,column,author。给定时返回 {group_by,total,buckets},忽略分页/排序/fields"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段:pub_date,id,或 relevance(bm25 相关度,标题/提要命中加权;需文本/主题检索且词 >=3 字)","default":"pub_date","title":"Order By"},"description":"排序字段:pub_date,id,或 relevance(bm25 相关度,标题/提要命中加权;需文本/主题检索且词 >=3 字)"},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"排序方向(relevance 时忽略)","default":"desc","title":"Order Dir"},"description":"排序方向(relevance 时忽略)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"每页条数(1-500)","default":50,"title":"Limit"},"description":"每页条数(1-500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"偏移量","default":0,"title":"Offset"},"description":"偏移量"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Query Opinion V1 Opinion Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/opinion/search":{"post":{"tags":["opinion"],"summary":"结构化查询评论(多词 AND/OR/短语 + 复杂筛选/聚合)","operationId":"search_opinion_v1_opinion_search_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpinionSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Opinion V1 Opinion Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/opinion/topics":{"get":{"tags":["opinion"],"summary":"申论主题目录(词表+各主题命中篇数;主题=同义词 OR 检索的受控展开)","description":"主题目录:slug / 中文名 / 扩展词 / 库内命中篇数 / 最新见报日。\n\n注意:必须声明在 /{article_id} 之前,否则 \"topics\" 会被当成文章 id 解析。","operationId":"list_topics_v1_opinion_topics_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Topics V1 Opinion Topics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/opinion/{article_id}":{"get":{"tags":["opinion"],"summary":"按 ID 取单条(元数据+提要+摘要+原文链接,不含全文)","operationId":"get_one_v1_opinion__article_id__get","parameters":[{"name":"article_id","in":"path","required":true,"schema":{"type":"integer","title":"Article Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get One V1 Opinion  Article Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/macro":{"get":{"tags":["macro"],"summary":"查询宏观时间序列(轻量、可链接)","operationId":"query_macro_v1_macro_get","parameters":[{"name":"indicator","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"指标:NBS 码精确(如 A01010101)或指标名模糊(如 居民消费价格)。多指标用 POST /macro/search","title":"Indicator"},"description":"指标:NBS 码精确(如 A01010101)或指标名模糊(如 居民消费价格)。多指标用 POST /macro/search"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"地区:地区码或地区名精确(全国=全国 或 000000;分省如 广东)","title":"Region"},"description":"地区:地区码或地区名精确(全国=全国 或 000000;分省如 广东)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"顶层归类精确(如 价格、GDP、金融)","title":"Category"},"description":"顶层归类精确(如 价格、GDP、金融)"},{"name":"freq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"频率:monthly|quarterly|annual","title":"Freq"},"description":"频率:monthly|quarterly|annual"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"期起(含),按 period_date,格式 YYYY-MM-DD","title":"Start Date"},"description":"期起(含),按 period_date,格式 YYYY-MM-DD"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"期止(含),按 period_date,格式 YYYY-MM-DD","title":"End Date"},"description":"期止(含),按 period_date,格式 YYYY-MM-DD"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"字段投影,逗号分隔。可选:id,indicator_code,indicator_name,category,region_code,region,freq,period,period_date,value,unit,created_at,updated_at","title":"Fields"},"description":"字段投影,逗号分隔。可选:id,indicator_code,indicator_name,category,region_code,region,freq,period,period_date,value,unit,created_at,updated_at"},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"聚合维度(条数/覆盖),逗号分隔 ≤2 维。可选:indicator,code,category,region,freq,year,month。给定时返回 {group_by,total,buckets},忽略分页/排序/fields","title":"Group By"},"description":"聚合维度(条数/覆盖),逗号分隔 ≤2 维。可选:indicator,code,category,region,freq,year,month。给定时返回 {group_by,total,buckets},忽略分页/排序/fields"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段:period_date,value,id","default":"period_date","title":"Order By"},"description":"排序字段:period_date,value,id"},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"排序方向","default":"desc","title":"Order Dir"},"description":"排序方向"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"每页条数(1-500)","default":100,"title":"Limit"},"description":"每页条数(1-500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"偏移量","default":0,"title":"Offset"},"description":"偏移量"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Query Macro V1 Macro Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/macro/search":{"post":{"tags":["macro"],"summary":"结构化查询宏观序列(多指标/多地区/区间 + 二维聚合)","operationId":"search_macro_v1_macro_search_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MacroSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Macro V1 Macro Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/macro/indicators":{"get":{"tags":["macro"],"summary":"指标目录(可用指标 + 覆盖:条数/地区数/最新期)","description":"指标目录:每个(指标 × 频率)一行,口径从库内数据派生。\n\n注意:必须声明在 /{row_id} 之前,否则 \"indicators\" 会被当成 id 解析。","operationId":"list_indicators_v1_macro_indicators_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"按顶层归类过滤(如 价格)","title":"Category"},"description":"按顶层归类过滤(如 价格)"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Indicators V1 Macro Indicators Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/macro/{row_id}":{"get":{"tags":["macro"],"summary":"按 ID 取单个序列点(全字段)","operationId":"get_one_v1_macro__row_id__get","parameters":[{"name":"row_id","in":"path","required":true,"schema":{"type":"integer","title":"Row Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get One V1 Macro  Row Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metals":{"get":{"tags":["metals"],"summary":"查询金/银价格时间序列(轻量、可链接)","operationId":"query_metals_v1_metals_get","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"品种:码精确(如 Au99.99 / AU0)或品种名模糊(如 黄金)。多品种用 POST /metals/search","title":"Symbol"},"description":"品种:码精确(如 Au99.99 / AU0)或品种名模糊(如 黄金)。多品种用 POST /metals/search"},{"name":"metal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"金属大类:gold|silver","title":"Metal"},"description":"金属大类:gold|silver"},{"name":"venue","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"交易场所:SGE|SHFE","title":"Venue"},"description":"交易场所:SGE|SHFE"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"来源:sge_spot(现货)|shfe_futures(期货主连)","title":"Source"},"description":"来源:sge_spot(现货)|shfe_futures(期货主连)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"交易日起(含),按 trade_date,格式 YYYY-MM-DD","title":"Start Date"},"description":"交易日起(含),按 trade_date,格式 YYYY-MM-DD"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"交易日止(含),按 trade_date,格式 YYYY-MM-DD","title":"End Date"},"description":"交易日止(含),按 trade_date,格式 YYYY-MM-DD"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"字段投影,逗号分隔。可选:id,metal,symbol,symbol_name,venue,source,trade_date,open,high,low,close,volume,open_interest,unit,created_at,updated_at","title":"Fields"},"description":"字段投影,逗号分隔。可选:id,metal,symbol,symbol_name,venue,source,trade_date,open,high,low,close,volume,open_interest,unit,created_at,updated_at"},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"聚合维度(条数/覆盖),逗号分隔 ≤2 维。可选:metal,symbol,venue,source,year,month。给定时返回 {group_by,total,buckets},忽略分页/排序/fields","title":"Group By"},"description":"聚合维度(条数/覆盖),逗号分隔 ≤2 维。可选:metal,symbol,venue,source,year,month。给定时返回 {group_by,total,buckets},忽略分页/排序/fields"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"排序字段:trade_date,close,id","default":"trade_date","title":"Order By"},"description":"排序字段:trade_date,close,id"},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"排序方向","default":"desc","title":"Order Dir"},"description":"排序方向"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"每页条数(1-500)","default":100,"title":"Limit"},"description":"每页条数(1-500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"偏移量","default":0,"title":"Offset"},"description":"偏移量"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Query Metals V1 Metals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metals/search":{"post":{"tags":["metals"],"summary":"结构化查询金银价格(多品种/区间 + 二维聚合)","operationId":"search_metals_v1_metals_search_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetalsSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Metals V1 Metals Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metals/symbols":{"get":{"tags":["metals"],"summary":"品种目录(可用品种 + 覆盖:条数/最早/最新交易日)","description":"品种目录:每个品种一行,口径从库内数据派生。\n\n注意:必须声明在 /{row_id} 之前,否则 \"symbols\" 会被当成 id 解析。","operationId":"list_symbols_v1_metals_symbols_get","parameters":[{"name":"metal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"按金属大类过滤(gold|silver)","title":"Metal"},"description":"按金属大类过滤(gold|silver)"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Symbols V1 Metals Symbols Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metals/{row_id}":{"get":{"tags":["metals"],"summary":"按 ID 取单个价格点(全字段)","operationId":"get_one_v1_metals__row_id__get","parameters":[{"name":"row_id","in":"path","required":true,"schema":{"type":"integer","title":"Row Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get One V1 Metals  Row Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/send-code":{"post":{"tags":["portal"],"summary":"发送邮箱验证码","operationId":"send_code_portal_send_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/register":{"post":{"tags":["portal"],"summary":"注册(校验验证码)","operationId":"register_portal_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/login":{"post":{"tags":["portal"],"summary":"登录","operationId":"login_portal_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/me":{"get":{"tags":["portal"],"summary":"当前用户","operationId":"me_portal_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["portal"],"summary":"修改昵称","operationId":"update_profile_portal_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/change-password":{"post":{"tags":["portal"],"summary":"修改密码(需当前密码)","operationId":"change_password_portal_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/forgot-password":{"post":{"tags":["portal"],"summary":"忘记密码:发送重置验证码","operationId":"forgot_password_portal_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/reset-password":{"post":{"tags":["portal"],"summary":"用验证码重置密码","operationId":"reset_password_portal_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/pageviews":{"get":{"tags":["portal"],"summary":"站点访问统计(近 N 天,匿名打点聚合)","description":"SEO 内容页的被访问量:总量/去重访客/逐日/Top 页面/Top 来源。\n打点采集见 main.py 的 POST /t(匿名,不存原始 IP)。","operationId":"site_pageviews_portal_pageviews_get","security":[{"HTTPBearer":[]}],"parameters":[{"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"}}}}}}},"/portal/usage":{"get":{"tags":["portal"],"summary":"我的调用用量(按天聚合)","operationId":"my_usage_portal_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/requests":{"get":{"tags":["portal"],"summary":"我的调用日志(最近优先)","description":"逐条调用日志:接口 / 时间 / 参数 / 状态 / 耗时。key_id 可选过滤单个 key。","operationId":"my_requests_portal_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portal/keys":{"get":{"tags":["portal"],"summary":"我的 API key 列表","operationId":"my_keys_portal_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/KeyInfo"},"type":"array","title":"Response My Keys Portal Keys Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["portal"],"summary":"生成新 API key","operationId":"create_key_portal_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/portal/keys/{key_id}":{"delete":{"tags":["portal"],"summary":"吊销我的 API key","operationId":"revoke_key_portal_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["meta"],"summary":"健康检查(免鉴权)","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"tags":["meta"],"summary":"平台信息","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","maxLength":100,"minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"CreateKeyRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"key 标签"}},"type":"object","required":["name"],"title":"CreateKeyRequest"},"CreatedKeyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"api_key":{"type":"string","title":"Api Key"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"rate_limit_per_min":{"type":"integer","title":"Rate Limit Per Min"},"daily_quota":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Quota"}},"type":"object","required":["id","name","api_key","key_prefix","scopes","rate_limit_per_min"],"title":"CreatedKeyResponse","description":"新建 key 的响应:明文 api_key 只此一次。"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyInfo":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"rate_limit_per_min":{"type":"integer","title":"Rate Limit Per Min"},"daily_quota":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Quota"},"revoked":{"type":"boolean","title":"Revoked"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","name","key_prefix","scopes","rate_limit_per_min","revoked","created_at","last_used_at"],"title":"KeyInfo","description":"列表里展示的 key(不含明文)。"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"MacroSearchRequest":{"properties":{"indicator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Indicator","description":"单指标:NBS 码精确,或指标名模糊"},"indicators":{"items":{"type":"string"},"type":"array","title":"Indicators","description":"多指标(任一命中,OR):各自码精确或名模糊"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","description":"单地区:地区码或地区名精确(全国=全国 或 000000)"},"regions":{"items":{"type":"string"},"type":"array","title":"Regions","description":"多地区(任一命中,OR):地区码或地区名"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"顶层归类精确匹配"},"freq":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freq","description":"频率:monthly|quarterly|annual"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"期起(含),按 period_date"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"期止(含),按 period_date"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"字段投影,可选:['id', 'indicator_code', 'indicator_name', 'category', 'region_code', 'region', 'freq', 'period', 'period_date', 'value', 'unit', 'created_at', 'updated_at']"},"group_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group By","description":"聚合维度,≤2 维交叉,可选:['indicator', 'code', 'category', 'region', 'freq', 'year', 'month']"},"order_by":{"type":"string","title":"Order By","default":"period_date"},"order_dir":{"type":"string","title":"Order Dir","default":"desc"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":100},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","title":"MacroSearchRequest","description":"POST /v1/macro/search 的结构化查询体。\n\n支持多指标 / 多地区 / 区间 / 二维聚合(指标码或名模糊均可)。"},"MessageResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"MessageResponse"},"MetalsSearchRequest":{"properties":{"symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol","description":"单品种:码精确(如 Au99.99),或品种名模糊"},"symbols":{"items":{"type":"string"},"type":"array","title":"Symbols","description":"多品种(任一命中,OR):各自码精确或名模糊"},"metal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metal","description":"金属大类:gold|silver"},"venue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Venue","description":"交易场所:SGE|SHFE"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"来源:sge_spot|shfe_futures"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"交易日起(含),按 trade_date"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"交易日止(含),按 trade_date"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"字段投影,可选:['id', 'metal', 'symbol', 'symbol_name', 'venue', 'source', 'trade_date', 'open', 'high', 'low', 'close', 'volume', 'open_interest', 'unit', 'created_at', 'updated_at']"},"group_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group By","description":"聚合维度,≤2 维交叉,可选:['metal', 'symbol', 'venue', 'source', 'year', 'month']"},"order_by":{"type":"string","title":"Order By","default":"trade_date"},"order_dir":{"type":"string","title":"Order Dir","default":"desc"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":100},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","title":"MetalsSearchRequest","description":"POST /v1/metals/search 的结构化查询体。\n\n支持多品种 / 区间 / 二维聚合(品种码精确或品种名模糊均可)。"},"NewsSearchRequest":{"properties":{"all":{"items":{"type":"string"},"type":"array","title":"All","description":"都要命中的词(AND)"},"any":{"items":{"type":"string"},"type":"array","title":"Any","description":"任一命中的词(OR)"},"phrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phrase","description":"整体精确短语(空格按字面)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"字段投影,可选:['id', 'news_date', 'title', 'url', 'content', 'created_at', 'updated_at']"},"group_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group By","description":"时间聚合:year|month|day"},"order_by":{"type":"string","title":"Order By","default":"news_date"},"order_dir":{"type":"string","title":"Order Dir","default":"desc"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":50},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","title":"NewsSearchRequest","description":"POST /v1/news/search 的结构化查询体。\n\n文本检索用三个独立字段表达,彻底避开\"空格当 AND\"的歧义:\n- ``all``:都要命中(AND)。- ``any``:任一命中(OR)。- ``phrase``:整体精确短语(空格按字面)。\n其余为通用过滤/聚合/分页,与 GET /v1/news 一致。"},"OpinionSearchRequest":{"properties":{"all":{"items":{"type":"string"},"type":"array","title":"All","description":"都要命中的词(AND)"},"any":{"items":{"type":"string"},"type":"array","title":"Any","description":"任一命中的词(OR)"},"phrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phrase","description":"整体精确短语(空格按字面)"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic","description":"申论主题(slug 或中文名,见 GET /v1/opinion/topics),服务端展开为同义词 OR 检索,与其余文本条件 AND"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column","description":"栏目基名精确匹配(如 人民时评)"},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author","description":"作者精确匹配"},"page_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Name","description":"版面名精确匹配(如 评论)"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"见报日期起(含)"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"见报日期止(含)"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"字段投影,可选:['id', 'source_id', 'source', 'pub_date', 'page_no', 'page_name', 'column', 'column_raw', 'title', 'author', 'digest', 'excerpt', 'url', 'created_at', 'updated_at']"},"group_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group By","description":"聚合维度,≤2 维交叉,可选:['year', 'month', 'day', 'column', 'author']"},"order_by":{"type":"string","title":"Order By","description":"pub_date|id|relevance(relevance=bm25 相关度,需文本/主题检索)","default":"pub_date"},"order_dir":{"type":"string","title":"Order Dir","default":"desc"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":50},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","title":"OpinionSearchRequest","description":"POST /v1/opinion/search 的结构化查询体(三单元文本检索与 news/policy 一致)。"},"PolicySearchRequest":{"properties":{"all":{"items":{"type":"string"},"type":"array","title":"All","description":"都要命中的词(AND)"},"any":{"items":{"type":"string"},"type":"array","title":"Any","description":"任一命中的词(OR)"},"phrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phrase","description":"整体精确短语(空格按字面)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"pcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pcode","description":"发文字号精确匹配"},"doctype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doctype","description":"文种:国发|国办发|国函|国办函|…"},"org":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org","description":"发文机关精确匹配"},"theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme","description":"主题分类顶层精确匹配"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"发布日期起(含)"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"发布日期止(含)"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"字段投影,可选:['id', 'source_id', 'title', 'url', 'pcode', 'doc_type', 'puborg', 'pub_date', 'write_date', 'theme', 'theme_top', 'index_no', 'summary', 'content', 'withdrawn', 'created_at', 'updated_at']"},"group_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group By","description":"聚合维度,≤2 维交叉,可选:['year', 'month', 'doctype', 'org', 'theme']"},"order_by":{"type":"string","title":"Order By","default":"pub_date"},"order_dir":{"type":"string","title":"Order Dir","default":"desc"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":50},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","title":"PolicySearchRequest","description":"POST /v1/policy/search 的结构化查询体。\n\n文本检索三单元(all=AND / any=OR / phrase=精确短语)与 news 一致;\n其余为 policy 专属过滤 + 通用聚合/投影/分页。"},"RegisterRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code"},"password":{"type":"string","maxLength":100,"minLength":8,"title":"Password"},"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"}},"type":"object","required":["email","code","password"],"title":"RegisterRequest"},"ResetPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code"},"new_password":{"type":"string","maxLength":100,"minLength":8,"title":"New Password"}},"type":"object","required":["email","code","new_password"],"title":"ResetPasswordRequest"},"SendCodeRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"SendCodeRequest"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"},"user":{"$ref":"#/components/schemas/UserInfo"}},"type":"object","required":["access_token","expires_in","user"],"title":"TokenResponse"},"UpdateProfileRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"}},"type":"object","title":"UpdateProfileRequest"},"UsageDailyPoint":{"properties":{"date":{"type":"string","title":"Date"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["date","count"],"title":"UsageDailyPoint"},"UsageKeyRow":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"count":{"type":"integer","title":"Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","name","key_prefix","count","last_used_at"],"title":"UsageKeyRow"},"UsageSummary":{"properties":{"total":{"type":"integer","title":"Total"},"today":{"type":"integer","title":"Today"},"days":{"type":"integer","title":"Days"},"daily":{"items":{"$ref":"#/components/schemas/UsageDailyPoint"},"type":"array","title":"Daily"},"by_key":{"items":{"$ref":"#/components/schemas/UsageKeyRow"},"type":"array","title":"By Key"}},"type":"object","required":["total","today","days","daily","by_key"],"title":"UsageSummary"},"UserInfo":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"is_verified":{"type":"boolean","title":"Is Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","name","is_verified","created_at"],"title":"UserInfo"},"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"},"YcSearchRequest":{"properties":{"all":{"items":{"type":"string"},"type":"array","title":"All","description":"都要命中(AND)"},"any":{"items":{"type":"string"},"type":"array","title":"Any","description":"任一命中(OR)"},"phrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phrase","description":"整体精确短语"},"batch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"subindustry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subindustry"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"group_partner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Partner"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"含该标签(如 AI)"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","description":"含该地区"},"batch_year_from":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch Year From"},"batch_year_to":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch Year To"},"team_size_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Size Min"},"team_size_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Size Max"},"is_hiring":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hiring"},"top_company":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Top Company"},"nonprofit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Nonprofit"},"group_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group By","description":"聚合维度,≤2 维交叉"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"投影,可选:['id', 'slug', 'name', 'batch', 'batch_year', 'batch_season', 'status', 'one_liner', 'long_description', 'industry', 'subindustry', 'tags', 'regions', 'all_locations', 'team_size', 'is_hiring', 'top_company', 'nonprofit', 'stage', 'launched_date', 'website', 'yc_url', 'year_founded', 'city', 'country', 'cb_url', 'github_url', 'linkedin_url', 'twitter_url', 'fb_url', 'group_partner', 'former_names']"},"order_by":{"type":"string","title":"Order By","default":"batch_year"},"order_dir":{"type":"string","title":"Order Dir","default":"desc"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":50},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","title":"YcSearchRequest","description":"POST /v1/yc/companies/search 的结构化查询体。\n\n复杂筛选 / 二维聚合 / 文本查询统一走 POST(body 表达力强、参数安全)。\nGET /v1/yc/companies 只承载轻量可链接查询。"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}