Quick Start

快速开始

签约后发放 app_idapp_secret,五步完成一次分析。完整规范见 OpenAPI(正式接入时提供)。

 quickstart.sh
# ① 换取短期访问令牌(缓存复用,2 小时有效)
curl -X POST https://api.cleerscience.com/v1/token \
  -H "Content-Type: application/json" \
  -d '{"grant_type": "client_credentials",
       "app_id": "app_xxx", "app_secret": "您的AppSecret"}'
→ {"access_token": "at-…", "expires_in": 7200}

# ② 上传文件(申报 SHA-256,分片直传对象存储)
curl -X POST https://api.cleerscience.com/v1/uploads \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"filename": "sample.xrdml", "content_type": "application/xml",
       "size": 102400, "sha256": "文件内容SHA-256"}'
→ {"upload_id": "upl_…", "part_size_bytes": 8388608, "total_parts": 1}

# ③ 完成上传(校验通过,获得资产引用)
curl -X POST …/v1/uploads/upl_…/complete …
→ {"asset_ref": {"asset_id": "ast_…", "version": 1}, "status": "ready"}

# ④ 发起分析(XRD 物相检索)
curl -X POST …/v1/analyses \
  -H "Authorization: Bearer $TOKEN" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"algorithm_id": "xrd-phase-analysis",
       "inputs": [{"asset_id": "ast_…", "version": 1}]}'
→ 202 {"analysis_id": "run_…", "status": "queued"}

# ⑤ 轮询至终态,读取结果信封与产物下载地址
curl …/v1/analyses/run_… -H "Authorization: Bearer $TOKEN"
curl …/v1/analyses/run_…/result -H "Authorization: Bearer $TOKEN"
Authentication

鉴权与令牌

POST/v1/token

用 AppID + AppSecret 换取短期访问令牌,后续所有业务请求携带 Authorization: Bearer 头。

  • Token 有效期 2 小时,请缓存复用、过期前(如剩余 5 分钟)再刷新;Token 接口有独立频控(60 次/分钟/应用)
  • Token 只通过 Authorization 头传输,不要放进 URL、日志或代码仓库
  • 收到 401 token_expired 时重新获取 Token 并重试原请求
  • 密钥疑似泄露的止损方式是重置 AppSecret——重置后所有旧 Token 即刻失效
Upload

文件上传

上传完成并通过校验后获得 asset_ref(asset_id + version),发起分析时引用它;同一资产可复用于多次分析。

大文件:分片直传(推荐统一使用)

POST/v1/uploads
POST/v1/uploads/{upload_id}/parts/{n}/url
POST/v1/uploads/{upload_id}/complete
  • 申报文件名、类型、大小与 SHA-256 → 创建会话(返回分片大小 8MB 与总分片数)
  • 逐分片取短期预签名地址(15 分钟有效)直传,PUT 时不带 Authorization 头;文件字节不经 API 服务器
  • 全部传完后提交各分片 ETag 完成上传;平台回读校验大小与 SHA-256,一致才 ready,不一致返回 422 需重新上传
  • 小于等于 8MB 的文件只有 1 个分片,流程退化为"一址一传一完成"
请确保申报的 sha256 与文件字节一致——这是"平台分析的确实是这份字节"的全程锚点,结果中会回传同一摘要。

小文件:一步上传(≤ 20MB)

POST/v1/uploads/direct

multipart/form-data 一步上传(网关内部完成分片编排与校验),适合谱图文本等小文件;超过 20MB 返回 413。

Analysis

发起分析(标准式)

GET/v1/algorithms
POST/v1/analyses
GET/v1/analyses/{analysis_id}
DELETE/v1/analyses/{analysis_id}
  • 先调算法目录获取已开通算法(含输入与参数 Schema,mode 标注 standard / conversational)
  • 创建必须带 Idempotency-Key 头(如 UUID):网络超时重试不重复计费、不重复跑任务;注意失败任务重试须换新键
  • 状态机:queued → running → cancelling → succeeded / failed / cancelled / timed_out
  • 轮询建议退避间隔 2s → 5s → 10s 封顶;任务生命周期由平台管理,无需维持长连接
Conversational

对话式应答

POST/v1/analyses/{analysis_id}/answers

对话式算法(如 NMR 结构求解、MS 需要前体 m/z 时)运行中会以结构化表单发起提问,任务状态变为 waiting_for_input

 GET /v1/analyses/{id} → waiting_for_input
{
  "status": "waiting_for_input",
  "interaction": {
    "interaction_id": "itx_…",
    "form": {
      "fields": [
        { "key": "precursor_mz", "type": "number",
          "label": "前体离子 m/z" },
        { "key": "ion_mode", "type": "single_choice",
          "options": ["positive", "negative"] }
      ]
    },
    "expires_at": "2026-09-17T10:30:00Z"
  }
}
  • fields 的 key 提交键值对应答;应答幂等(重答同内容无副作用、换内容 409)
  • 已知样品背景可在创建时用 prefilled_answers 预填,引擎跳过对应提问(免对话模式)
  • 超时未答任务自动结束且不计费;结果会带 answers 问答溯源
