{"openapi":"3.1.0","info":{"title":"bridge","version":"1.0.0","description":"风控审核数据桥。把上游 1B 运营后台的订单、账变、下注等原始数据同步到 ClickHouse，并按《风控判断所需数据与后台位置清单》提供用户审核快照。只读，不对上游做任何写操作。除 /api/health 外，所有接口需要请求头 X-Api-Key。"},"servers":[{"url":"https://bridge.ws.balltl.cc"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-Api-Key"}}},"paths":{"/api/risk/users/{userId}/review-snapshot":{"get":{"operationId":"review-snapshot","summary":"用户风控审核快照","description":"需求清单 §三 的统一接口。一次返回 20 类数据源，每类带 status（SUCCESS / EMPTY / FAILED / PARTIAL / NOT_CONFIGURED）、上游来源、后台位置、拉取时间；completeness.recommendation_mode 为 AUTO_ALLOWED 或 MANUAL_REVIEW_ONLY（任一核心数据源 FAILED）。默认先对该用户做一次增量同步（60 秒内做过则跳过）再从 ClickHouse 读；库不可用时回退直连上游，data_source 与 meta.warnings 会说明。手机、卡号、IFSC、IP、邮箱在响应中脱敏。","security":[{"ApiKey":[]}],"parameters":[{"name":"userId","in":"path","required":true,"description":"上游用户 ID","schema":{"type":"integer"}},{"name":"days","in":"query","required":false,"description":"回溯窗口天数，1..180。订单、账变、下注、游戏分布都按此窗口取。","schema":{"type":"integer","default":30}},{"name":"rows","in":"query","required":false,"description":"1 含明细行，0 只返回汇总（约 40 KB）","schema":{"type":"integer","default":1,"enum":[0,1]}},{"name":"max_rows","in":"query","required":false,"description":"每类明细列表的上限，最新在前","schema":{"type":"integer","default":2000}},{"name":"sync","in":"query","required":false,"description":"0 跳过读前的增量同步，直接读库","schema":{"type":"integer","default":1,"enum":[0,1]}},{"name":"source","in":"query","required":false,"description":"live 强制直连上游，不走库","schema":{"type":"string","default":"clickhouse","enum":["clickhouse","live"]}}],"responses":{"200":{"description":"ReviewSnapshot：snapshot_id, user_id, generated_at, data_source, window, completeness, domains, sources","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"userId 不是正整数","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"缺少或错误的 X-Api-Key","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"上游没有这个用户","content":{"application/json":{"schema":{"type":"object"}}}},"502":{"description":"上游接口异常","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"服务未配置密钥，或依赖不可用","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/risk/withdraw/orders":{"get":{"operationId":"withdraw-orders","summary":"提现订单列表（按用户合并）","description":"需求清单 §一 第 1 行「待审提现订单」。返回窗口内的提现订单，并按用户合并出 order_count 与 total_amount。status 枚举尚未获平台确认，outcome 字段按环境变量推断。","security":[{"ApiKey":[]}],"parameters":[{"name":"days","in":"query","required":false,"description":"回溯天数，1..32（上游单次查询上限）","schema":{"type":"integer","default":1}},{"name":"status","in":"query","required":false,"description":"按上游 status 数值本地过滤","schema":{"type":"integer"}},{"name":"user_id","in":"query","required":false,"description":"只看某个用户","schema":{"type":"integer"}}],"responses":{"200":{"description":"window, count, truncated, orders[], by_user[]","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"缺少或错误的 X-Api-Key","content":{"application/json":{"schema":{"type":"object"}}}},"502":{"description":"上游接口异常","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/health":{"get":{"operationId":"health","summary":"健康检查","description":"进程存活、上游登录、ClickHouse 连通。任一失败返回 503。不需要密钥。","security":[],"parameters":[],"responses":{"200":{"description":"{ ok: true, upstream, clickhouse, time }","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"{ ok: false, ... } 并带 error 说明","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/sync/global":{"get":{"operationId":"sync-global-get","summary":"全局同步游标","description":"查看全局订单列表、风控日志、支付风控名单的同步游标与上次同步时间（上游时区 UTC+5:30）。","security":[{"ApiKey":[]}],"parameters":[],"responses":{"200":{"description":"{ states: [{ source, scope, cursor, last_synced_at, rows, note }] }","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"ClickHouse 未配置","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"operationId":"sync-global-post","summary":"立即运行全局同步","description":"拉取全局订单列表（按创建时间游标增量，72 小时重叠）、风控处理日志、支付风控名单。","security":[{"ApiKey":[]}],"parameters":[{"name":"backfillDays","in":"query","required":false,"description":"首次运行的回溯天数","schema":{"type":"integer","default":60}},{"name":"overlapHours","in":"query","required":false,"description":"重叠回拉小时数","schema":{"type":"integer","default":72}},{"name":"reset","in":"query","required":false,"description":"1 忽略游标，按 backfillDays 全量重拉","schema":{"type":"integer","enum":[0,1]}}],"responses":{"200":{"description":"{ ok: true, results[] }","content":{"application/json":{"schema":{"type":"object"}}}},"207":{"description":"部分失败，results[] 内有 error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/sync/users/{userId}":{"get":{"operationId":"sync-user-get","summary":"单用户同步游标","description":"该用户各数据源（账变、Gullak、下注等）的游标与上次同步时间。","security":[{"ApiKey":[]}],"parameters":[{"name":"userId","in":"path","required":true,"description":"上游用户 ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"{ user_id, states[] }","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"operationId":"sync-user-post","summary":"立即同步单个用户","description":"拉取该用户的明细、充提、风控订单、账变、Gullak、下注、下级、标签日志。增量按天切块，1 小时重叠。","security":[{"ApiKey":[]}],"parameters":[{"name":"userId","in":"path","required":true,"description":"上游用户 ID","schema":{"type":"integer"}},{"name":"backfillDays","in":"query","required":false,"description":"首次同步的回溯天数","schema":{"type":"integer","default":60}},{"name":"force","in":"query","required":false,"description":"1 忽略游标全量重拉该用户","schema":{"type":"integer","enum":[0,1]}}],"responses":{"200":{"description":"{ user_id, skipped, synced_at, sources{}, ms }","content":{"application/json":{"schema":{"type":"object"}}}},"207":{"description":"部分步骤失败","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"上游没有这个用户","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}