Migrasi dari CapMonster Cloud ke CaptchaAI biasanya kelar dalam 15–30 menit — format API keduanya mirip, jadi Anda cukup mengganti base URL, parameter kunci, dan cara membaca respons, tanpa menulis ulang logika bisnis. Panduan ini memetakan perbedaannya satu per satu: perubahan endpoint, pemetaan parameter per tipe CAPTCHA, kesalahan yang paling sering muncul saat migrasi, sampai contoh kode Python dan JavaScript yang bisa langsung Anda tempel ke proyek.
Apa Saja yang Berubah Saat Pindah ke CaptchaAI
Kenali enam perbedaan inti berikut — polanya konsisten di semua task type.
| Komponen | CapMonster Cloud | CaptchaAI |
|---|---|---|
| Submit URL | https://api.capmonster.cloud/createTask |
https://ocr.captchaai.com/in.php |
| URL hasil | https://api.capmonster.cloud/getTaskResult |
https://ocr.captchaai.com/res.php |
| Parameter API key | clientKey |
key |
| Format API | body JSON | Form-encoded (atau JSON) |
| Field task ID | taskId |
request (dalam respons) |
| Field hasil | objek solution |
request (string token) |
Skenario ini umum di tim scraping freelance dan agensi pemantauan harga di Indonesia — API kompatibel berarti ganti penyedia tanpa menulis ulang integration layer. Saat menguji ulang integrasi pasca-migrasi, jalankan dari region yang sama dengan server produksi Anda — AWS ap-southeast-1 (Singapura) atau asia-southeast2 (Jakarta) di GCP — supaya angka latensi yang Anda amati mencerminkan kondisi nyata, bukan noise dari jarak jaringan ke endpoint.
Pemetaan Parameter API per Tipe CAPTCHA
Nama parameter CapMonster Cloud mengikuti pola berorientasi objek (task.type, task.websiteKey) yang dibungkus dalam satu objek task. CaptchaAI memakai parameter datar bergaya form-encoded — tidak ada nesting. Begitu Anda hafal pola konversi ini untuk satu tipe CAPTCHA, tipe lainnya mengikuti pola serupa.
reCAPTCHA v2
| CapMonster Cloud | CaptchaAI |
|---|---|
task.type: "RecaptchaV2TaskProxyless" |
method: "userrecaptcha" |
task.websiteKey |
googlekey |
task.websiteURL |
pageurl |
task.isInvisible: true |
invisible: "1" |
Cloudflare Turnstile
| CapMonster Cloud | CaptchaAI |
|---|---|
task.type: "TurnstileTaskProxyless" |
method: "turnstile" |
task.websiteKey |
sitekey |
task.websiteURL |
pageurl |
CAPTCHA Gambar (Image CAPTCHA)
| CapMonster Cloud | CaptchaAI |
|---|---|
task.type: "ImageToTextTask" |
method: "base64" |
task.body |
body |
Migrasi Kilat: Cukup Ganti Dua Baris
Kalau kode Anda pakai wrapper atau SDK sendiri, cukup ganti base URL dan kunci:
# Before (CapMonster Cloud)
API_URL = "https://api.capmonster.cloud"
CLIENT_KEY = "your_capmonster_key"
# After (CaptchaAI)
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
API_KEY = "your_captchaai_key"
Jalan pintas ini hanya berlaku kalau wrapper Anda sudah menangani parsing respons secara generik. Kalau kode Anda membaca field taskId atau objek solution secara eksplisit di banyak tempat, tetap ikuti contoh migrasi lengkap di bawah supaya tidak ada pemanggilan yang terlewat.
Migrasi Lengkap untuk reCAPTCHA v2
Contoh berikut menunjukkan alur penuh: kirim task, polling hasil, lalu ambil token — lengkap dengan penyesuaian nama field di tiap langkah.
Sebelum: CapMonster Cloud
import requests
import time
resp = requests.post("https://api.capmonster.cloud/createTask", json={
"clientKey": "CAPMONSTER_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com",
"websiteKey": "6Le-SITEKEY",
}
}).json()
task_id = resp["taskId"]
while True:
time.sleep(5)
result = requests.post("https://api.capmonster.cloud/getTaskResult", json={
"clientKey": "CAPMONSTER_KEY",
"taskId": task_id,
}).json()
if result["status"] == "ready":
token = result["solution"]["gRecaptchaResponse"]
break
Sesudah: CaptchaAI
import requests
import time
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "6Le-SITEKEY",
"pageurl": "https://example.com",
"json": "1",
}).json()
task_id = resp["request"]
while True:
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": task_id,
"json": "1",
}).json()
if result["status"] == 1:
token = result["request"]
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(result["request"])
Logika polling-nya sama persis dengan CapMonster Cloud — jeda 5 detik, cek ulang, ambil token begitu status siap. Yang berubah murni nama field dan cara membaca status.
Migrasi untuk Node.js/JavaScript
Pola konversinya sama seperti Python — yang beda hanya cara mengirim parameter dan membaca respons Axios.
Sebelum: CapMonster Cloud
const axios = require('axios');
const resp = await axios.post('https://api.capmonster.cloud/createTask', {
clientKey: 'CAPMONSTER_KEY',
task: {
type: 'RecaptchaV2TaskProxyless',
websiteURL: 'https://example.com',
websiteKey: '6Le-SITEKEY',
}
});
const taskId = resp.data.taskId;
Sesudah: CaptchaAI
const axios = require('axios');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: 'YOUR_API_KEY',
method: 'userrecaptcha',
googlekey: '6Le-SITEKEY',
pageurl: 'https://example.com',
json: 1,
}
});
const taskId = resp.data.request;
Menyesuaikan Penanganan Kode Error
Sebagian besar kode error punya padanan langsung.
| CapMonster Cloud | Setara di CaptchaAI |
|---|---|
ERROR_KEY_DOES_NOT_EXIST |
ERROR_KEY_DOES_NOT_EXIST |
ERROR_ZERO_BALANCE |
ERROR_ZERO_BALANCE |
ERROR_RECAPTCHA_TIMEOUT |
ERROR_CAPTCHA_UNSOLVABLE |
ERROR_NO_SLOT_AVAILABLE |
ERROR_NO_SLOT_AVAILABLE |
CAPTCHA_NOT_READY |
CAPCHA_NOT_READY |
Perhatikan ejaan
CAPCHA_NOT_READYtanpa huruf T — sering luput kalau pencocokan string Anda eksak, dan lolos begitu saja dari code review karena terlihat seperti typo yang tidak disengaja.
Kesalahan yang Sering Terjadi Saat Migrasi
- Lupa mengganti format request. CapMonster Cloud menerima JSON body; CaptchaAI menerima form-encoded (atau JSON dengan parameter yang sesuai). Kirim payload lama ke endpoint baru dan Anda akan mendapat error parsing yang membingungkan, bukan pesan yang jelas.
- Membaca field task ID yang salah.
resp["taskId"]di CapMonster Cloud menjadiresp["request"]di CaptchaAI — kalau baris ini tidak diubah, kode langsung crash denganKeyErrordi langkah polling. - Setengah-setengah mengganti nama parameter API key.
clientKeydi body JSON menjadikeydi parameter form-encoded — pastikan kedua tempat pemanggilan diganti, bukan cuma salah satu. - Tidak menguji satu solve dulu. Selalu validasi satu task berhasil sebelum mengalihkan traffic produksi penuh — checklist di bawah membantu memastikan langkah ini tidak terlewat.
Cek Saldo Akun
CapMonster Cloud
resp = requests.post("https://api.capmonster.cloud/getBalance", json={
"clientKey": "CAPMONSTER_KEY"
}).json()
balance = resp["balance"]
CaptchaAI
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "getbalance",
"json": "1",
}).json()
balance = float(resp["request"])
Checklist Sebelum Mengalihkan Traffic Produksi
- [ ] Dapatkan API key CaptchaAI dari captchaai.com
- [ ] Ganti submit URL:
api.capmonster.cloud/createTask→ocr.captchaai.com/in.php - [ ] Ganti result URL:
api.capmonster.cloud/getTaskResult→ocr.captchaai.com/res.php - [ ] Ubah autentikasi:
clientKey→key - [ ] Ubah format request: JSON → form-encoded
- [ ] Perbarui parsing respons:
taskId→request,solution.gRecaptchaResponse→request - [ ] Perbarui error handling:
CAPTCHA_NOT_READY→CAPCHA_NOT_READY - [ ] Uji satu solve dulu sebelum mengalihkan traffic produksi
Pertanyaan Umum
Apakah proxy dan integrasi automation saya perlu diubah?
Tidak. Migrasi hanya menyentuh lapisan pemanggilan API. Konfigurasi proxy di Puppeteer atau Selenium tidak tersentuh.
Bisakah CapMonster Cloud dan CaptchaAI dijalankan bersamaan selama transisi?
Bisa. Arahkan sebagian traffic ke CaptchaAI dulu, CapMonster Cloud tetap sebagai cadangan, lalu pindah penuh setelah tervalidasi.
Apakah semua tipe CAPTCHA di CapMonster Cloud juga didukung CaptchaAI?
Untuk reCAPTCHA v2, Turnstile, dan image/OCR — ya, plus GeeTest v3. hCaptcha dan FunCaptcha belum didukung; task tipe itu belum bisa dimigrasikan penuh.
Berapa biaya CaptchaAI dibanding billing per-task?
CaptchaAI pakai model thread-based, bukan per-solve — solve di dalam satu slot tidak dibatasi. BASIC ($15/bulan, 5 thread) cukup untuk tim kecil; volume besar naik ke STANDARD ($30/bulan, 15 thread) atau ADVANCE ($90/bulan, 50 thread).
Apakah logika retry atau exponential backoff saya perlu diubah?
Secara struktural tidak. Pola jeda-lalu-cek-ulang antar percobaan tetap sama seperti di CapMonster Cloud. Yang berubah hanya kondisi pemicu retry: cek result["request"] != "CAPCHA_NOT_READY", bukan status CapMonster Cloud yang lama.
Mulai Migrasi ke CaptchaAI Sekarang
Ambil API key CaptchaAI dan jalankan solve pertama Anda dalam hitungan menit di captchaai.com.