跳到正文

API 文档

用 HTTP 接口上传号码、报价、下单和下载结果,适合需要批量、自动处理的客户。规则和网页下单一致,价格按你的账号计算。

开通 API

  1. 先联系客服开户。
  2. 把需要的服务、账号和服务器出口 IP 发给客服。
  3. 运营开通后发放 API 密钥和完整接入文档。密钥有效期 1–730 天,每个密钥最多绑定 32 个出口 IP。

基本约定

基础地址https://api.checkim.ai/openapi/v1
认证
每个请求带 Authorization: Bearer <API 密钥>
User-Agent
必须带,缺少时会被 Cloudflare 拦截(error 1010)
格式
请求和响应都是 JSON(上传文件除外),编码 UTF-8
时间
UTC Unix 毫秒时间戳
金额
最多八位小数,请用十进制定点类型处理,不要四舍五入成两位

接入流程

  1. 查询服务列表和余额,保存要用的 productId。
  2. 查询数据使用声明;未确认时由你阅读后确认。
  3. 上传号码文件,保存返回的 fileId。
  4. 用 productId 和 fileId 报价,核对条数、单价和总价。
  5. 生成并保存幂等键,再按报价下单。下单会真实扣费。
  6. 设置 Webhook 接收订单状态推送;同时每 5–10 分钟用 updatedSince 对账一次,防止漏收。
  7. 订单完成后列出结果文件,逐个下载并用 sha256 校验。成功和未成功的文件都要下载。

curl 示例

把占位符换成真实值。报价和下单的完整参数见开通时提供的接入文档。

  1. 设置密钥,查询服务

    export CHECKIM_TOKEN='替换为运营提供的 API 密钥'
    export CHECKIM_BASE='https://api.checkim.ai/openapi/v1'
    
    curl -H "Authorization: Bearer $CHECKIM_TOKEN" "$CHECKIM_BASE/products"
  2. 上传号码文件

    curl -H "Authorization: Bearer $CHECKIM_TOKEN" \
      -F 'file=@./numbers.csv;type=text/csv' \
      "$CHECKIM_BASE/files"
  3. 报价

    curl -H "Authorization: Bearer $CHECKIM_TOKEN" \
      -H 'Content-Type: application/json' \
      -d '{"productId":"<productId>","name":"batch-001","fileId":"<fileId>"}' \
      "$CHECKIM_BASE/orders/check"
  4. 下单

    # 真实扣费。重试时保持幂等键和请求体完全不变。
    curl -H "Authorization: Bearer $CHECKIM_TOKEN" \
      -H 'Content-Type: application/json' \
      -H 'Idempotency-Key: partner-request-001' \
      -d '{"quoteId":"<quoteId>","clientOrderId":"partner-batch-001"}' \
      "$CHECKIM_BASE/orders"
  5. 查询订单,或按变化时间对账

    curl -H "Authorization: Bearer $CHECKIM_TOKEN" "$CHECKIM_BASE/orders/<orderId>"
    
    curl -H "Authorization: Bearer $CHECKIM_TOKEN" \
      "$CHECKIM_BASE/orders?updatedSince=<UTC ms>&size=100"
  6. 列出并下载结果,校验 sha256

    curl -H "Authorization: Bearer $CHECKIM_TOKEN" "$CHECKIM_BASE/orders/<orderId>/results"
    
    curl -H "Authorization: Bearer $CHECKIM_TOKEN" -o result.csv \
      "$CHECKIM_BASE/orders/<orderId>/results/<fileId>/download"
    shasum -a 256 result.csv

接口清单

账户与声明

接口清单: 账户与声明
接口用途
GET/compliance查询数据使用声明和本人确认状态
POST/compliance/accept确认当前版本的声明
GET/balance查询账户余额
GET/products查询可下单的服务和你的单价

文件与报价

接口清单: 文件与报价
接口用途
POST/files上传号码文件(multipart,字段 file)
POST/orders/check校验号码并报价,报价 180 秒有效

订单

接口清单: 订单
接口用途
POST/orders按报价下单,需带 Idempotency-Key 请求头
GET/orders查询订单:游标翻页、按状态和创建时间筛选、按 updatedSince 对账
GET/orders/{orderId}查询订单状态和数量
POST/orders/{orderId}/cancel取消订单:排队中和未派发的立即全额退款,已派发的进入取消中,执行中的不能取消

结果文件

接口清单: 结果文件
接口用途
GET/orders/{orderId}/results列出结果文件,每个文件带 sha256
GET/orders/{orderId}/results/{fileId}/download下载一个结果文件,支持 Range 续传和 If-None-Match

Webhook

