跳至主要內容

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 範例用戶端。