Dokumentasi API
Unggah nomor, minta penawaran harga, buat pesanan, dan unduh hasil melalui HTTP. Dirancang untuk tim yang memproses data dalam jumlah besar dan secara otomatis. Aturannya sama dengan pemesanan di web, dan harga mengikuti akun Anda.
Dapatkan akses API
- Minta tim dukungan membukakan akun untuk Anda.
- Kirim ke tim dukungan layanan yang Anda butuhkan, akun Anda, dan IP keluar (egress) server Anda.
- Kami kemudian menerbitkan kunci API dan panduan integrasi lengkap. Kunci berlaku 1–730 hari, dan setiap kunci mengizinkan hingga 32 IP keluar.
Dasar
Base URL
https://api.checkim.ai/openapi/v1- Autentikasi
- Kirim Authorization: Bearer <kunci API> di setiap permintaan
- User-Agent
- Wajib. Permintaan tanpa User-Agent diblokir Cloudflare (error 1010)
- Format
- Permintaan dan respons JSON dalam UTF-8, kecuali unggahan berkas
- Waktu
- Timestamp Unix UTC dalam milidetik
- Nominal
- Hingga delapan angka desimal. Gunakan tipe desimal dan jangan dibulatkan menjadi dua angka
Alur integrasi
- Tampilkan daftar layanan dan cek saldo Anda. Simpan productId yang Anda butuhkan.
- Baca pernyataan penggunaan data dan setujui jika Anda belum melakukannya.
- Unggah berkas nomor dan simpan fileId yang dikembalikan.
- Minta penawaran harga dengan productId dan fileId. Periksa jumlah, harga satuan, dan totalnya.
- Buat dan simpan idempotency key, lalu buat pesanan. Langkah ini memotong saldo Anda.
- Atur webhook untuk menerima pemberitahuan perubahan status pesanan, dan lakukan rekonsiliasi dengan updatedSince setiap 5–10 menit agar tidak ada yang terlewat.
- Setelah pesanan selesai, tampilkan daftar berkas hasil, unduh semuanya, dan periksa sha256 masing-masing. Unduh juga berkas yang tidak berhasil.
Contoh curl
Ganti placeholder dengan nilai sebenarnya. Parameter lengkap untuk penawaran harga dan pesanan ada di panduan yang Anda terima bersama akses.
Atur kunci dan tampilkan layanan
export CHECKIM_TOKEN='ganti dengan kunci API dari tim dukungan' export CHECKIM_BASE='https://api.checkim.ai/openapi/v1' curl -H "Authorization: Bearer $CHECKIM_TOKEN" "$CHECKIM_BASE/products"Unggah berkas nomor
curl -H "Authorization: Bearer $CHECKIM_TOKEN" \ -F 'file=@./numbers.csv;type=text/csv' \ "$CHECKIM_BASE/files"Minta penawaran harga
curl -H "Authorization: Bearer $CHECKIM_TOKEN" \ -H 'Content-Type: application/json' \ -d '{"productId":"<productId>","name":"batch-001","fileId":"<fileId>"}' \ "$CHECKIM_BASE/orders/check"Buat pesanan
# Memotong saldo Anda. Gunakan kunci dan body yang sama persis saat mencoba ulang. 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"Baca pesanan, atau rekonsiliasi berdasarkan waktu perubahan
curl -H "Authorization: Bearer $CHECKIM_TOKEN" "$CHECKIM_BASE/orders/<orderId>" curl -H "Authorization: Bearer $CHECKIM_TOKEN" \ "$CHECKIM_BASE/orders?updatedSince=<UTC ms>&size=100"Tampilkan dan unduh hasil, lalu periksa 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
Endpoint
Akun dan pernyataan
| Endpoint | Fungsi |
|---|---|
GET/compliance | Membaca pernyataan penggunaan data dan apakah Anda sudah menyetujuinya |
POST/compliance | Menyetujui versi pernyataan yang berlaku |
GET/balance | Membaca saldo akun |
GET/products | Menampilkan layanan yang dapat dipesan dan harga satuan Anda |
Berkas dan penawaran harga
| Endpoint | Fungsi |
|---|---|
POST/files | Mengunggah berkas nomor (multipart, field "file") |
POST/orders | Memvalidasi nomor dan mendapatkan penawaran harga, berlaku 180 detik |
Pesanan
| Endpoint | Fungsi |
|---|---|
POST/orders | Membuat pesanan untuk sebuah penawaran harga; memerlukan header Idempotency-Key |
GET/orders | Menampilkan pesanan: halaman berbasis cursor, filter status dan waktu pembuatan, rekonsiliasi dengan updatedSince |
GET/orders | Membaca status dan jumlah pesanan |
POST/orders | Membatalkan pesanan: pesanan dalam antrean dan yang belum dikirim langsung dikembalikan penuh, yang sudah dikirim beralih ke proses pembatalan, yang sedang berjalan tidak dapat dibatalkan |
Hasil
| Endpoint | Fungsi |
|---|---|
GET/orders | Menampilkan daftar berkas hasil, masing-masing dengan sha256 |
GET/orders | Mengunduh satu berkas hasil, mendukung lanjutan dengan Range dan If-None-Match |
Webhook
| Endpoint | Fungsi |
|---|---|
GET/webhook | Membaca pengaturan webhook dan kondisi pengiriman |
PUT/webhook | Mengatur URL penerima dan event yang dikirim |
DELETE/webhook | Mematikan webhook |
GET/webhook | Membaca secret penandatanganan |
POST/webhook | Merotasi secret penandatanganan; yang lama dan baru sama-sama menandatangani selama 24 jam |
POST/webhook | Mengirim event uji |
GET/webhook | Menampilkan pengiriman terbaru |
Menampilkan dan merekonsiliasi pesanan
- Pesanan ditampilkan dari yang terbaru. Jika halaman berisi nextCursor, kirimkan kembali sebagai cursor untuk halaman berikutnya; paginasi cursor tidak pernah melewatkan atau mengulang pesanan meski ada pesanan baru.
- Filter berdasarkan status dan waktu pembuatan (createdFrom, createdTo, milidetik UTC), atau cari satu pesanan dengan clientOrderId.
- updatedSince hanya mengembalikan pesanan yang statusnya berubah setelah waktu tersebut, dari perubahan paling lama. Tarik data dengannya secara berkala agar webhook yang terlewat tidak membuat status hilang.
Mengunduh hasil
- Setiap berkas di daftar hasil memiliki sha256. ETag unduhan bernilai sama, jadi bandingkan setelah mengunduh.
- Permintaan Range dapat melanjutkan unduhan. Pastikan dulu sha256 tidak berubah; jika berubah, berkas telah dibuat ulang dan Anda perlu mengunduh seluruhnya lagi.
- Jika berkas lengkap sudah ada, kirim If-None-Match: berkas yang tidak berubah mengembalikan 304 tanpa body.
- Pesanan besar dengan pengiriman bertahap menampilkan tahap yang selesai saat masih berjalan; berkas akhir setelah selesai adalah versi resmi.
- Untuk layanan dengan avatar (cek lanjutan atau cek jenis kelamin dan usia Telegram dan WhatsApp), kolom avatar di CSV hasil berisi URL gambar bertanda tangan yang dapat diakses langsung dengan GET selama hasil disimpan (jangan kirim header Authorization; mendukung If-None-Match).
Webhook
- Saat status pesanan yang dibuat lewat API berubah, kami mengirim event dengan POST ke URL HTTPS Anda. Memerlukan izin webhook:manage.
- Setiap event membawa header CheckIM-Signature (t=timestamp,v1=tanda tangan). Verifikasi dengan HMAC-SHA256 dari "t.body permintaan asli" menggunakan secret penandatanganan Anda.
- Respons 2xx apa pun dianggap terkirim; kegagalan dicoba ulang 9 kali selama sekitar 2 hari. Anda bisa menerima event yang sama lebih dari sekali, jadi hapus duplikat berdasarkan id-nya.
- Permintaan datang dari IP keluar tetap 34.21.195.36, sehingga Anda bisa hanya mengizinkan alamat itu.
| Event | Dikirim saat |
|---|---|
order.completed | Pesanan sudah diselesaikan dan hasil dapat diunduh |
order.cancelled | Pesanan dibatalkan dan dana dikembalikan penuh |
order.cancel_pending | Pesanan sedang dibatalkan dan diselesaikan setelah eksekusi berhenti |
order.needs_attention | Pesanan masuk purnajual atau perlu penanganan manual |
order.partial_results | Tahap hasil baru siap diunduh |
Status pesanan
| Status | Arti |
|---|---|
inQueue | Dalam antrean. Lanjutkan polling |
orderTaken | Diterima. Lanjutkan polling |
executing | Berjalan. Pesanan besar dengan pengiriman bertahap sudah menyediakan tahap yang selesai |
completed | Selesai. Unduh hasil dan periksa jumlahnya |
waitAfterSale | Permintaan purnajual sedang diproses |
pendingCancel | Sedang dibatalkan. Lanjutkan polling hingga status akhir |
cancelled | Dibatalkan. Dana dikembalikan penuh jika masih dalam antrean; jika tidak, ditagih sesuai pekerjaan yang sudah dikerjakan |
Batas dan catatan
- Secara default, maksimal 1.200 permintaan per menit per IP keluar, 240 per akun, dan 120 per kunci. Header RateLimit-Limit, RateLimit-Remaining, dan RateLimit-Reset memberi tahu sisa kuota menit ini.
- Penawaran harga dan unggahan berjalan lambat, jadi setiap akun hanya boleh menjalankan paling banyak 3 sekaligus. Selebihnya menerima 429 TOO_MANY_CONCURRENT_REQUESTS.
- Saat menerima 429 atau 503, tunggu sesuai detik di Retry-After, lalu ulangi permintaan yang sama.
- Tidak ada sandbox. Setiap pesanan adalah tagihan sungguhan.
- Timeout saat polling tidak berarti pesanan gagal. Cari pesanan berdasarkan orderId atau clientOrderId sebelum memesan lagi.
Error umum
Error berisi code, requestId, message, dan detail.field (opsional). Tangani berdasarkan code; message dikirim dalam salah satu dari 9 bahasa sesuai Accept-Language dan hanya untuk ditampilkan.
| Kode | HTTP | Yang harus dilakukan |
|---|---|---|
INVALID_REQUEST | 400 | Perbaiki parameter yang disebut di detail.field |
INVALID_CURSOR | 400 | Cursor tidak valid; mulai lagi dari halaman pertama |
INVALID_API_TOKEN | 401 | Pastikan kunci lengkap, belum kedaluwarsa, dan belum dicabut |
PERMISSION_DENIED | 403 | Minta tim dukungan memeriksa layanan dan IP keluar Anda |
QUOTE_EXPIRED | 409 | Pastikan tidak ada pesanan yang terbuat, lalu minta penawaran harga lagi |
INSUFFICIENT_BALANCE | 409 | Isi saldo, lalu minta penawaran harga dan pesan lagi |
ORDER_NOT_CANCELLABLE | 409 | Pesanan sudah berjalan atau selesai dan tidak dapat dibatalkan |
RETRY_SAME_REQUEST | 409 | Bentrok dengan operasi lain; ulangi permintaan yang sama dengan jeda bertahap |
COMPLIANCE_ACCEPTANCE_REQUIRED | 422 | Baca dan setujui pernyataan penggunaan data terlebih dahulu |
RATE_LIMITED | 429 | Tunggu sesuai Retry-After dan kirim lebih jarang |
TOO_MANY_CONCURRENT_REQUESTS | 429 | Tunggu hingga penawaran harga atau unggahan sebelumnya selesai |
DATABASE_UNAVAILABLE | 503 | Sementara tidak tersedia; coba lagi setelah Retry-After |
Butuh akses API?
Kirim ke tim dukungan layanan yang Anda butuhkan dan IP keluar (egress) Anda. Kami akan menerbitkan kunci dan panduan lengkap, beserta contoh klien Python.