API 文件
透過 HTTP 介面上傳號碼、報價、下單和下載結果,適合需要批次、自動化處理的客戶。規則和網頁下單一致,價格依你的帳號計算。
開通 API
- 先聯絡客服開戶。
- 把需要的服務、帳號和伺服器對外 IP 提供給客服。
- 開通後我們會核發 API 金鑰和完整串接文件。金鑰有效期 1–730 天,每把金鑰最多綁定 32 個對外 IP。
基本約定
基礎網址
https://api.checkim.ai/openapi/v1- 驗證
- 每個請求都要帶 Authorization: Bearer <API 金鑰>
- User-Agent
- 必須帶,缺少時會被 Cloudflare 攔截(error 1010)
- 格式
- 請求和回應都是 JSON(上傳檔案除外),編碼為 UTF-8
- 時間
- UTC Unix 毫秒時間戳記
- 金額
- 最多八位小數,請用十進位定點數型別處理,不要四捨五入成兩位
串接流程
- 查詢服務清單和餘額,保存要使用的 productId。
- 查詢資料使用聲明;尚未確認時,請閱讀後確認。
- 上傳號碼檔案,保存回傳的 fileId。
- 用 productId 和 fileId 取得報價,核對筆數、單價和總價。
- 產生並保存冪等鍵,再依報價下單。下單會實際扣款。
- 設定 Webhook 接收訂單狀態推送;同時每 5–10 分鐘用 updatedSince 對帳一次,避免漏收。
- 訂單完成後列出結果檔案,逐一下載並用 sha256 校驗。成功和未成功的檔案都要下載。
curl 範例
把預留位置換成實際值。報價和下單的完整參數請見開通時提供的串接文件。
設定金鑰,查詢服務
export CHECKIM_TOKEN='替換為客服提供的 API 金鑰' export CHECKIM_BASE='https://api.checkim.ai/openapi/v1' curl -H "Authorization: Bearer $CHECKIM_TOKEN" "$CHECKIM_BASE/products"上傳號碼檔案
curl -H "Authorization: Bearer $CHECKIM_TOKEN" \ -F 'file=@./numbers.csv;type=text/csv' \ "$CHECKIM_BASE/files"取得報價
curl -H "Authorization: Bearer $CHECKIM_TOKEN" \ -H 'Content-Type: application/json' \ -d '{"productId":"<productId>","name":"batch-001","fileId":"<fileId>"}' \ "$CHECKIM_BASE/orders/check"下單
# 會實際扣款。重試時請保持冪等鍵和請求內容完全不變。 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"查詢訂單,或依變動時間對帳
curl -H "Authorization: Bearer $CHECKIM_TOKEN" "$CHECKIM_BASE/orders/<orderId>" curl -H "Authorization: Bearer $CHECKIM_TOKEN" \ "$CHECKIM_BASE/orders?updatedSince=<UTC ms>&size=100"列出並下載結果,校驗 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 | 確認目前版本的聲明 |
GET/balance | 查詢帳戶餘額 |
GET/products | 查詢可下單的服務和你的單價 |
檔案與報價
| 介面 | 用途 |
|---|---|
POST/files | 上傳號碼檔案(multipart,欄位 file) |
POST/orders | 驗證號碼並取得報價,報價 180 秒內有效 |
訂單
| 介面 | 用途 |
|---|---|
POST/orders | 依報價下單,需帶 Idempotency-Key 請求標頭 |
GET/orders | 查詢訂單:游標分頁、依狀態和建立時間篩選、依 updatedSince 對帳 |
GET/orders | 查詢訂單狀態和數量 |
POST/orders | 取消訂單:排隊中和未派發的立即全額退款,已派發的進入取消中,執行中的不能取消 |
結果檔案
| 介面 | 用途 |
|---|---|
GET/orders | 列出結果檔案,每個檔案帶 sha256 |
GET/orders | 下載一個結果檔案,支援 Range 續傳和 If-None-Match |
Webhook
| 介面 | 用途 |
|---|---|
GET/webhook | 查看 Webhook 設定和投遞狀況 |
PUT/webhook | 設定接收網址和訂閱的事件 |
DELETE/webhook | 關閉 Webhook |
GET/webhook | 查看簽章金鑰 |
POST/webhook | 輪換簽章金鑰,新舊金鑰並行簽章 24 小時 |
POST/webhook | 發送一則測試事件 |
GET/webhook | 查看最近的投遞紀錄 |
查詢訂單與對帳
- 訂單清單預設依建立時間由新到舊排序。回應帶 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,可以只放行這個位址。
| 事件 | 觸發時機 |
|---|---|
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_REQUEST | 400 | 依 detail.field 修正參數型別或必填項 |
INVALID_CURSOR | 400 | 游標無效,請從第一頁重新開始 |
INVALID_API_TOKEN | 401 | 檢查金鑰是否完整、是否過期或已撤銷 |
PERMISSION_DENIED | 403 | 聯絡客服核對已開通的服務和對外 IP |
QUOTE_EXPIRED | 409 | 先確認沒有下單成功,再重新報價 |
INSUFFICIENT_BALANCE | 409 | 儲值後重新報價並下單 |
ORDER_NOT_CANCELLABLE | 409 | 訂單已開始執行或已結束,無法取消 |
RETRY_SAME_REQUEST | 409 | 與其他操作衝突,請用原請求退避重試 |
COMPLIANCE_ACCEPTANCE_REQUIRED | 422 | 先查詢並確認資料使用聲明 |
RATE_LIMITED | 429 | 依 Retry-After 等待,並降低請求頻率 |
TOO_MANY_CONCURRENT_REQUESTS | 429 | 等前面的報價或上傳完成,再發起新的 |
DATABASE_UNAVAILABLE | 503 | 服務暫時無法使用,請依 Retry-After 重試 |
需要開通 API?
把需要的服務和對外 IP 提供給客服,我們會核發金鑰和完整串接文件,並附上 Python 範例用戶端。