Dasar
- Base URL
https://unlock-api.com- API key
- 32 karakter, ada di halaman akun. Kirim sebagai clientKey (JSON) atau key (in.php, res.php).
- Format
- Metode JSON: POST dengan body JSON. in.php dan res.php: field form GET atau POST; tambahkan json=1 untuk balasan JSON.
- Batas
- 1.200 request per menit per akun, termasuk pengecekan hasil. Tunggu sekitar 5 detik setelah membuat tugas, lalu cek setiap 5 detik.
- Batas waktu
- Tugas yang tidak terpecahkan dalam 5 menit gagal dengan ERROR_CAPTCHA_UNSOLVABLE dan biayanya kembali ke saldo.
- Penagihan
- Harga tugas dipotong saat tugas dibuat. Tugas gagal dikembalikan otomatis.
Mulai cepat
Pecahkan reCAPTCHA v2 dengan metode JSON. Ganti YOUR_API_KEY dengan key Anda.
import time, requests
API = "https://unlock-api.com"
KEY = "YOUR_API_KEY"
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"
}
}).json()
if task["errorId"]:
raise SystemExit(task["errorCode"])
while True:
time.sleep(5)
r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task["taskId"]}).json()
if r["errorId"]:
raise SystemExit(r["errorCode"]) # failed tasks are refunded
if r["status"] == "ready":
print(r["solution"]["gRecaptchaResponse"])
breakMetode JSON
POST /createTask Buat tugas
Body: clientKey dan objek task. Tipe tugas menentukan field lainnya; lihat Jenis tugas. Balasan: errorId 0 dan taskId, atau errorId 1 dengan errorCode.
POST https://unlock-api.com/createTask
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAAAAAC3DHQFLr1GavRN"}}
{"errorId":0,"taskId":1001}
{"errorId":1,"errorCode":"ERROR_ZERO_BALANCE","errorDescription":"..."}POST /getTaskResult Ambil hasil
Body: clientKey dan taskId. Selama tugas berjalan: status processing. Setelah selesai: status ready dengan solution dan cost. Tugas yang gagal membalas errorId 1 dengan errorCode-nya.
POST https://unlock-api.com/getTaskResult
{"clientKey":"YOUR_API_KEY","taskId":1001}
{"errorId":0,"status":"processing"}
{"errorId":0,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.0012","createTime":1791640000,"endTime":1791640011,"solveCount":1}POST /getBalance Cek saldo
Body: clientKey. Balasan: balance dalam dolar AS.
{"clientKey":"YOUR_API_KEY"}
{"errorId":0,"balance":42.5}Laporkan jawaban salah
reportIncorrectRecaptcha dan reportIncorrectImageCaptcha menerima clientKey dan taskId lalu membalas success. Keduanya diterima demi kompatibilitas dengan library yang sudah ada; laporan tidak mengubah biaya.
Metode form (in.php, res.php)
Kirim tugas: in.php
Field: key, method, dan field dari jenis CAPTCHA. Balasan: OK|ID, atau dengan json=1 {"status":1,"request":"ID"}. Error dikembalikan sebagai namanya, misalnya ERROR_ZERO_BALANCE.
POST https://unlock-api.com/in.php
key=YOUR_API_KEY&method=hcaptcha&sitekey=SITE_KEY&pageurl=https://example.com&json=1
OK|1001
{"status":1,"request":"1001"}Ambil jawaban: res.php
action=get&id=ID mengembalikan OK|ANSWER jika sudah terpecahkan dan CAPCHA_NOT_READY selama diproses. action=get2 menambahkan biaya. ids=ID1,ID2 mengecek hingga 100 tugas sekaligus. action=getbalance mengembalikan saldo. action=reportbad dan reportgood diterima.
GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=get&id=1001 CAPCHA_NOT_READY OK|P1_eyJ0eXAiOiJKV1Qi... GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=getbalance 42.5
Metode lainnya
POST /getToken Buat dan tunggu: getToken
Body sama dengan createTask. Panggilan menunggu hingga 50 detik dan mengembalikan balasan yang sama dengan getTaskResult. Jika tugas masih berjalan, balasannya status processing dengan taskId; lanjutkan pengecekan dengan getTaskResult.
POST https://unlock-api.com/getToken
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAA..."}}
{"errorId":0,"taskId":1001,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.000725"}Callback hasil
Tambahkan callbackUrl ke createTask (atau pingback ke in.php) dan hasilnya dikirim ke sana saat tugas selesai: body JSON seperti getTaskResult dengan taskId, atau untuk in.php body form id=…&code=…. Hanya alamat publik yang dipanggil, satu kali, dengan timeout 5 detik; hasilnya juga tetap bisa diambil lewat pengecekan.
{"clientKey":"YOUR_API_KEY","callbackUrl":"https://your.server/captcha-result","task":{...}}
POST https://your.server/captcha-result
{"errorId":0,"taskId":1001,"status":"ready","solution":{...},"cost":"0.0005"}Statistik
getQueueStats mengembalikan jumlah tugas yang menunggu dan sedang dipecahkan saat ini serta rata-rata waktu pemecahan dalam satu jam terakhir. getSpendingStats mengembalikan volume dan pengeluaran Anda per jam untuk satu hari UTC (date dalam unix time). test mengembalikan body yang diterimanya.
POST https://unlock-api.com/getQueueStats {"clientKey":"..."} -> {"errorId":0,"waiting":3,"solving":12,"speed":6.4,"total":15}
POST https://unlock-api.com/getSpendingStats {"clientKey":"...","date":1791590400} -> {"errorId":0,"data":[{"dateFrom":...,"volume":120,"money":0.06},...]}
POST https://unlock-api.com/test {"anything":1} -> {"errorId":0,"received":{"anything":1}}Daftar IP yang diizinkan
Jika Anda mengatur daftar IP yang diizinkan di halaman akun, request dari IP lain mendapat ERROR_IP_NOT_ALLOWED.
Jenis tugas
Setiap jenis punya nama tanpa proxy dan nama dengan proxy (tanpa kata Proxyless). Nama dicocokkan tanpa memedulikan huruf besar kecil dan dengan ejaan yang dipakai API pemecah lain. Tugas dengan proxy juga memerlukan proxyType (http, socks4, socks5), proxyAddress, dan proxyPort, atau satu string proxy seperti http://user:[email protected]:8080. Field opsional yang tidak tercantum di sini diteruskan ke pemecah apa adanya.
reCAPTCHA v2 Enterprise
DetailRecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask
Field
websiteURL (wajib)websiteKey (wajib)
Cloudflare Turnstile
DetailTurnstileTaskProxylessTurnstileTask
Field
websiteURL (wajib)websiteKey (wajib)
FunCaptcha (Arkose Labs)
DetailFunCaptchaTaskProxylessFunCaptchaTask
Field
websiteURL (wajib)websitePublicKey (wajib)
Friendly Captcha
DetailFriendlyCaptchaTaskProxylessFriendlyCaptchaTask
Field
websiteURL (wajib)websiteKey (wajib)
Lemin Cropped Captcha
DetailLeminTaskProxylessLeminTask
Field
websiteURL (wajib)captchaId (wajib)divId (wajib)
KeyCaptcha
DetailKeyCaptchaTaskProxylessKeyCaptchaTask
Field
websiteURL (wajib)s_s_c_user_id (wajib)s_s_c_session_id (wajib)s_s_c_web_server_sign (wajib)s_s_c_web_server_sign2 (wajib)
Yandex SmartCaptcha
DetailYandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask
Field
websiteURL (wajib)websiteKey (wajib)
Error
Nama yang sama di kedua format. Request yang ditolak dengan error tidak ditagih.
| Error | Artinya dan yang perlu dilakukan |
|---|---|
ERROR_KEY_DOES_NOT_EXIST | Key salah. Salin lagi dari halaman akun. (in.php dan res.php: ERROR_WRONG_USER_KEY) |
ERROR_ZERO_BALANCE | Saldo tidak cukup untuk tugas ini. Tambah saldo; tidak ada biaya yang dipotong. |
ERROR_NO_SLOT_AVAILABLE | Terlalu banyak request saat ini, jadi tugas tidak bisa diterima. Coba lagi beberapa detik lagi; tidak ada biaya yang dipotong. |
ERROR_TASK_NOT_SUPPORTED | Jenis tugas tidak dikenal atau dinonaktifkan. Periksa nama tipenya. |
ERROR_BAD_PARAMETERS | Ada field wajib yang kosong atau formatnya salah. |
ERROR_PAGEURL | websiteURL atau pageurl kosong atau bukan alamat http(s) lengkap. |
ERROR_GOOGLEKEY | googlekey tidak ada pada request reCAPTCHA in.php. |
ERROR_BAD_PROXY | Tugas dengan proxy memerlukan proxyAddress dan proxyPort. |
ERROR_ZERO_CAPTCHA_FILESIZE | Gambar tidak ada atau terlalu kecil. |
ERROR_TOO_BIG_CAPTCHA_FILESIZE | Gambar lebih besar dari 100 KB. |
ERROR_IMAGE_TYPE_NOT_SUPPORTED | Gambar bukan base64 yang valid. |
ERROR_WRONG_CAPTCHA_ID | Tidak ada tugas dengan id ini di akun Anda. |
CAPCHA_NOT_READY | Khusus in.php dan res.php: tugas masih berjalan. Cek lagi dalam 5 detik. |
ERROR_CAPTCHA_UNSOLVABLE | Tugas tidak bisa dipecahkan tepat waktu. Biayanya sudah kembali ke saldo. |
ERROR_TOO_MANY_REQUESTS | Terlalu banyak request. Perlambat pengecekan hasil menjadi setiap 5 detik. |
ERROR_IP_NOT_ALLOWED | Request berasal dari IP yang tidak ada di daftar izin akun. Tambahkan IP tersebut di halaman akun. |