后端与接口
调用 Sumsub 任意 API 端点时:先查…
当需要调用、检查或调试未被专门技能覆盖的 Sumsub API 端点(api.sumsub.com)时,用 schema 驱动的方式定位端点、构造请求并验证结果。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
调用 Sumsub 任意 API 端点时特定
解决思路
- 确认请求不属于更专门的技能(如 sumsub-api-auth、sumsub-create-questionnaire、create-sumsub-level),否则改用那些技能。
- 确认用户已提供 SUMSUB_APP_TOKEN 与 SUMSUB_SECRET_KEY;若未提供则停下询问,见到生产凭证立即拒绝,只使用以 sbx: 开头的沙箱 token。
- 依赖自动获取的 OpenAPI schema:首次使用时从 https://api.sumsub.com/agents-openapi.json 拉取并缓存 24 小时到 ~/.cache/sumsub/openapi.json(或 $XDG_CACHE_HOME/sumsub/),过期自动刷新;schema 拉取本身不需要 App Token。
- 需要强制刷新缓存时设置 SUMSUB_SCHEMA_REFRESH=1 或运行 ${CLAUDE_SKILL_DIR}/scripts/refresh_schema.py;可用 SUMSUB_OPENAPI=/abs/path.json 指定本地文件跳过缓存与网络,或用 SUMSUB_OPENAPI_URL=https://… 从其他主机拉取。
- 绝不猜测端点路径(不要依次试 /resources/kyt/vasps、/resources/kyt/travelRule/vasps、/resources/vasps 等);schema 有约 1800 条路径,猜测总是更慢更乱。
- 始终先用 ${CLAUDE_SKILL_DIR}/scripts/find_endpoint.py <keyword> 搜索 schema(例如 find_endpoint.py vasp、find_endpoint.py applicants tags、find_endpoint.py accessTokens),这是找端点的唯一正确方式;没有匹配就换关键词或直接查 schema。
- 从 find_endpoint.py 返回的 `METHOD path — summary (operationId)` 列表中挑选最匹配的端点;若仍有歧义,先把候选列表展示给用户再决定。
- 用 ${CLAUDE_SKILL_DIR}/scripts/show_endpoint.py GET /resources/applicants/{applicantId}/one 完整查看该操作的请求参数、请求体 schema 与响应结构,不要凭记忆猜测。
- 检查 schema 时特别注意:路径参数(签名前需替换)、查询参数(必须出现在所签名的请求 URI 中)、请求体的必填字段、鉴权要求(几乎所有端点用 app-token,若不同需标记)。
- 对于写操作,先草拟 JSON 请求体并展示给用户,说明每个字段含义与假定的默认值;对不可逆操作(状态变更、删除、拉黑)先请求确认。
- 用 ${CLAUDE_SKILL_DIR}/scripts/sumsub_curl.sh GET /resources/applicants/{applicantId}/one 或 ${CLAUDE_SKILL_DIR}/scripts/sumsub_curl.sh POST /resources/applicants/{applicantId}/tags tags.json 签名并发送;该封装会用 HMAC-SHA256 对 ts + METHOD + path?query + body 签名并发送到 https://api.sumsub.com,输出最后一行是 HTTP <code>。
- 对改变状态的调用,事后重新拉取该实体验证变更确实生效(Sumsub 有时在 API 边缘接受字段却因租户权限静默丢弃),发现不一致要报告。
- 对读操作,只向用户呈现相关字段,不要直接倾倒整个响应(多数 Sumsub 响应很大)。
- 避免签名陷阱:必须签名已解析的路径(如 /resources/applicants/abc123/one)而非模板(/resources/applicants/{applicantId}/one),helper 脚本签名字符串原样传入,所以先解析。
- 避免查询字符串编码陷阱:+ 与 %20、参数顺序、重复键——签名字符串必须与线上请求完全一致,URL 只构造一次并复用。
- 避免 GET/DELETE 意外带 body:某些 HTTP 客户端会加 Content-Length: 0 或空 body;helper 不会,但换用其他客户端时要小心——空 body 意味着签名字符串不追加任何内容。
- 注意分页:许多列表端点使用 cursor 或 offset 分页,查看 schema;不要仅凭一页就断言“无结果”。
适用边界 · 注意事项
- 请求明确属于更专门的技能时(认证机制/签名调试/401 排查用 sumsub-api-auth,构建 QuestionnaireDefinition 用 sumsub-create-questionnaire,端到端构建 ApplicantLevel 用 create-sumsub-level)。
- 用户未提供 SUMSUB_APP_TOKEN 与 SUMSUB_SECRET_KEY,或只提供生产凭证时。
- 想凭记忆猜测端点路径或请求/响应结构时——应先查 schema。