接口清单: Webhook
接口用途
GET/webhook查看 Webhook 配置和投递健康
PUT/webhook设置接收地址和订阅的事件
DELETE/webhook关闭 Webhook
GET/webhook/secret查看签名密钥
POST/webhook/secret/rotate轮换签名密钥,新旧密钥并行签名 24 小时
POST/webhook/test发送一条测试事件
GET/webhook/deliveries查看最近的投递记录

查询订单与对账

  • 订单列表默认按创建时间倒序。每页带 nextCursor 时,把它作为下一次的 cursor 继续取;游标翻页在持续新增订单时不会漏、不会重。
  • 可按 status 和创建时间(createdFrom、createdTo,UTC 毫秒)筛选,也可以用 clientOrderId 查回某一笔订单。
  • updatedSince 只返回该时间之后状态变化过的订单,按变化时间升序。定期用它补拉,Webhook 漏收也不会丢状态。

下载结果

  • 结果列表里每个文件都有 sha256。下载响应的 ETag 是同一个值,下载完请比对。
  • 支持 Range 断点续传。续传前先确认 sha256 没变;变了说明文件重新生成过,需要整份重下。
  • 已有完整文件时,带 If-None-Match 请求,内容没变会返回 304,不再传输。
  • 开启分批交付的大订单,执行中会先列出已完成批次的文件;订单完成后的最终文件是权威版本。
  • 含头像的服务(TG/WS 高级检查、性别年龄检查)在结果 CSV 的 avatar 列给出带签名的图片链接,在结果保存期内可直接 GET 访问图片(无需带 Authorization 头,支持 If-None-Match)。

Webhook 推送

  • 通过 API 下的订单状态变化时,平台向你的 HTTPS 地址 POST 一条事件。需要 webhook:manage 权限。
  • 每条事件带 CheckIM-Signature 签名头(t=时间戳,v1=签名)。用签名密钥对“t.原始请求体”做 HMAC-SHA256 校验。
  • 2xx 视为送达;失败会在约 2 天内重试 9 次。同一事件可能收到多次,请按事件 id 去重。
  • 请求来自固定出口 IP 34.21.195.36,可以只放行这个地址。
Webhook 推送
事件触发时机
order.completed订单结算完成,可以下载结果
order.cancelled订单已取消并全额退款
order.cancel_pending订单进入取消中,等执行端停止后结算
order.needs_attention订单进入售后或需要人工处理
order.partial_results分批交付有新的一批结果可下载

订单状态

订单状态
状态含义
inQueue排队中,继续查询
orderTaken已接单,继续查询
executing执行中。开启分批交付的大订单此时已能下载已完成批次的结果
completed已完成,下载结果并核对数量
waitAfterSale售后处理中
pendingCancel取消处理中,继续查询最终状态
cancelled已取消。排队中取消全额退款,执行中取消按实际执行量结算

限流与注意事项

  • 默认每分钟最多:同一出口 IP 1,200 次,同一账号 240 次,同一密钥 120 次。响应头 RateLimit-Limit、RateLimit-Remaining、RateLimit-Reset 告诉你本分钟还剩多少次。
  • 报价和上传较慢,同一账号同时进行中的最多 3 个,超出返回 429 TOO_MANY_CONCURRENT_REQUESTS。
  • 收到 429 或 503 时,按 Retry-After 给出的秒数等待后用原请求重试。
  • 没有测试环境,下单即真实扣费。
  • 查询等待超时不代表下单失败。请先用 orderId 或 clientOrderId 查回订单,不要重新下单。

常见错误

错误响应带 code、requestId、message 和可选的 detail.field。程序按 code 处理;message 按 Accept-Language 返回 9 种语言之一,只用于展示。

常见错误
错误码HTTP处理
INVALID_REQUEST400按 detail.field 修正参数类型或必填项
INVALID_CURSOR400游标无效,从第一页重新开始
INVALID_API_TOKEN401检查密钥是否完整、是否过期或已撤销
PERMISSION_DENIED403联系客服核对已开通的服务和出口 IP
QUOTE_EXPIRED409先确认没有下单成功,再重新报价
INSUFFICIENT_BALANCE409充值后重新报价下单
ORDER_NOT_CANCELLABLE409订单已开始执行或已结束,不能取消
RETRY_SAME_REQUEST409与其他操作冲突,用原请求退避重试
COMPLIANCE_ACCEPTANCE_REQUIRED422先查询并确认数据使用声明
RATE_LIMITED429按 Retry-After 等待,降低请求频率
TOO_MANY_CONCURRENT_REQUESTS429等前面的报价或上传完成,再发起新的
DATABASE_UNAVAILABLE503服务暂时不可用,按 Retry-After 重试

需要开通 API?

把需要的服务和出口 IP 发给客服,我们会发放密钥和完整接入文档,并附带 Python 示例客户端。