Result

获取结果

GET/v1/analyses/{analysis_id}/result
GET/v1/analyses/{analysis_id}/artifacts/{artifact_id}/download

结果采用"信封固定、内容随算法"两层设计——外层所有模态一致,算法指标按版本化 Schema 单独提供。产物 download_url 为限时地址(24 小时),过期后重新调用结果接口获取新地址。

 GET /v1/analyses/{id}/result
{
  "analysis_id": "run_…",
  "algorithm": {"id": "xrd-phase-analysis", "version": "0.7.0"},
  "status": "succeeded",
  "created_at": "2026-09-17T08:30:12Z",
  "finished_at": "2026-09-17T08:31:40Z",
  "inputs": [{ "asset_id": "ast_…", "version": 1,
                "filename": "sample.xrdml", "sha256": "9f2c…" }],
  "result": { "schema_version": "0.7", /* 算法指标,按算法版本化 */ },
  "artifacts": [{ "type": "report", "filename": "report.pdf",
                   "sha256": "e3b0…", "download_url": "https://…(限时)" }],
  "answers": [],
  "usage": { "compute_seconds": 88 }
}
Catalog

算法目录

按合作范围开通;以下为平台当前能力与输入格式要求。GET /v1/algorithms 返回贵司实际开通的清单。

模态版本状态输入格式能力与说明
XRD 物相检索0.7.0正式 两列粉末衍射谱(2θ/强度):.csv .txt .xy .dat .xrdml .xls .xlsx .asc .ras .uxd 420k COD 全库检索
Raman 光谱识别0.6.0正式 两列光谱(波数/强度):CSV / TXT RRUFF 物相级数据库(窗内 1959 物相)
NMR 波谱解析0.2.2正式 对话式 JCAMP-DX(.jdx)1–4 份(PEAKTABLE/XYDATA)、CSV 解析 + 峰表为默认;提供分子式可经问答完成结构求解
MS 质谱鉴定0.2.1正式 对话式 mzML / MassBank JSON / XML / CSV / TSV(单谱) MassBank 2025.10 全库鉴定;需前体 m/z(可经对话补充)
XPS演示 两列 CSV(结合能 eV / 强度) 仪器格式 .vms 暂不支持,正式算法接入中
IR演示 两列 CSV .jdx 暂不支持,正式算法接入中
TEM演示 径向分布 CSV 衍射照片支持(jpg/tiff)接入中
SAXS演示 两列散射曲线 CSV 正式算法接入中
已知限制(务必知悉):XRD 检索波长锁定 Cu Kα——非铜靶数据属于算法侧已挂账的已知限制,接入前请与商务确认影响。NMR 的 Bruker 原始 ZIP 与 MS 的批次定量 ZIP 流程在算法侧已就绪,会话入口接入中。
Usage

用量与限流

GET/v1/usage
  • 用量视图:按任务状态的调用次数 + 已终态任务的算力时长合计;计费口径以接入协议为准
  • 限流三层(超出返回 429 及 Retry-After 头):单应用请求频率 / 单应用并发分析数 / 机构级配额
  • 所有创建类接口支持幂等键,网络重试安全
Errors

错误码

统一错误体:{"error": {"code": "...", "message": "..."}},响应均带 X-Request-Id 头供排查。

HTTPcode说明与处理
400invalid_request参数错误,检查 Schema
401invalid_credentials / token_expired检查凭证 / 重新获取 Token
403scope_denied / entitlement_suspended未开通该算法 / 应用已停用,联系运营
404not_found / algorithm_not_foundID 不存在、不属于当前应用或算法未开放
409idempotency_conflict / interaction_conflict / run_not_terminal同键不同请求体 / 重复应答不同答案 / 结果未就绪
410download_expired / cursor_expired下载令牌或事件游标过期,重新获取
413file_too_large超过直传上限,改用分片直传
422input_validation_failed / asset_integrity_mismatch文件类型/大小/摘要校验不通过
429rate_limited触发限流,按 Retry-After 退避
503service_unavailable平台维护或异常,退避重试
Sandbox

沙箱与安全

  • 正式环境与沙箱联调环境(sandbox-api.cleerscience.com,拟定)账号、数据、配额完全隔离,建议先沙箱联调再切生产
  • AppSecret 仅服务端保管,不得进前端、App、代码仓库或日志
  • 全链路 HTTPS;上传/下载地址均为短期授权,请勿固定化、转发或写入日志
  • 客户数据仅在分析用途内使用,按约定保留策略管理,详见接入协议
文档中的接口地址、参数阈值(Token 时效、分片大小、限流数值等)均为拟定值,最终以双方确认的接入协议为准。