# YesCaptcha Docs (full text) > YesCaptcha adalah API pengenalan captcha: satu antarmuka JSON untuk menyelesaikan reCAPTCHA, hCaptcha, Cloudflare Turnstile, FunCaptcha, AWS WAF, dan captcha gambar. Poin dipotong per tugas, dan tugas yang gagal atau timeout dikembalikan poinnya secara otomatis. --- # Selesaikan captcha dengan satu API JSON > YesCaptcha adalah API pengenalan captcha: satu antarmuka JSON untuk menyelesaikan reCAPTCHA, hCaptcha, Cloudflare Turnstile, FunCaptcha, AWS WAF, dan captcha gambar. Poin dipotong per tugas, dan tugas yang gagal atau timeout dikembalikan poinnya secara otomatis. Source: https://docs.yescaptcha.com/id/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/ [API pengenalan captchaStatus](https://status.yescaptcha.com/?lang=en) Mengenali reCAPTCHA, hCaptcha, Cloudflare Turnstile, FunCaptcha, AWS WAF, dan captcha gambar huruf-angka. Poin dipotong per tugas, 1,000 poin = ¥1; tugas yang gagal atau timeout dikembalikan poinnya secara otomatis. [Mulai cepat](https://docs.yescaptcha.com/id/getting-started/quickstart.md)[Referensi API](https://docs.yescaptcha.com/id/api/overview.md) Versi untuk AI dan program:[llms.txt](https://docs.yescaptcha.com/id/llms.txt)[llms-full.txt](https://docs.yescaptcha.com/id/llms-full.txt)[OpenAPI](https://docs.yescaptcha.com/openapi.json)[Markdown](https://docs.yescaptcha.com/id/index.md) YesCaptcha hanya boleh digunakan untuk tujuan yang sah. Penggunaan untuk tujuan ilegal dilarang. POSTapi.yescaptcha.com/createTask ``` { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } } ``` 1. /createTasktaskId 61138bb6-19fb-11ec-a9c8-0242ac110006 2. /getTaskResultprocessing 3. /getTaskResultprocessing 4. /getTaskResultready 5. gRecaptchaResponse03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU... 1. 1Buat tugas 2. 2Ambil hasil 3. 3Kirim Contoh: reCAPTCHA v2, polling hasil setiap 5 detik Mulai $0.30 / 1k Harga terendah per tugas 1,000 poin = ¥1 Tugas yang gagal dan timeout mendapat pengembalian poin 2 endpoint Endpoint global dan endpoint Tiongkok 9:00–21:00 Dukungan manusia (UTC+8) [Mulai CepatDaftar, ambil ClientKey, dan kirim permintaan pertama dalam 5 menit](https://docs.yescaptcha.com/id/getting-started/quickstart.md)[Referensi APIcreateTask, getTaskResult, kode error, dan batas tugas bersamaan](https://docs.yescaptcha.com/id/api/overview.md)[Jenis tugas dan hargaHarga, cara pengembalian hasil, dan parameter semua jenis yang dipublikasikan](https://docs.yescaptcha.com/id/tasks.md)[Ekstensi browserSelesaikan verifikasi di halaman web tanpa menulis kode](https://docs.yescaptcha.com/id/extension.md) ## Captcha yang didukung [01reCAPTCHAv2, v3, versi Enterprise, serta pengenalan gambar v2Mulai $0.90 / 1k](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md)[02hCaptchaMengembalikan token, atau mengenali gambar lalu Anda klik sendiriMulai $1.20 / 1k](https://docs.yescaptcha.com/id/tasks/hcaptcha.md)[03Cloudflare TurnstileToken verifikasi TurnstileMulai $3.75 / 1k](https://docs.yescaptcha.com/id/tasks/turnstile.md)[04FunCaptchaPengenalan soal gambar Arkose Labs, semua jenis soal didukungMulai $0.45 / 1k](https://docs.yescaptcha.com/id/tasks/funcaptcha-classification.md)[05AWS WAF / bCaptchaPengenalan gambar kisiMulai $1.20 / 1k](https://docs.yescaptcha.com/id/tasks/aws-bcaptcha-classification.md)[06Gambar huruf-angkaCaptcha karakter biasa, hasil dikembalikan secara sinkronMulai $0.30 / 1k](https://docs.yescaptcha.com/id/tasks/image-to-text.md) ## Tiga langkah integrasi 1. 01 **Buat tugas** Kirim jenis tugas dan parameter situs dengan `createTask` untuk mendapatkan `taskId`. Jenis sinkron seperti pengenalan gambar dan gambar huruf-angka langsung mengembalikan hasil. 2. 02 **Ambil hasil** Panggil `getTaskResult` setiap 5 detik. Saat `status` menjadi `ready`, hasilnya ada di `solution`. 3. 03 **Kirim ke situs target** Isi token yang didapat ke formulir atau permintaan di halaman web. Token hanya berlaku sekali pakai; sebaiknya digunakan dalam 60 detik. POST /createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } } ``` POST /getTaskResult ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." } } ``` ## Tautan populer - [**Kode error**Arti setiap kode error dan cara menanganinya](https://docs.yescaptcha.com/id/api/errors.md) - [**Batas tugas bersamaan dan jeda otomatis**Apa yang terjadi jika melebihi batas atau terlalu banyak error](https://docs.yescaptcha.com/id/api/rate-limits.md) - [**Penagihan dan pengembalian poin**Poin, pemotongan di muka, pengembalian poin, dan pengembalian poin setelah laporan](https://docs.yescaptcha.com/id/getting-started/billing.md) - [**Hubungi kami**WeChat, QQ, Telegram, email; jam layanan 9:00–21:00 (UTC+8)](https://docs.yescaptcha.com/id/help/contact.md) - [**Dasbor**Daftar, ambil ClientKey, isi saldo](https://yescaptcha.com/) --- # Pengantar > Apa itu YesCaptcha. Selesaikan reCAPTCHA, hCaptcha, Turnstile, FunCaptcha, dan captcha gambar melalui API atau ekstensi browser, dengan pemotongan poin per tugas dan pengembalian poin otomatis jika gagal. Source: https://docs.yescaptcha.com/id/getting-started/introduction/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/getting-started/introduction/ YesCaptcha adalah layanan pengenalan captcha. Anda mengirim informasi captcha ke API YesCaptcha, lalu mendapatkan kembali token yang bisa langsung dikirim ke situs target, atau hasil pengenalan gambar. Layanan ini mendukung reCAPTCHA (v2, v3, Enterprise), hCaptcha, Cloudflare Turnstile, halaman verifikasi Cloudflare, FunCaptcha, AWS WAF, bCaptcha, dan captcha gambar huruf-angka. Poin dipotong per tugas, 1,000 poin = ¥1; tugas yang gagal atau timeout otomatis dikembalikan poinnya. YesCaptcha hanya boleh digunakan untuk tujuan yang sah. Penggunaan untuk tujuan ilegal dilarang. ## Dua cara penggunaan | | API | Ekstensi browser (YesCaptcha Assistant) | | --- | --- | --- | | Cocok untuk | Developer yang bisa menulis kode dan memproses captcha secara massal dalam program | Pengguna yang tidak menulis kode dan bekerja di browser | | Cara pakai | Panggil `createTask` dan `getTaskResult` dengan `clientKey` | Pasang ekstensi, isi `clientKey`; captcha dikenali dan diklik secara otomatis | | Dukungan | Semua jenis tugas yang tercantum di situs ini | Soal gambar dan captcha karakter untuk reCAPTCHA v2, hCaptcha, FunCaptcha, AWS WAF, dan bCaptcha | | Biaya | Poin dipotong sesuai jenis tugas | Ekstensi gratis; poin dipotong sesuai API yang digunakan untuk pengenalan | Kedua cara ini memakai akun, `clientKey`, dan saldo yang sama. ## Tiga jenis hasil pengenalan - **token**: sebagian besar jenis tugas reCAPTCHA, hCaptcha, Turnstile, dan FunCaptcha. Hasilnya berupa string yang diisikan ke formulir atau permintaan di halaman web agar lolos verifikasi, tanpa perlu mengeklik gambar. Semuanya asinkron: buat tugas terlebih dahulu, lalu periksa hasilnya setiap 5 detik. - **Hasil pengenalan gambar**: jenis yang namanya berakhiran `Classification`. Anda mengirim gambar captcha, lalu mendapatkan gambar atau posisi mana yang harus diklik; program Anda yang mengeklik di browser. Sinkron: satu permintaan langsung mengembalikan hasilnya. - **Teks atau Cookie**: pengenalan captcha gambar huruf-angka mengembalikan teks di dalam gambar; halaman verifikasi Cloudflare mengembalikan Cookie setelah verifikasi lolos. Semua jenis tugas dan harganya ada di [Jenis tugas dan harga](https://docs.yescaptcha.com/id/tasks.md). ## Mulai dari sini [Mulai cepat](https://docs.yescaptcha.com/id/getting-started/quickstart.md)Daftar, ambil clientKey, kirim permintaan pertama [Alamat endpoint](https://docs.yescaptcha.com/id/getting-started/endpoints.md)Endpoint global dan endpoint Tiongkok [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md)Poin, pemotongan di muka, pengembalian poin, pengembalian poin setelah laporan [Ekstensi browser](https://docs.yescaptcha.com/id/extension.md)Tanpa kode, captcha dikenali otomatis di browser ## SDK komunitas SDK dari pengguna, bukan resmi, harap evaluasi sendiri sebelum digunakan: lihat [Contoh kode dan SDK](https://docs.yescaptcha.com/id/samples.md). --- # Mulai Cepat > Kirim permintaan YesCaptcha pertama Anda dalam 5 menit. Daftar, salin ClientKey, isi saldo, lalu kenali gambar captcha dengan curl, Python, atau Node.js (ImageToTextTaskOcrBase, sinkron, 2 poin per gambar). Source: https://docs.yescaptcha.com/id/getting-started/quickstart/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/getting-started/quickstart/ Halaman ini mengirim permintaan pertama dengan jenis tugas paling sederhana, `ImageToTextTaskOcrBase`, yang membaca huruf dan angka di dalam gambar. Jenis ini sinkron: satu permintaan `createTask` langsung mengembalikan hasil, biayanya 2 poin (≈ $0.30 / 1k) per gambar, dan tidak membutuhkan situs pihak ketiga, sehingga cocok untuk memastikan akun dan kode Anda sudah berfungsi. 1. **Daftar akun** Buka [yescaptcha.com](https://yescaptcha.com/), lalu daftar dan masuk. 2. **Salin ClientKey** Setelah masuk, buka Dasbor ([yescaptcha.com/dashboard.html](https://yescaptcha.com/dashboard.html)), cari “ClientKey Anda”, lalu klik salin. Salin seluruh nilainya. > **Perhatian:** Semua permintaan API diautentikasi dengan ClientKey, sehingga siapa pun yang memilikinya dapat memakai saldo Anda. Jangan membagikannya dan jangan menaruhnya di kode publik; jika bocor, atur ulang di tempat yang sama. 3. **Isi saldo** Saldo harus lebih dari 10 poin untuk dapat membuat tugas. Metode pembayaran dan bonus VIP ada di [Top up dan VIP](https://docs.yescaptcha.com/id/account/recharge.md). 4. **Pastikan ClientKey berfungsi** `getBalance` mengecek saldo dan tidak memotong poin: ```bash curl -s https://api.yescaptcha.com/getBalance \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY"}' ``` Jika hasilnya `{"errorId": 0, "balance": 12345, ...}`, berarti ClientKey sudah bisa dipakai; `balance` adalah sisa poin. Jika hasilnya `ERROR_KEY_DOES_NOT_EXIST`, berarti kunci salah disalin. 5. **Kenali sebuah gambar** Unduh gambar contoh [captcha.jpg](https://docs.yescaptcha.com/samples/captcha.jpg) (atau pakai gambar captcha Anda sendiri), simpan ClientKey di variabel lingkungan, lalu jalankan salah satu skrip: ```bash export YESCAPTCHA_CLIENT_KEY=your_client_key ``` **curl** quickstart.sh ```bash #!/usr/bin/env bash # First request: read an alphanumeric image captcha with ImageToTextTaskOcrBase (synchronous, 2 points per image) # Usage: YESCAPTCHA_CLIENT_KEY=your_client_key bash quickstart.sh captcha.png set -euo pipefail IMAGE="${1:-captcha.png}" BODY=$(base64 < "$IMAGE" | tr -d '\n') # no "data:" prefix, no line breaks curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d "{\"clientKey\": \"${YESCAPTCHA_CLIENT_KEY}\", \"task\": {\"type\": \"ImageToTextTaskOcrBase\", \"body\": \"${BODY}\"}}" echo ``` **Python** quickstart.py ```python """First request: read an alphanumeric image captcha with ImageToTextTaskOcrBase (synchronous, 2 points per image). Usage: export YESCAPTCHA_CLIENT_KEY=your_client_key python quickstart.py captcha.png """ import base64 import os import sys import requests CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] image_path = sys.argv[1] if len(sys.argv) > 1 else "captcha.png" with open(image_path, "rb") as f: body = base64.b64encode(f.read()).decode() # no "data:" prefix r = requests.post( "https://api.yescaptcha.com/createTask", json={ "clientKey": CLIENT_KEY, "task": {"type": "ImageToTextTaskOcrBase", "body": body}, }, timeout=30, ) data = r.json() if data.get("errorId"): raise SystemExit(f"{data.get('errorCode')}: {data.get('errorDescription')}") print("text:", data["solution"]["text"]) ``` **Node.js** quickstart.mjs ```js // First request: read an alphanumeric image captcha with ImageToTextTaskOcrBase (synchronous, 2 points per image). // Usage: YESCAPTCHA_CLIENT_KEY=your_client_key node quickstart.mjs captcha.png import { readFileSync } from 'node:fs'; const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; const body = readFileSync(process.argv[2] ?? 'captcha.png').toString('base64'); // no "data:" prefix const res = await fetch('https://api.yescaptcha.com/createTask', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, task: { type: 'ImageToTextTaskOcrBase', body } }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); console.log('text:', data.solution.text); ``` Jalankan `bash quickstart.sh captcha.jpg`, `python quickstart.py captcha.jpg`, atau `node quickstart.mjs captcha.jpg`. Python memerlukan `pip install requests` terlebih dahulu; Node.js memerlukan versi 18 atau lebih baru. 6. **Lihat hasilnya** Jika berhasil, Anda mendapatkan: ```json { "errorId": 0, "status": "ready", "solution": { "text": "LMResm" }, "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b" } ``` `errorId` bernilai 0 berarti berhasil, dan teks hasil pengenalan ada di `solution.text`. Jika `errorId` bernilai 1, lihat `errorCode`; artinya dijelaskan di [Kode error](https://docs.yescaptcha.com/id/api/errors.md). ## Langkah berikutnya - Jenis yang mengembalikan token seperti reCAPTCHA dan hCaptcha bersifat **asinkron**: `createTask` mengembalikan `taskId` terlebih dahulu, lalu Anda memanggil `getTaskResult` setiap 5 detik. Alur lengkapnya ada di [Permintaan dan respons](https://docs.yescaptcha.com/id/api/overview.md); contohnya di [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md). - Memilih jenis tugas: [Jenis tugas dan harga](https://docs.yescaptcha.com/id/tasks.md). - Klien yang bisa langsung disalin ke proyek Anda: [Python](https://docs.yescaptcha.com/id/samples/python.md), [Node.js](https://docs.yescaptcha.com/id/samples/nodejs.md). - Tanpa kode: [Ekstensi browser](https://docs.yescaptcha.com/id/extension.md). --- # Endpoint > Dua endpoint YesCaptcha API, global api.yescaptcha.com dan Tiongkok cn.yescaptcha.com. Hanya menerima HTTPS POST dengan JSON; buat dan periksa tugas di endpoint yang sama. Source: https://docs.yescaptcha.com/id/getting-started/endpoints/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/getting-started/endpoints/ YesCaptcha API memiliki dua endpoint dengan antarmuka dan parameter yang sama persis. Pilih sesuai lokasi server Anda: | Endpoint | Alamat | Cocok untuk | | --- | --- | --- | | Endpoint global | `https://api.yescaptcha.com` | Server di luar Tiongkok daratan | | Endpoint Tiongkok | `https://cn.yescaptcha.com` | Server di Tiongkok daratan | URL metode = alamat endpoint + nama metode, misalnya untuk membuat tugas: - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) ## Aturan - Hanya gunakan HTTPS. - Semua metode kecuali [/useragent](https://docs.yescaptcha.com/id/api/useragent.md) menggunakan `POST`, dengan body berupa JSON dan header `Content-Type: application/json`. Ukuran body tidak boleh melebihi 6 MB. - Autentikasi menggunakan `clientKey` di body request; tidak perlu header lain. > **Catatan:** Periksa tugas dengan `getTaskResult` di endpoint yang sama tempat Anda membuatnya. Jangan campur kedua endpoint. ## Semua metode | Metode | Fungsi | Keterangan | | --- | --- | --- | | [createTask](https://docs.yescaptcha.com/id/api/create-task.md) | Membuat tugas | Jenis sinkron langsung mengembalikan hasil | | [getTaskResult](https://docs.yescaptcha.com/id/api/get-task-result.md) | Memeriksa hasil tugas | Untuk jenis asinkron, lakukan polling setiap 5 detik | | [getBalance](https://docs.yescaptcha.com/id/api/get-balance.md) | Memeriksa saldo | Tanpa pemotongan poin | | [getSoftID](https://docs.yescaptcha.com/id/api/get-soft-id.md) | Memeriksa ID developer | Untuk bagi hasil developer | | [report](https://docs.yescaptcha.com/id/api/report.md) | Melaporkan hasil pengenalan | Jenis pengenalan gambar dapat mengajukan pengembalian poin setelah laporan | | [useragent](https://docs.yescaptcha.com/id/api/useragent.md) | Mendapatkan User-Agent yang disarankan | `GET`, digunakan untuk hCaptcha | Jika tidak dapat terhubung ke API, lihat [Masalah koneksi dan jaringan](https://docs.yescaptcha.com/id/help/troubleshooting.md). --- # Penagihan dan pengembalian poin > Cara YesCaptcha memotong poin. 1,000 poin = ¥1, harga tetap per jenis tugas; tugas yang gagal dan timeout dikembalikan poinnya, permintaan yang mengembalikan error tidak dipotong; saldo harus lebih dari 10 poin; laporan pengenalan gambar yang gagal dikembalikan poinnya setelah sekitar 24 jam. Source: https://docs.yescaptcha.com/id/getting-started/billing/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/getting-started/billing/ YesCaptcha memotong poin per tugas: setiap jenis tugas punya harga tetap, 1,000 poin = ¥1. Misalnya `NoCaptchaTaskProxyless` dikenai 15 poin (≈ $2.25 / 1k) per tugas. Harga setiap jenis ada di [Jenis tugas dan harga](https://docs.yescaptcha.com/id/tasks.md). > **Tips:** Anda hanya membayar tugas yang berhasil: tugas yang gagal dikenali atau timeout otomatis dikembalikan poinnya, dan permintaan yang mengembalikan error tidak dipotong. ## Kapan poin dipotong - **Jenis asinkron** (sebagian besar jenis yang mengembalikan token): poin dipotong saat tugas berhasil dibuat. Jika kemudian gagal dikenali (`ERROR_CAPTCHA_UNSOLVABLE` dan sejenisnya) atau timeout (`ERROR_TASK_TIMEOUT`, biasanya 110 detik), poin dikembalikan otomatis. - **Jenis sinkron** (pengenalan gambar, `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle`): poin dipotong saat hasil pengenalan berhasil dikembalikan. - Permintaan yang langsung mengembalikan error saat membuat tugas (parameter salah, saldo tidak cukup, melebihi batas tugas bersamaan, dan sebagainya) tidak dipotong. ## Saldo - Saldo harus **lebih dari 10 poin** untuk membuat tugas, jika tidak akan mengembalikan `ERROR_ZERO_BALANCE`. - Gunakan [getBalance](https://docs.yescaptcha.com/id/api/get-balance.md) untuk memeriksa saldo; tidak ada pemotongan poin. - Untuk isi saldo dan bonus VIP, lihat [Isi saldo dan VIP](https://docs.yescaptcha.com/id/account/recharge.md): setelah total isi saldo mencapai level VIP, setiap isi saldo berikutnya mendapat bonus poin sesuai persentase. ## Jenis dengan harga yang bergantung pada kasus - **Pengenalan gambar reCAPTCHA v2** (`ReCaptchaV2Classification`): gambar kecil 1x1 dan gambar besar 3x3 atau 4x4 harganya berbeda, lihat [Pengenalan gambar reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md). - **Pengenalan gambar hCaptcha** (`HCaptchaClassification`): tidak dipotong jika tidak ada target yang dikenali (hasil kosong). ## Pengembalian poin setelah melaporkan kesalahan pengenalan Jika hasil pengenalan gambar salah klik, Anda dapat melaporkannya dengan [report](https://docs.yescaptcha.com/id/api/report.md), dan poin akan dikembalikan jika memenuhi syarat: - Hanya berlaku untuk 5 jenis pengenalan gambar: `FunCaptchaClassification`, `HCaptchaClassification`, `ReCaptchaV2Classification`, `AwsClassification`, `bCaptchaClassification`. - Laporkan **dalam 1 jam** setelah tugas dibuat; satu tugas hanya dihitung sekali. - Pengembalian tidak langsung, melainkan diselesaikan sekaligus **setelah sekitar 24 jam**. - Saat penyelesaian, laporan Anda dibandingkan dengan pengguna lain pada periode dan pertanyaan yang sama: jika tingkat kegagalan yang Anda laporkan jelas lebih tinggi daripada tingkat pada periode yang sama, poin dikembalikan sesuai tingkat kegagalan periode tersebut. - Laporkan keberhasilan dan kegagalan secara jujur; laporan yang hanya berisi kegagalan tidak dipakai sebagai acuan periode, dan tingkat kegagalan dihitung dari semua tugas yang Anda buat. - Jika ragu dengan hasil penyelesaian, Anda dapat mengajukan banding dengan [menghubungi dukungan](https://docs.yescaptcha.com/id/help/contact.md). Untuk jenis yang mengembalikan token (reCAPTCHA, hCaptcha, Turnstile, dan sebagainya), lolos atau tidaknya ditentukan oleh situs target, sehingga laporan tidak mendapat pengembalian poin. ## Kondisi tanpa pemotongan poin | Kondisi | Respons | | --- | --- | | Parameter salah, jenis tidak ada, `clientKey` salah | Kode error yang sesuai | | Saldo tidak lebih dari 10 poin | `ERROR_ZERO_BALANCE` | | Melebihi batas tugas bersamaan | `ERROR_THREADS_MAXIMUM`, lihat [Batas tugas bersamaan dan jeda otomatis](https://docs.yescaptcha.com/id/api/rate-limits.md) | | Selama jeda otomatis | `ERROR_IP_BLOCKED_5MIN` | | sitekey atau domain yang sudah dinyatakan tidak valid (selama masa cache) | Kode error asli, dengan `cached: true` | | Pengenalan gagal atau timeout | Poin yang sudah dipotong dikembalikan otomatis | ## Bagi hasil dan hadiah - Saat Anda memakai software atau ekstensi milik orang lain, tugas bisa membawa ID developer, dan developer mendapat bagi hasil tanpa memengaruhi pemotongan poin Anda. Jika Anda mengembangkan software sendiri, lihat [Bagi hasil developer](https://docs.yescaptcha.com/id/account/developer.md). - Untuk mengundang orang lain mendaftar, lihat [Hadiah referral](https://docs.yescaptcha.com/id/account/referral.md). --- # Permintaan dan respons > Ketentuan umum YesCaptcha API: POST JSON, autentikasi dengan ClientKey, format respons errorId, tugas sinkron dan asinkron, polling setiap 5 detik, batas waktu 110 detik, hasil disimpan sekitar 10 menit, bahasa pesan mengikuti Accept-Language. Source: https://docs.yescaptcha.com/id/api/overview/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/overview/ Semua method menggunakan HTTPS `POST` dengan body JSON (hanya `/useragent` yang `GET`), diautentikasi dengan `clientKey` di body, dan mengembalikan JSON: `errorId` bernilai 0 berarti berhasil, 1 berarti gagal dan disertai `errorCode`. Menyelesaikan satu captcha terdiri dari dua langkah: `createTask` membuat tugas, lalu `getTaskResult` dipanggil setiap 5 detik untuk memeriksa hasil. Jenis sinkron langsung mengembalikan hasil di `createTask`. ## Permintaan ```bash curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "task": {"type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE"}}' ``` - Endpoint: `https://api.yescaptcha.com` (global) atau `https://cn.yescaptcha.com` (Tiongkok), lihat [Alamat akses](https://docs.yescaptcha.com/id/getting-started/endpoints.md). - Body berupa JSON, dikirim dengan header `Content-Type: application/json`, maksimal 6 MB. JSON tidak boleh berisi komentar. - Setiap permintaan harus menyertakan `clientKey`, salin lengkap sesuai nilai yang tampil di Dasbor. > **Perhatian:** Pada Python requests gunakan `json=data`, bukan `data=data`. Yang terakhir mengirim form dan akan mengembalikan `ERROR_TASK_ABSENT` atau `ERROR_REQUIRED_FIELDS`. ## Respons Berhasil: ```json { "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" } ``` Gagal: ```json { "errorId": 1, "errorCode": "ERROR_ZERO_BALANCE", "errorDescription": "帐户余额不足" } ``` | Field | Keterangan | | --- | --- | | `errorId` | 0 berhasil, 1 gagal | | `errorCode` | Kode error saat gagal; arti dan cara penanganannya ada di [Kode error](https://docs.yescaptcha.com/id/api/errors.md) | | `errorDescription` | Keterangan teks tentang penyebab kegagalan | | `taskId` | ID tugas | | `status` | `processing` (sedang diproses) atau `ready` (selesai) | | `solution` | Hasil pengenalan; field-nya berbeda menurut jenis tugas, lihat halaman masing-masing jenis tugas | Gunakan `errorId` dan `errorCode` untuk menentukan hasil, jangan mengurai teks `errorDescription` karena bisa berubah. ## Sinkron dan asinkron | | Asinkron | Sinkron | | --- | --- | --- | | Jenis apa saja | Jenis yang mengembalikan token (reCAPTCHA, hCaptcha, Turnstile, FunCaptcha), halaman verifikasi Cloudflare, `ImageToTextTask`, `ImageToTextTaskM1` | Pengenalan gambar (nama berakhiran `Classification`), `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle` | | `createTask` mengembalikan | `taskId` | `status: "ready"` dan `solution` | | Cara mendapat hasil | Panggil `getTaskResult` setiap 5 detik | Tidak perlu memeriksa lagi | Kolom “Cara pengembalian” di [Jenis tugas dan harga](https://docs.yescaptcha.com/id/tasks.md) menunjukkan mana yang berlaku untuk setiap jenis. ## Polling 1. Setelah `createTask` mengembalikan `taskId`, tunggu 5 detik lalu panggil `getTaskResult`. 2. Jika mengembalikan `status: "processing"`, tunggu 5 detik lagi lalu coba kembali; jika `status: "ready"`, hasilnya ada di `solution`. 3. Jika mengembalikan `errorId: 1`, hentikan polling untuk tugas ini dan tangani sesuai `errorCode`. - Permintaan berulang untuk `taskId` yang sama dalam 5 detik langsung mengembalikan `processing`; memeriksa lebih sering tidak membuat hasil lebih cepat didapat. - Sebuah tugas umumnya diproses paling lama 110 detik (beberapa jenis 180 sampai 220 detik); jika melewati batas, mengembalikan `ERROR_TASK_TIMEOUT` dan poin dikembalikan otomatis. - Hasil disimpan di server sekitar 10 menit; setelah itu `taskId` tidak berlaku dan pemeriksaan mengembalikan `ERROR_TASKID_INVALID`. - Memeriksa hasil tidak memotong poin; pemotongan poin hanya terjadi saat membuat tugas. ## Bahasa teks pesan Untuk pesan jeda otomatis, cache parameter tidak valid, dan penghentian polling, `errorDescription` memilih bahasa berdasarkan header `Accept-Language`: jika diawali `zh` dikembalikan bahasa Mandarin, bahasa lain dikembalikan bahasa Inggris, dan jika header ini tidak ada, keduanya dikembalikan. Keterangan untuk kode error lain tidak terpengaruh. ## Langkah berikutnya - [createTask: membuat tugas](https://docs.yescaptcha.com/id/api/create-task.md) - [getTaskResult: mengambil hasil](https://docs.yescaptcha.com/id/api/get-task-result.md) - [Batas tugas bersamaan dan jeda otomatis](https://docs.yescaptcha.com/id/api/rate-limits.md): terlalu banyak error akan menyebabkan jeda beberapa menit --- # createTask — membuat tugas > POST /createTask membuat tugas captcha. Parameter permintaan (clientKey, task, softID), urutan pemeriksaan, jenis asinkron mengembalikan taskId dan jenis sinkron langsung mengembalikan solution; saldo harus lebih dari 10 poin. Source: https://docs.yescaptcha.com/id/api/create-task/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/create-task/ `createTask` membuat tugas pengenalan; `task.type` menentukan captcha mana yang akan diselesaikan. Jenis asinkron mengembalikan `taskId`, yang kemudian Anda gunakan di [getTaskResult](https://docs.yescaptcha.com/id/api/get-task-result.md) untuk mengambil hasil; jenis sinkron langsung mengembalikan hasilnya. > **Catatan:** Poin dipotong saat tugas berhasil dibuat, dan saldo Anda harus lebih dari 10 poin untuk membuat tugas. Tugas yang gagal atau melewati batas waktu otomatis dikembalikan poinnya. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) ## Parameter permintaan | Field | Tipe | Wajib | Keterangan | | --- | --- | --- | --- | | `clientKey` | string | Ya | ClientKey akun Anda, salin dari dasbor [yescaptcha.com](https://yescaptcha.com/) | | `task` | object | Ya | Objek tugas. Harus memiliki `type`; field lainnya mengikuti jenis tugas (lihat halaman masing-masing jenis tugas) | | `softID` | integer | Tidak | ID developer. Sertakan ID Anda jika software buatan Anda dipakai orang lain agar mendapat bagi hasil; lihat [Bagi hasil developer](https://docs.yescaptcha.com/id/account/developer.md) | ## Contoh permintaan Mengenali captcha gambar (sinkron): ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE" } } ``` Mendapatkan token reCAPTCHA v2 (asinkron): ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } } ``` Field `task` untuk setiap jenis tugas ada di halaman-halaman di bawah [Jenis tugas dan harga](https://docs.yescaptcha.com/id/tasks.md). ## Respons Jenis asinkron: ```json { "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" } ``` Simpan `taskId`, lalu mulai memanggil `getTaskResult` setelah 5 detik. Jenis sinkron: ```json { "errorId": 0, "status": "ready", "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b", "solution": { "text": "LMResm" } } ``` Gagal: ```json { "errorId": 1, "errorCode": "ERROR_TASK_NOT_SUPPORTED", "errorDescription": "任务类型不正确或不受支持" } ``` ## Urutan pemeriksaan Server memeriksa permintaan dengan urutan berikut dan mengembalikan error pertama yang ditemukan, tanpa pemotongan poin: 1. Body berupa JSON yang valid: `ERROR_REQUEST_FORMATS` 2. `clientKey` disertakan: `ERROR_REQUIRED_FIELDS` 3. `clientKey` ada: `ERROR_KEY_DOES_NOT_EXIST` 4. Tidak sedang dijeda otomatis: `ERROR_IP_BLOCKED_5MIN` (lihat [Batas tugas bersamaan dan jeda otomatis](https://docs.yescaptcha.com/id/api/rate-limits.md)) 5. Saldo lebih dari 10 poin: `ERROR_ZERO_BALANCE` 6. `task` disertakan: `ERROR_TASK_ABSENT` 7. `task.type` ada: `ERROR_TASK_NOT_SUPPORTED` 8. Semua field wajib terisi: `ERROR_REQUIRED_FIELDS` (`errorDescription` menyebutkan field yang kurang) 9. Untuk tugas gambar, gambarnya valid: `ERROR_ZERO_CAPTCHA_FILESIZE`, `ERROR_IMAGE_TYPE_NOT_SUPPORTED`, dan lainnya ## Contoh lengkap Membuat tugas dan melakukan polling hasilnya (jenis asinkron): **curl** ```bash curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } }' # Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds: curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}' ``` **Python** solve.py ```python import os import time import requests API = "https://api.yescaptcha.com" CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id) solution = solve({ "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", }) print(solution["gRecaptchaResponse"]) ``` **Node.js** solve.mjs ```js const API = 'https://api.yescaptcha.com'; const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data; } async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`); } const solution = await solve({ type: "NoCaptchaTaskProxyless", websiteURL: "https://www.google.com/recaptcha/api2/demo", websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", }); console.log(solution.gRecaptchaResponse); ``` --- # getTaskResult — mengambil hasil > POST /getTaskResult memeriksa hasil tugas asinkron. Lakukan polling setiap 5 detik, tunggu terus saat processing, ambil solution saat ready, dan berhenti jika terjadi error; tugas berjalan hingga sekitar 110 detik, hasil disimpan sekitar 10 menit, dan pemeriksaan tidak memotong poin. Source: https://docs.yescaptcha.com/id/api/get-task-result/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/get-task-result/ `getTaskResult` memeriksa hasil tugas asinkron. Panggil setiap 5 detik setelah tugas dibuat: jika mengembalikan `processing`, tunggu terus; jika `ready`, hasilnya ada di `solution`; jika mengembalikan error, berhenti. Pemeriksaan tidak memotong poin, berapa pun jumlah pemeriksaannya. - POST `https://api.yescaptcha.com/getTaskResult` (Endpoint global) - POST `https://cn.yescaptcha.com/getTaskResult` (Endpoint Tiongkok) ## Parameter permintaan | Field | Tipe | Wajib | Keterangan | | --- | --- | --- | --- | | `clientKey` | string | Ya | ClientKey Anda, sama dengan yang digunakan saat membuat tugas | | `taskId` | string | Ya | ID tugas yang dikembalikan oleh [createTask](https://docs.yescaptcha.com/id/api/create-task.md) | ```json { "clientKey": "YOUR_CLIENT_KEY", "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" } ``` ## Hasil yang dikembalikan | Kondisi | Respons | Yang harus dilakukan | | --- | --- | --- | | Sedang diproses | `errorId` bernilai 0, `status` bernilai `processing` | Periksa lagi 5 detik kemudian | | Selesai | `errorId` bernilai 0, `status` bernilai `ready`, hasil ada di `solution` | Ambil `solution`; field-nya dijelaskan di halaman masing-masing jenis tugas | | Gagal dikenali | `errorId` bernilai 1, `errorCode` bernilai `ERROR_CAPTCHA_UNSOLVABLE` | Poin sudah dikembalikan otomatis, Anda dapat membuat tugas baru | | Timeout | `errorId` bernilai 1, `errorCode` bernilai `ERROR_TASK_TIMEOUT` | Poin sudah dikembalikan otomatis, Anda dapat membuat tugas baru | | Tugas tidak ada atau sudah kedaluwarsa | `errorId` bernilai 1, `errorCode` bernilai `ERROR_TASKID_INVALID` | Berhenti memeriksa `taskId` ini | Contoh saat selesai (reCAPTCHA v2): ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." } } ``` ## Aturan - **Periksa setiap 5 detik.** Pemeriksaan berulang untuk `taskId` yang sama dalam 5 detik langsung mengembalikan `processing`; memeriksa lebih sering tidak membuat hasil lebih cepat. - **Tugas diproses paling lama sekitar 110 detik** (sebagian kecil jenis 180 sampai 220 detik). Jika melewati batas, dikembalikan `ERROR_TASK_TIMEOUT` dan poin dikembalikan otomatis. Disarankan menetapkan batas tunggu di program sekitar 3 menit. - **Hasil disimpan sekitar 10 menit**, setelah itu `taskId` tidak berlaku dan mengembalikan `ERROR_TASKID_INVALID`. Gunakan hasil sesegera mungkin: masa berlaku token sendiri lebih singkat (reCAPTCHA sekitar 120 detik). - **Berhenti jika terjadi error.** Setelah `errorId: 1` dikembalikan, memeriksa `taskId` yang sama lagi tidak akan mengubah hasil; mulai pemeriksaan ke-3 untuk tugas yang sudah berakhir, bagian akhir `errorDescription` akan menyarankan untuk berhenti polling. `ERROR_TASKID_INVALID` dihitung dalam jumlah error untuk [jeda otomatis](https://docs.yescaptcha.com/id/api/rate-limits.md) (ID yang sama hanya dihitung pertama kali). - Periksa di endpoint yang sama dengan tempat tugas dibuat. - `getTaskResult` tidak terpengaruh jeda otomatis: tugas yang dibuat sebelum jeda tetap dapat diperiksa seperti biasa. --- # getBalance — Cek Saldo > POST /getBalance menampilkan saldo akun dalam poin (1,000 poin = ¥1) serta saldo bagi hasil developer dan hadiah referral. Tidak memotong poin; bisa dipakai untuk memverifikasi ClientKey. Source: https://docs.yescaptcha.com/id/api/get-balance/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/get-balance/ `getBalance` mengembalikan sisa poin akun (1,000 poin = ¥1) serta saldo bagi hasil developer dan hadiah referral (dalam yuan). Tidak ada pemotongan poin, sehingga sering dipakai untuk memastikan `clientKey` sudah benar. - POST `https://api.yescaptcha.com/getBalance` (Endpoint global) - POST `https://cn.yescaptcha.com/getBalance` (Endpoint Tiongkok) ## Parameter permintaan | Field | Tipe | Wajib | Keterangan | | --- | --- | --- | --- | | `clientKey` | string | Ya | ClientKey akun | ```json { "clientKey": "YOUR_CLIENT_KEY" } ``` ## Hasil yang dikembalikan ```json { "errorId": 0, "balance": 1071810, "softBalance": 36.0098, "inviteBalance": 0, "inviteBy": 0 } ``` | Field | Tipe | Keterangan | | --- | --- | --- | | `balance` | integer | Saldo akun dalam poin (1,000 poin = ¥1). Harus lebih dari 10 poin untuk membuat tugas | | `softBalance` | number | Saldo bagi hasil developer dalam yuan, lihat [Bagi hasil developer](https://docs.yescaptcha.com/id/account/developer.md) | | `inviteBalance` | number | Saldo hadiah referral dalam yuan, lihat [Hadiah referral](https://docs.yescaptcha.com/id/account/referral.md) | | `inviteBy` | integer | ID pengguna yang mengundang Anda mendaftar, bernilai 0 jika tidak ada | | `keyQuotaRemaining` | integer | Sisa batas pengeluaran `clientKey` ini untuk periode berjalan, dalam poin. Field ini hanya ada pada `clientKey` yang memiliki batas; `balance` lalu berisi nilai yang lebih kecil antara saldo akun dan sisa batas. `clientKey` tanpa batas tidak menyertakan field ini | `clientKey` yang salah mengembalikan `ERROR_KEY_DOES_NOT_EXIST`. Jika `clientKey` memiliki whitelist IP dan permintaan datang dari IP yang tidak terdaftar, hasilnya `ERROR_KEY_IP_NOT_ALLOWED`. `getBalance` terkena [jeda otomatis](https://docs.yescaptcha.com/id/api/rate-limits.md): selama jeda, hasilnya `ERROR_IP_BLOCKED_5MIN`. ## Contoh **curl** get-balance.sh ```bash #!/usr/bin/env bash # Check the balance. getBalance is free and is a quick way to verify your clientKey set -euo pipefail curl -s https://api.yescaptcha.com/getBalance \ -H 'Content-Type: application/json' \ -d "{\"clientKey\": \"${YESCAPTCHA_CLIENT_KEY}\"}" echo ``` **Python** get_balance.py ```python """Check the balance. getBalance is free and is a quick way to verify your clientKey.""" import os import requests CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] r = requests.post( "https://api.yescaptcha.com/getBalance", json={"clientKey": CLIENT_KEY}, timeout=30, ) data = r.json() if data.get("errorId"): # e.g. ERROR_KEY_DOES_NOT_EXIST when the clientKey is wrong print("error:", data.get("errorCode"), data.get("errorDescription")) else: print("balance (points):", data["balance"]) ``` **Node.js** get-balance.mjs ```js // Check the balance. getBalance is free and is a quick way to verify your clientKey. Node.js 18+ const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; const res = await fetch('https://api.yescaptcha.com/getBalance', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY }), }); const data = await res.json(); if (data.errorId) { // e.g. ERROR_KEY_DOES_NOT_EXIST when the clientKey is wrong console.log('error:', data.errorCode, data.errorDescription); } else { console.log('balance (points):', data.balance); } ``` --- # getSoftID — cek ID developer > POST /getSoftID mengembalikan ID developer Anda (softID) dan akumulasi bagi hasil. Sertakan softID di permintaan createTask yang dikirim perangkat lunak Anda untuk pengguna lain agar Anda mendapat bagi hasil. Source: https://docs.yescaptcha.com/id/api/get-soft-id/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/get-soft-id/ `getSoftID` mengembalikan ID developer Anda (`softID`) dan akumulasi bagi hasil developer Anda (dalam yuan). Saat perangkat lunak atau ekstensi yang Anda kembangkan dipakai orang lain, sertakan ID ini di permintaan `createTask` mereka, dan Anda mendapat bagi hasil dari pengeluaran mereka. Aturan bagi hasil dan penarikan: [Bagi hasil developer](https://docs.yescaptcha.com/id/account/developer.md). - POST `https://api.yescaptcha.com/getSoftID` (Endpoint global) - POST `https://cn.yescaptcha.com/getSoftID` (Endpoint Tiongkok) ## Parameter permintaan | Field | Tipe | Wajib | Keterangan | | --- | --- | --- | --- | | `clientKey` | string | Ya | ClientKey Anda sendiri (developer) | ```json { "clientKey": "YOUR_CLIENT_KEY" } ``` ## Hasil yang dikembalikan ```json { "errorId": 0, "softID": 3, "balance": 0.004 } ``` | Field | Tipe | Keterangan | | --- | --- | --- | | `softID` | integer | ID developer Anda | | `balance` | number | Akumulasi saldo bagi hasil developer, dalam yuan | ## Cara penggunaan Pada permintaan `createTask` yang dikirim pengguna perangkat lunak Anda, tambahkan field tingkat atas `softID`: ```json { "clientKey": "THE_USERS_CLIENT_KEY", "task": { "type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE" }, "softID": 3 } ``` > **Perhatian:** Letakkan `softID` di tingkat atas body permintaan, sejajar dengan `clientKey` dan `task`, dengan huruf besar-kecil yang persis sama. Jika diletakkan di dalam `task`, field ini tidak berlaku. `clientKey` adalah ClientKey milik pengguna sendiri, dan poin yang dipotong adalah poin pengguna; `softID` adalah ID developer Anda. --- # report — laporkan hasil tugas > POST /report memberi tahu YesCaptcha apakah hasil tugas benar atau salah; laporkan keberhasilan maupun kegagalan secara jujur. Tugas pengenalan gambar yang dilaporkan gagal dalam 1 jam setelah dibuat akan diselesaikan untuk pengembalian poin sekitar 24 jam kemudian. Source: https://docs.yescaptcha.com/id/api/report/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/report/ `report` dipakai untuk memberi tahu kami apakah hasil sekelompok tugas benar atau tidak. **Laporkan keberhasilan maupun kegagalan.** Untuk jenis pengenalan gambar, tugas yang dilaporkan “salah” dan memenuhi syarat akan dikembalikan poinnya sekitar 24 jam kemudian; hasil laporan juga dipakai untuk mengevaluasi dan meningkatkan pengenalan. - POST `https://api.yescaptcha.com/report` (Endpoint global) - POST `https://cn.yescaptcha.com/report` (Endpoint Tiongkok) ## Parameter permintaan | Field | Tipe | Wajib | Keterangan | | --- | --- | --- | --- | | `id` | array of string | Ya | Daftar ID tugas; bisa melaporkan beberapa sekaligus | | `isSuccess` | boolean | Ya | `true` jika hasil benar, `false` jika hasil salah | `clientKey` tidak diperlukan; ID tugas sudah cukup untuk mengidentifikasi tugasnya. ```json { "id": ["610ff5e0-68eb-11ef-95a6-22e70a0b794d", "65b88c06-68eb-11ef-8e9a-52540023ccb3"], "isSuccess": false } ``` ## Hasil yang dikembalikan ```json { "errorId": 0, "status": "success" } ``` ## Laporkan secara jujur Laporan dipakai untuk menghitung pengembalian poin sekaligus mengevaluasi dan meningkatkan pengenalan, jadi laporkan sesuai hasil sebenarnya: - Laporkan hasil yang benar dengan `isSuccess: true` dan yang salah dengan `false`. Laporan yang hanya berisi kegagalan, atau yang menandai semuanya gagal tanpa memedulikan hasil sebenarnya, tidak dijadikan acuan dalam statistik dan penyelesaian. - Tingkat kegagalan dihitung dari seluruh tugas yang Anda buat pada periode tersebut, bukan hanya tugas yang dilaporkan. Melaporkan lebih banyak kegagalan tidak menambah pengembalian poin: jika tingkat kegagalan Anda jelas lebih tinggi daripada periode yang sama, pengembalian poin hanya mengikuti tingkat kegagalan periode tersebut. - Jika satu verifikasi memakai beberapa gambar (misalnya FunCaptcha yang meminta 5 ronde) dan Anda tidak tahu gambar mana yang salah, Anda bisa melaporkan seluruh kelompok tugas itu sebagai gagal; jika verifikasi lolos, laporkan seluruh kelompoknya sebagai berhasil dengan cara yang sama. ## Pengembalian poin setelah laporan gagal - Hanya 5 jenis pengenalan gambar yang bisa mendapat pengembalian poin: `FunCaptchaClassification`, `HCaptchaClassification`, `ReCaptchaV2Classification`, `AwsClassification`, `bCaptchaClassification`. - Hanya laporan yang dibuat **dalam 1 jam** setelah tugas dibuat yang diperhitungkan; satu tugas hanya dikembalikan poinnya satu kali. - Pengembalian tidak dilakukan seketika, melainkan diselesaikan secara kolektif **sekitar 24 jam kemudian**. - Saat penyelesaian, tingkat kegagalan yang Anda laporkan dibandingkan dengan pengguna lain pada periode dan pertanyaan yang sama; jika tingkat kegagalan Anda jelas lebih tinggi dari periode tersebut, pengembalian poin mengikuti tingkat kegagalan periode itu. - Jika ada keberatan atas hasil penyelesaian, silakan ajukan banding melalui [hubungi Dukungan](https://docs.yescaptcha.com/id/help/contact.md). Untuk jenis yang mengembalikan token (reCAPTCHA, hCaptcha, Turnstile, FunCaptcha, dan lainnya), lolos atau tidaknya ditentukan oleh situs tujuan, sehingga laporan tidak menghasilkan pengembalian poin. Ringkasan aturan penagihan ada di [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). --- # useragent — mengambil User-Agent > GET https://api.yescaptcha.com/useragent mengembalikan User-Agent browser yang disarankan saat ini (teks biasa). Field userAgent pada tugas hCaptcha hanya menerima nilai ini. Source: https://docs.yescaptcha.com/id/api/useragent/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/useragent/ `/useragent` mengembalikan User-Agent browser yang disarankan saat ini, berupa teks biasa. Endpoint ini tidak memerlukan `clientKey` dan tidak memotong poin. Field `userAgent` pada tugas [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md) hanya menerima nilai ini; gunakan juga nilai yang sama saat Anda mengunjungi situs target agar token lebih mudah lolos. - GET `https://api.yescaptcha.com/useragent` (Endpoint global) - GET `https://cn.yescaptcha.com/useragent` (Endpoint Tiongkok) ## Contoh ```bash curl -s https://api.yescaptcha.com/useragent ``` Respons (nilai pada 2026-10-15, akan berubah mengikuti versi browser): ```text Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 ``` > **Catatan:** Nilai ini selalu diperbarui, jadi jangan ditulis permanen di kode. Cukup ambil sekali setiap kali program dijalankan. - Jika hasil pengenalan menyertakan `userAgent`, gunakan nilai dari hasil tersebut saat mengirim token. --- # Kode error > Arti dan cara menangani semua kode error YesCaptcha API, dikelompokkan menurut format permintaan, akun dan saldo, tugas bersamaan dan jeda, hasil tugas, parameter situs, gambar, proxy, dan server. Permintaan yang mengembalikan error tidak dipotong poinnya. Source: https://docs.yescaptcha.com/id/api/errors/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/errors/ Saat terjadi error, API mengembalikan `errorId: 1`, `errorCode` berisi kode error, dan `errorDescription` berisi penjelasan teks. Permintaan yang mengembalikan error tidak dipotong poinnya: error saat membuat tugas tidak dipotong, sedangkan tugas yang gagal dikenali atau timeout setelah dibuat poinnya dikembalikan otomatis. > **Tips:** Di program Anda, tentukan penanganan berdasarkan `errorCode`, jangan berdasarkan teks `errorDescription`, karena teks penjelasan bisa berubah. ```json { "errorId": 1, "errorCode": "ERROR_ZERO_BALANCE", "errorDescription": "帐户余额不足" } ``` ## Prinsip penanganan 1. **Error parameter** (format permintaan, ClientKey, jenis tugas, parameter situs, gambar) tidak akan berubah meski dikirim ulang, jadi perbaiki permintaan terlebih dahulu. 2. **Kegagalan pengenalan dan timeout** (`ERROR_CAPTCHA_UNSOLVABLE`, `ERROR_TASK_TIMEOUT`) dapat dicoba lagi dengan membuat tugas baru. 3. Setelah error, **hentikan polling** untuk `taskId` tersebut dan jangan mengirim ulang permintaan yang sama dengan frekuensi tinggi. 4. Untuk error yang bertanda “dihitung untuk jeda otomatis”, jika satu `clientKey` mengalaminya 100 kali dalam satu menit, pembuatan tugas dijeda selama 5 menit. Error bertanda “cache” tidak dihitung, tetapi selama masa cache, permintaan yang sama langsung mengembalikan error yang sama. Lihat [Batas tugas bersamaan dan jeda otomatis](https://docs.yescaptcha.com/id/api/rate-limits.md). ## Semua kode error ### request | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_REQUIRED_FIELDS` | Ada kolom wajib yang hilang (seperti `clientKey`, atau `websiteURL` / `websiteKey` untuk jenis tugas tersebut), atau isi permintaan bukan JSON | Tambahkan kolom yang hilang sesuai daftar di halaman jenis tugas, dan kirim JSON dengan `POST` serta `Content-Type: application/json` | | `ERROR_REQUEST_FORMATS` (Dihitung untuk jeda) | Isi permintaan bukan JSON yang valid | Buat isi permintaan dengan library JSON, bukan dengan menggabungkan string; JSON tidak boleh berisi komentar `//` | | `ERROR_TASK_ABSENT` (Dihitung untuk jeda) | Kolom `task` tidak ada pada pemanggilan `createTask` | Letakkan parameter tugas di dalam objek `task`. Dengan Python requests gunakan `json=data`, bukan `data=data` | | `ERROR_TASK_NOT_SUPPORTED` (Dihitung untuk jeda) | `task.type` salah eja atau jenis tersebut sudah dihentikan | Salin nama jenis dari "Jenis tugas dan harga"; nama bersifat peka huruf besar/kecil | | `ERROR_PAGE_NOT_FOUND` | Path yang diminta tidak ada | Periksa URL endpoint, misalnya `https://api.yescaptcha.com/createTask`; nama metode peka huruf besar/kecil | | `ERROR_BAD_REQUEST` | Permintaan tidak dapat diproses, biasanya karena metode HTTP salah (GET, bukan POST) atau nilai parameter tidak valid | Kirim JSON dengan `POST`, dan periksa tipe serta nilai parameter | | `ERROR_ILLEGAL_PARAMETERS` | Nilai parameter tidak valid. Umum terjadi pada halaman verifikasi Cloudflare: `websiteURL` bukan URL publik berawalan `http://` / `https://`, `postData` bukan objek, atau `requiredCookies` bukan array string (dikembalikan oleh createTask, tidak ada pemotongan poin); atau domain target tidak dapat di-resolve melalui proxy (dikembalikan oleh getTaskResult, poin dikembalikan secara otomatis) | Perbaiki nilainya sesuai tabel parameter di halaman jenis tugas. Jika domain tidak dapat di-resolve, periksa ejaan URL dan apakah proxy dapat mengakses situs tersebut | ### auth | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_KEY_DOES_NOT_EXIST` (Dihitung untuk jeda) | `clientKey` tidak ada: ada karakter yang bertambah atau hilang saat disalin, atau kunci sudah diatur ulang di Dasbor | Salin ulang kunci dari Dasbor yescaptcha.com, tanpa spasi atau baris baru | | `ERROR_KEY_EXPIRED` (Dihitung untuk jeda) | `clientKey` telah kedaluwarsa (dikembalikan oleh createTask dan getBalance, tidak ada pemotongan poin). Ada dua kemungkinan: tidak digunakan dalam waktu lama sehingga sistem menetapkan waktu kedaluwarsa untuk melindungi akun (pengingat dikirim melalui email sebelum kedaluwarsa), atau masa berlaku yang ditetapkan untuk `clientKey` ini telah lewat | Masuk ke Dasbor yescaptcha.com. Jika kedaluwarsa karena lama tidak digunakan, buat `clientKey` baru; saldo akan otomatis dipindahkan ke `clientKey` yang baru. Jika masa berlaku sudah diatur, ubah masa berlakunya atau gunakan `clientKey` lain. Lalu perbarui program Anda dengan `clientKey` yang baru | | `ERROR_KEY_IP_NOT_ALLOWED` | `clientKey` ini memiliki allowlist IP, dan IP asal permintaan tidak ada di dalamnya (dikembalikan oleh createTask dan getBalance, tidak ada pemotongan poin, tidak dihitung untuk jeda otomatis) | Masuk ke Dasbor yescaptcha.com, lalu tambahkan IP publik mesin yang mengirim permintaan ke allowlist `clientKey` ini, atau gunakan `clientKey` lain. Jika beberapa mesin memanggil API, tambahkan IP publik masing-masing (ini adalah IP yang memanggil API YesCaptcha, bukan proxy di parameter tugas) | | `ERROR_KEY_QUOTA_EXCEEDED` | `clientKey` ini memiliki batas pengeluaran, dan sisa batas untuk periode saat ini kurang dari biaya tugas ini (dikembalikan oleh createTask, tidak ada pemotongan poin, tidak dihitung untuk jeda otomatis). Batas dihitung dari poin yang benar-benar dipotong; poin yang dikembalikan untuk tugas yang gagal atau timeout akan kembali ke batas | Masuk ke Dasbor yescaptcha.com lalu naikkan batas `clientKey` ini, tunggu periode berikutnya (direset setiap hari, setiap Senin, atau setiap tanggal 1 tiap bulan, waktu Beijing; batas sekali pakai tidak direset), atau gunakan `clientKey` lain. `getBalance` mengembalikan sisa batas `clientKey` ini (`keyQuotaRemaining`) | | `ERROR_ZERO_BALANCE` | Saldo tidak cukup. Saldo harus di atas 10 poin untuk membuat tugas | Isi saldo lalu coba lagi. Gunakan `getBalance` untuk memeriksa saldo | ### limit | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_THREADS_MAXIMUM` (Kadang dihitung untuk jeda) | Terlalu banyak tugas jenis ini yang sedang diproses untuk akun tersebut. `limit` pada respons adalah batas saat ini. Permintaan tidak diproses dan tidak ada pemotongan poin | Tunggu permintaan yang sedang berjalan selesai, atau tunggu 1–2 detik lalu coba lagi; batasi jumlah permintaan yang menunggu hasil secara bersamaan | | `ERROR_IP_BLOCKED_5MIN` | `clientKey` ini menghasilkan terlalu banyak error dalam waktu singkat dan dijeda secara otomatis. `retryAfter` adalah sisa detik dan `blockReason` adalah error yang menyebabkannya | Perbaiki permintaan sesuai `blockReason` dan tunggu `retryAfter` detik; mengirim permintaan selama jeda tidak memperpanjangnya | | `ERROR_NO_SLOT_AVAILABLE` | Layanan pengenalan sedang kelebihan beban untuk sementara. Jika dikembalikan oleh createTask, tidak ada poin yang dipotong; tugas yang menunggu terlalu lama dalam antrean juga mengembalikannya dari getTaskResult, dan poinnya dikembalikan secara otomatis | Tunggu beberapa detik, lalu buat tugas lagi | ### task | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_TASKID_INVALID` (Dihitung untuk jeda) | `taskId` tidak ada, sudah kedaluwarsa (hasil disimpan sekitar 10 menit), milik `clientKey` lain, atau dibuat di endpoint yang lain | Hentikan polling untuk tugas ini. Lakukan query dengan endpoint dan `clientKey` yang sama dengan yang digunakan untuk membuatnya | | `ERROR_TASK_TIMEOUT` | Tugas tidak selesai dalam waktu yang ditentukan (biasanya 110 detik); poin dikembalikan secara otomatis | Buat tugas baru; jika terus timeout, coba jenis tugas lain untuk captcha yang sama | | `ERROR_CAPTCHA_UNSOLVABLE` | Captcha tidak berhasil dikenali kali ini; poin dikembalikan. Error ini tidak dihitung untuk jeda otomatis | Buat tugas baru. Jika terus gagal, periksa `websiteURL`, `websiteKey`, dan parameter lainnya, atau coba jenis tugas lain untuk captcha yang sama | | `ERROR_SETTLEMENT_FAILED` (Dihitung untuk jeda) | Saldo tidak cukup saat penyelesaian, sehingga hasil tidak dikembalikan | Isi saldo, lalu buat tugas baru | | `ERROR_NO_SUCH_CAPCHA_ID` | Tugas sudah tidak berlaku | Hentikan polling untuk tugas ini dan buat tugas baru | | `ERROR_RECAPTCHA_TIMEOUT` | Pengenalan captcha melewati batas waktu; poin dikembalikan | Buat tugas baru | ### site | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_RECAPTCHA_INVALID_SITEKEY` (Di-cache, tidak memicu jeda) | `websiteKey` tidak valid | Cari sitekey di halaman sekali lagi (lihat panduan mencari parameter). Permintaan yang identik akan langsung mengembalikan error ini selama masa cache, dengan `cached: true` | | `ERROR_RECAPTCHA_INVALID_DOMAIN` (Di-cache, tidak memicu jeda) | Domain pada `websiteURL` tidak cocok dengan `websiteKey` | Isi `websiteURL` dengan alamat halaman yang menampilkan captcha | | `ERROR_INVALID_KEY_TYPE` (Di-cache, tidak memicu jeda) | Sitekey milik jenis captcha yang berbeda, misalnya key v3 dipakai pada jenis tugas v2 | Tentukan dulu jenis captcha-nya (lihat "Mengenali jenis captcha"), lalu pilih jenis tugas yang sesuai; untuk v2 invisible, setel `isInvisible` | | `ERROR_DOMAIN_NOT_ALLOWED` (Di-cache, tidak memicu jeda) | Situs ini belum didukung | Coba jenis tugas lain untuk captcha yang sama, atau hubungi dukungan | | `ERROR_HIGH_DEMAND_DOMAIN` (Dihitung untuk jeda) | Situs ini belum didukung | Berhenti mengirim tugas untuk situs ini dan hubungi dukungan | | `ERROR_FAILED_LOADING_WIDGET` | Captcha tidak dapat dimuat dengan parameter yang diberikan | Periksa `websiteURL` dan `websiteKey`; untuk jenis tugas dengan proxy sendiri, periksa apakah proxy dapat mengakses situs tersebut | ### image | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_ZERO_CAPTCHA_FILESIZE` (Dihitung untuk jeda) | Gambar kosong atau terlalu kecil | Pastikan data Base64 lengkap dan tidak memakai awalan `data:image/...;base64,` | | `ERROR_TOO_BIG_CAPTCHA_FILESIZE` (Dihitung untuk jeda) | Gambar terlalu besar | Kompres atau perkecil gambar; seluruh body permintaan tidak boleh melebihi 6 MB | | `ERROR_IMAGE_TYPE_NOT_SUPPORTED` (Dihitung untuk jeda) | Format gambar tidak didukung, atau gambar bukan jenis yang dapat ditangani oleh jenis tugas ini. Satu kali kejadian menyebabkan jeda 30 menit | Gunakan JPG atau PNG dan pastikan gambar sesuai dengan jenis tugas, misalnya pengenalan gambar reCAPTCHA memerlukan 100x100, 300x300, atau 450x450 | | `ERROR_ILLEGAL_IMAGE` (Dihitung untuk jeda) | Ukuran gambar tidak memenuhi persyaratan jenis tugas ini | Ubah ukuran gambar sesuai penjelasan di halaman jenis tugas | | `ERROR_PARSE_IMAGE_FAIL` | Gambar tidak dapat didekode, biasanya karena Base64 terpotong atau memakai awalan | Periksa encoding Base64, lalu hapus awalan `data:` dan jeda baris | | `ERROR_UNKNOWN_QUESTION` | `question` salah, atau pertanyaan ini belum didukung | Cocokkan dengan daftar pertanyaan di halaman jenis tugas. Untuk pertanyaan yang belum didukung, hubungi dukungan; pertanyaan baru biasanya didukung dalam 3 hari kerja | | `ERROR_UNKNOW_450x450_QUESTION` | Pertanyaan ini belum didukung untuk gambar 4x4 (450x450) | Muat ulang tantangan di halaman untuk mendapatkan pertanyaan lain | ### proxy | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_PROXY_CONNECT_REFUSED` | Proxy menolak koneksi | Periksa alamat, port, dan protokol proxy, serta pastikan proxy menerima koneksi eksternal (bukan alamat lokal seperti 127.0.0.1) | | `ERROR_PROXY_CONNECT_TIMEOUT` | Koneksi ke proxy melewati batas waktu | Gunakan proxy yang lebih stabil | | `ERROR_PROXY_READ_TIMEOUT` | Pembacaan data melalui proxy melewati batas waktu | Gunakan proxy yang lebih cepat | | `ERROR_PROXY_BANNED` | Proxy tidak tersedia, atau IP-nya diblokir oleh situs target | Gunakan proxy lain | | `ERROR_PROXY_INCORRECT` | Format parameter proxy salah | Periksa format `proxyType`, `proxyAddress`, `proxyPort` (atau string `proxy`) | | `ERROR_PROXY_TRANSPARENT` | Proxy bersifat transparan dan mengungkap IP asli | Gunakan proxy anonim (elite) | | `ERROR_PROXY_NOT_AUTHORISED` | Username atau kata sandi proxy salah | Periksa `proxyLogin` dan `proxyPassword` (atau kredensial di string `proxy`) | | `ERROR_PROXY_TLS_ERROR` | TLS handshake dengan proxy gagal, biasanya karena `proxyType` salah (misalnya https disetel untuk proxy http) | Periksa protokol proxy | | `ERROR_PROXY_CONNECTION_FAILED` | Tidak dapat terhubung ke server proxy | Periksa alamat dan port proxy, lalu pastikan proxy berfungsi dengan baik | ### server | Kode error | Arti | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_SERVICE_UNAVALIABLE` | Layanan sedang tidak tersedia untuk sementara (kode ini memang dieja `UNAVALIABLE`) | Coba lagi nanti; hubungi dukungan jika terus terjadi | | `ERROR_INTERNAL_SERVER_ERROR` | Terjadi error internal pada server | Coba lagi nanti; jika terus terjadi, hubungi dukungan dan sertakan `taskId` | | `ERROR_UNKNOWN` | Error yang belum terklasifikasi | Coba lagi nanti; jika terus terjadi, hubungi dukungan dan sertakan `taskId` | ## Field tambahan Sebagian respons error memuat field tambahan: | Field | Muncul pada | Keterangan | | --- | --- | --- | | `retryAfter` | `ERROR_IP_BLOCKED_5MIN`, error yang di-cache | Sisa waktu tunggu dalam detik | | `blockReason` | `ERROR_IP_BLOCKED_5MIN` | Kode error yang memicu jeda | | `blockDetail` | `ERROR_IP_BLOCKED_5MIN` | Jenis, URL, dan sitekey dari permintaan yang memicu jeda, untuk memudahkan pelacakan | | `cached` | Error yang di-cache | Bernilai `true` berarti ini hasil dari cache dan tidak ada pengenalan yang sebenarnya | | `badRequest` | Error yang di-cache | Parameter yang terkena cache | | `limit` | `ERROR_THREADS_MAXIMUM` | Batas tugas bersamaan Anda saat ini | Aturan bahasa `errorDescription` dapat dilihat di [Permintaan dan respons](https://docs.yescaptcha.com/id/api/overview.md). --- # Batas tugas bersamaan dan jeda otomatis > Batas tugas bersamaan di YesCaptcha (ERROR_THREADS_MAXIMUM, tidak ada pemotongan poin, tidak dihitung untuk jeda), jeda otomatis saat terlalu banyak error (100 kali dalam satu menit menyebabkan jeda 5 menit, ERROR_IP_BLOCKED_5MIN), dan cache parameter tidak valid (cached). Source: https://docs.yescaptcha.com/id/api/rate-limits/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/api/rate-limits/ Agar pengenalan tetap cepat bagi semua pengguna, YesCaptcha memiliki tiga aturan perlindungan: **jumlah tugas yang sedang diproses bersamaan** dibatasi per akun (batas tugas bersamaan); `clientKey` yang menghasilkan **terlalu banyak error dalam waktu singkat akan dijeda** beberapa menit (jeda otomatis); dan **parameter yang sudah dinyatakan tidak valid** langsung mengembalikan error yang sama selama beberapa waktu (cache parameter tidak valid). Ketiga kondisi ini tidak menyebabkan pemotongan poin. ## Batas tugas bersamaan Kami membatasi jumlah tugas yang sedang diproses pada saat yang sama per akun dan per jenis tugas. Yang dibatasi adalah jumlah tugas bersamaan, bukan jumlah permintaan per menit. - Tugas dihitung “sedang diproses” sejak `createTask` dipanggil sampai panggilan itu mengembalikan respons. Jenis pengenalan gambar mengembalikan hasil langsung di `createTask`, sehingga **tugas bersamaan ≈ jumlah tugas yang dikirim per detik × durasi tiap tugas**. Contoh: tiap tugas 0.5 detik dan 40 tugas dikirim per detik, maka tugas bersamaan sekitar 20. - Permintaan dari akun yang sama dihitung bersama; setiap jenis tugas dihitung sendiri-sendiri. - Permintaan yang melebihi kuota langsung mengembalikan `ERROR_THREADS_MAXIMUM`, dan `limit` di respons adalah batas Anda saat ini. **Tidak ada pemotongan poin, dan tidak dihitung untuk jeda otomatis.** - Saat server pengenalan kewalahan, akun yang memakai waktu pengenalan terbanyak akan mengalami batas untuk jenis tugas tersebut **dikurangi setengah sementara, lalu pulih otomatis setelah 10 menit**. Ini hanya pembatasan kecepatan, akun tidak dijeda. - Jika Anda membutuhkan kuota lebih tinggi, [hubungi dukungan](https://docs.yescaptcha.com/id/help/contact.md). Setelah kuota default tiap jenis ditetapkan, angkanya akan diumumkan di halaman ini dan di [catatan pembaruan layanan](https://docs.yescaptcha.com/id/changelog.md). ```json { "errorId": 1, "errorCode": "ERROR_THREADS_MAXIMUM", "errorDescription": "This account already has 30 tasks of this type in progress, which is the limit. Lower the concurrency and wait for pending requests to return before sending more; rejected requests are not charged and do not lead to a block.", "limit": 30 } ``` (Angka dalam contoh hanya ilustrasi.) ### Cara yang disarankan 1. Batasi “jumlah permintaan yang menunggu hasil secara bersamaan” di program Anda, misalnya dengan semaphore atau thread pool berukuran tetap, bukan hanya mengatur berapa permintaan dikirim per detik. 2. Setelah menerima `ERROR_THREADS_MAXIMUM`, tunggu permintaan yang sudah dikirim selesai sebelum mengirim yang baru, atau tunggu 1 sampai 2 detik lalu coba lagi. Jangan mengulang dalam loop tanpa jeda. 3. Kirim tugas batch secara merata, jangan mengirim ribuan tugas sekaligus. Contoh Python (asyncio): ```python import asyncio import os import aiohttp CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] LIMIT = 15 # below your concurrency limit sem = asyncio.Semaphore(LIMIT) async def solve(session, task): async with sem: # at most LIMIT requests in progress at a time result = {} for attempt in range(5): async with session.post( "https://api.yescaptcha.com/createTask", json={"clientKey": CLIENT_KEY, "task": task}, ) as resp: result = await resp.json() if result.get("errorCode") != "ERROR_THREADS_MAXIMUM": return result await asyncio.sleep(1 + attempt) # over the limit: wait and retry return result ``` ## Jeda otomatis `clientKey` yang menghasilkan banyak permintaan error dalam waktu singkat akan dijeda dari pembuatan tugas secara otomatis: | Pemicu | Durasi jeda | | --- | --- | | Error yang tercantum di bawah terkumpul 100 kali dalam satu menit kalender yang sama | 5 menit | | `ERROR_IMAGE_TYPE_NOT_SUPPORTED` muncul 1 kali | 30 menit | | Mengenai “cache parameter tidak valid” 1,000 kali dalam satu menit kalender yang sama | 5 menit | Error yang dihitung untuk jeda: - [`ERROR_REQUEST_FORMATS`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_REQUEST_FORMATS) - [`ERROR_TASK_ABSENT`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_TASK_ABSENT) - [`ERROR_TASK_NOT_SUPPORTED`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_TASK_NOT_SUPPORTED) - [`ERROR_KEY_DOES_NOT_EXIST`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_KEY_DOES_NOT_EXIST) - [`ERROR_KEY_EXPIRED`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_KEY_EXPIRED) - [`ERROR_TASKID_INVALID`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_TASKID_INVALID) - [`ERROR_SETTLEMENT_FAILED`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_SETTLEMENT_FAILED) - [`ERROR_HIGH_DEMAND_DOMAIN`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_HIGH_DEMAND_DOMAIN) - [`ERROR_ZERO_CAPTCHA_FILESIZE`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_ZERO_CAPTCHA_FILESIZE) - [`ERROR_TOO_BIG_CAPTCHA_FILESIZE`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_TOO_BIG_CAPTCHA_FILESIZE) - [`ERROR_IMAGE_TYPE_NOT_SUPPORTED`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_IMAGE_TYPE_NOT_SUPPORTED) - [`ERROR_ILLEGAL_IMAGE`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_ILLEGAL_IMAGE) `ERROR_THREADS_MAXIMUM` yang dikembalikan karena kelebihan tugas bersamaan di akun (dengan field `limit`) tidak dihitung; error dengan nama yang sama yang dikembalikan saat layanan pengenalan sibuk (tanpa `limit`) dihitung. Kegagalan pengenalan (`ERROR_CAPTCHA_UNSOLVABLE`), saldo tidak cukup (`ERROR_ZERO_BALANCE`), field yang kurang (`ERROR_REQUIRED_FIELDS`), pertanyaan yang tidak didukung (`ERROR_UNKNOWN_QUESTION`), dan sejenisnya tidak dihitung. Selama jeda: - Hanya `createTask` dan `getBalance` yang terpengaruh, keduanya mengembalikan `ERROR_IP_BLOCKED_5MIN`. `getTaskResult` tidak terpengaruh; tugas yang dibuat sebelum jeda tetap bisa diperiksa hasilnya. - Respons memuat `retryAfter` (sisa detik), `blockReason` (kode error pemicu jeda), dan `blockDetail` (jenis, URL, dan sitekey dari permintaan tersebut). Gunakan ketiganya untuk memperbaiki program Anda. - Terus mengirim permintaan tidak memperpanjang jeda. Jeda berakhir otomatis, tidak perlu menghubungi dukungan. - Di Dasbor [yescaptcha.com](https://yescaptcha.com/), halaman Ringkasan menampilkan catatan jeda 24 jam terakhir. ```json { "errorId": 1, "errorCode": "ERROR_IP_BLOCKED_5MIN", "errorDescription": "...", "retryAfter": 182, "blockReason": "ERROR_TASK_NOT_SUPPORTED" } ``` ## Cache parameter tidak valid Sebagian error ditentukan oleh parameter permintaan, sehingga mengirim ulang dengan parameter yang sama memberi hasil yang sama: - [`ERROR_RECAPTCHA_INVALID_SITEKEY`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_RECAPTCHA_INVALID_SITEKEY) - [`ERROR_RECAPTCHA_INVALID_DOMAIN`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_RECAPTCHA_INVALID_DOMAIN) - [`ERROR_INVALID_KEY_TYPE`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_INVALID_KEY_TYPE) - [`ERROR_DOMAIN_NOT_ALLOWED`](https://docs.yescaptcha.com/id/api/errors.md#ERROR_DOMAIN_NOT_ALLOWED) Error ini tidak dihitung untuk jeda otomatis, tetapi di-cache di seluruh situs: 2 menit setelah penilaian pertama, dan 10 menit jika dikonfirmasi lagi dalam 1 jam. Selama cache berlaku, permintaan yang sama (jenis tugas dan `websiteKey` yang sama, atau domain situs yang sama) langsung mengembalikan error semula tanpa pemotongan poin, dengan `"cached": true`, `retryAfter` (sisa detik cache), dan `badRequest` (parameter yang terkena). Setelah `websiteKey` diperbaiki atau jenis tugas diganti, perubahan langsung berlaku. ## Perbedaan batas tugas bersamaan dan jeda otomatis | | Batas tugas bersamaan | Jeda otomatis | | --- | --- | --- | | Penyebab | Terlalu banyak tugas yang diproses bersamaan | Terlalu banyak permintaan error dalam waktu singkat | | Dampak | Hanya permintaan yang berlebih yang ditolak, `ERROR_THREADS_MAXIMUM` | `clientKey` ini dijeda dari pembuatan tugas, `ERROR_IP_BLOCKED_5MIN` | | Pemulihan | Begitu ada permintaan selesai, Anda bisa mengirim yang baru; batas yang dikurangi setengah pulih setelah 10 menit | Pulih otomatis saat jeda berakhir | | Pemotongan poin | Tidak ada | Tidak ada | --- # Jenis tugas dan harga > Harga (poin, 1,000 poin = ¥1) dan cara pengembalian hasil semua jenis tugas YesCaptcha yang dipublikasikan, yaitu token untuk reCAPTCHA, hCaptcha, dan Turnstile, Cookie untuk halaman verifikasi Cloudflare, serta hasil pengenalan untuk teks gambar dan pengenalan gambar. Source: https://docs.yescaptcha.com/id/tasks/ · Last verified: 2026-10-19 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/ Setiap tugas dipotong sejumlah poin tetap sesuai jenisnya (1,000 poin = ¥1). Tugas yang gagal atau timeout otomatis mendapat pengembalian poin. Tabel di bawah memuat semua jenis tugas yang dipublikasikan dan dapat dicari berdasarkan nama. Versi yang bisa dibaca mesin: [/data/task-types.json](https://docs.yescaptcha.com/data/task-types.json). | Captcha | Jenis tugas | Harga | Mode | | --- | --- | --- | --- | | [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) | `NoCaptchaTaskProxyless` | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | | [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) | `RecaptchaV2TaskProxyless` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) | `NoCaptchaTask` Proxy sendiri | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | | [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) | `RecaptchaV2EnterpriseTaskProxyless` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) | `RecaptchaV2EnterpriseTask` Proxy sendiri | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxyless` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxylessM1` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxylessM1S7` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | | [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxylessM1S9` | $5.25 / 1k; 35 poin/tugas · ¥35 / 1k | Asinkron | | [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) | `RecaptchaV3EnterpriseTask` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) | `RecaptchaV3EnterpriseTaskM1` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md) | `HCaptchaTaskProxyless` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | | [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md) | `HCaptchaTaskProxylessM1` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | | [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md) | `HCaptchaTask` Proxy sendiri | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | | [Cloudflare Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md) | `TurnstileTaskProxyless` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | [Cloudflare Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md) | `TurnstileTaskProxylessM1` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | | [Cloudflare Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md) | `TurnstileTask` Proxy sendiri | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | [Halaman verifikasi Cloudflare](https://docs.yescaptcha.com/id/tasks/cloudflare-challenge.md) | `CloudFlareTaskS2` Proxy sendiri | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | [Halaman verifikasi Cloudflare](https://docs.yescaptcha.com/id/tasks/cloudflare-challenge.md) | `CloudFlareTaskS3` Proxy sendiri | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | [Gambar ke teks](https://docs.yescaptcha.com/id/tasks/image-to-text.md) | `ImageToTextTaskOcrBase` | $0.30 / 1k; 2 poin/tugas · ¥2 / 1k | Sinkron | | [Gambar ke teks](https://docs.yescaptcha.com/id/tasks/image-to-text.md) | `ImageToTextTaskMuggle` | $0.30 / 1k; 2 poin/tugas · ¥2 / 1k | Sinkron | | [Gambar ke teks](https://docs.yescaptcha.com/id/tasks/image-to-text.md) | `ImageToTextTask` | $0.60 / 1k; 4 poin/tugas · ¥4 / 1k | Asinkron | | [Gambar ke teks](https://docs.yescaptcha.com/id/tasks/image-to-text.md) | `ImageToTextTaskM1` | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | | [Pengenalan gambar reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md) | `ReCaptchaV2Classification` | $0.90 / 1k; 6 poin/tugas · ¥6 / 1k | Sinkron | | [Pengenalan gambar hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha-classification.md) | `HCaptchaClassification` | $1.20 / 1k; 8 poin/tugas · ¥8 / 1k | Sinkron | | [Pengenalan gambar FunCaptcha](https://docs.yescaptcha.com/id/tasks/funcaptcha-classification.md) | `FunCaptchaClassification` | $0.45 / 1k; 3 poin/tugas · ¥3 / 1k | Sinkron | | [Pengenalan gambar AWS WAF / bCaptcha](https://docs.yescaptcha.com/id/tasks/aws-bcaptcha-classification.md) | `AwsClassification` | $1.20 / 1k; 8 poin/tugas · ¥8 / 1k | Sinkron | | [Pengenalan gambar AWS WAF / bCaptcha](https://docs.yescaptcha.com/id/tasks/aws-bcaptcha-classification.md) | `bCaptchaClassification` | $1.20 / 1k; 8 poin/tugas · ¥8 / 1k | Sinkron | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67 (2026-10-27). Tugas ditagih dalam poin: 1,000 poin = ¥1 saat Anda top up dalam CNY; top up dalam dolar AS (PayPal, kripto) dikonversi ke CNY sesuai kurs saat pembayaran, lalu dikonversi ke poin. ## Pilih yang mana | Yang ingin Anda lakukan | Gunakan | Hasil yang dikembalikan | | --- | --- | --- | | Mendapatkan token lalu langsung mengirimkannya, tanpa mengeklik gambar | [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md), [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md), [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md), [Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md) | Token, asinkron | | Melewati halaman pemeriksaan “Just a moment…” milik Cloudflare | [Halaman verifikasi Cloudflare](https://docs.yescaptcha.com/id/tasks/cloudflare-challenge.md) | Cookie, User-Agent, dan isi halaman, asinkron | | Mengeklik gambar sendiri di browser | [Pengenalan gambar reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md), [Pengenalan gambar hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha-classification.md), [Pengenalan gambar FunCaptcha](https://docs.yescaptcha.com/id/tasks/funcaptcha-classification.md), [Pengenalan gambar AWS WAF / bCaptcha](https://docs.yescaptcha.com/id/tasks/aws-bcaptcha-classification.md) | Gambar atau posisi mana yang harus diklik, sinkron | | Mengenali karakter di dalam gambar | [Teks gambar (huruf dan angka)](https://docs.yescaptcha.com/id/tasks/image-to-text.md) | Teks, umumnya sinkron | Tidak tahu captcha yang dipakai? Lihat [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md). ## Pola penamaan - **`Proxyless`**: captcha dimuat lewat jaringan kami, tidak perlu proxy. Jenis tanpa `Proxyless` di namanya (seperti `NoCaptchaTask`, `HCaptchaTask`) memakai proxy Anda sendiri dan perlu mengirim field proxy. Cocok jika situs target memeriksa IP pengunjung. - **Akhiran seperti `M1`**: jalur lain untuk captcha yang sama, dengan parameter yang sama tetapi harga berbeda. Jika tingkat keberhasilan satu jalur kurang baik, coba yang lain; keduanya juga bisa saling menjadi cadangan. - **`Classification`**: pengenalan gambar, mengembalikan posisi yang harus diklik, bukan token. - **`Enterprise`**: reCAPTCHA Enterprise. ## Catatan - Pengenalan gambar reCAPTCHA v2 dihitung berdasarkan ukuran gambar, dan pengenalan gambar hCaptcha tidak memotong poin jika target tidak ditemukan. Lihat halaman masing-masing. - Harga mengacu pada halaman ini. Poin hanya dipotong saat membuat tugas; pemeriksaan hasil tidak dipotong. Aturan penagihan ada di [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). --- # reCAPTCHA v2 > Dapatkan token reCAPTCHA v2 (versi biasa, tak terlihat, dan Enterprise) dengan YesCaptcha: jenis tugas dan harga, parameter permintaan, contoh curl/Python/Node.js, serta format hasil. Source: https://docs.yescaptcha.com/id/tasks/recaptcha-v2/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/recaptcha-v2/ Tugas reCAPTCHA v2 mengembalikan sebuah token (`gRecaptchaResponse`). Kirim token itu ke situs target untuk lolos verifikasi, tanpa perlu mengklik gambar. Jenis yang paling umum, `NoCaptchaTaskProxyless`, berharga 15 poin (≈ $2.25 / 1k) per tugas dan bersifat asinkron: buat tugas dengan `createTask`, lalu panggil `getTaskResult` setiap 5 detik untuk mengambil hasilnya. Tugas yang gagal dikenali atau melewati batas waktu otomatis mendapat pengembalian poin. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) Isi permintaan berupa JSON, diautentikasi dengan `clientKey` (ClientKey Anda, salin dari dasbor [yescaptcha.com](https://yescaptcha.com/)). Ambil hasil di endpoint yang sama dengan tempat Anda membuat tugas. ## Kapan digunakan - Halaman menampilkan kotak centang “Saya bukan robot” (I’m not a robot): versi biasa. - Tidak ada kotak centang, dan soal gambar baru muncul setelah tombol kirim diklik: versi tak terlihat. Tambahkan `"isInvisible": true`. - Halaman memuat `recaptcha/enterprise.js`, atau alamat permintaannya mengandung `enterprise`: versi Enterprise. Gunakan jenis yang namanya memuat `Enterprise`. Jika Anda tidak yakin termasuk yang mana, lihat [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md). Jika tingkat keberhasilan token kurang memuaskan, Anda bisa beralih ke [pengenalan gambar reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md): API memberi tahu gambar mana yang harus diklik, lalu Anda mengkliknya sendiri di browser. ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `NoCaptchaTaskProxyless` | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | | | `RecaptchaV2TaskProxyless` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | Parameter sama dengan NoCaptchaTaskProxyless tetapi lewat jalur berbeda; keduanya bisa dipakai sebagai cadangan satu sama lain | | `NoCaptchaTask` | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | Proxy sendiri | | `RecaptchaV2EnterpriseTaskProxyless` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | | `RecaptchaV2EnterpriseTask` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | Proxy sendiri | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. - `NoCaptchaTaskProxyless` dan `RecaptchaV2TaskProxyless` memiliki parameter yang sama tetapi jalur berbeda. Jika salah satu tingkat keberhasilannya kurang memuaskan, coba yang lain. - Jenis yang namanya tidak memuat `Proxyless` (`NoCaptchaTask`, `RecaptchaV2EnterpriseTask`) memuat captcha melalui proxy Anda sendiri, sehingga perlu mengirim `proxyType`, `proxyAddress`, `proxyPort`, dan field terkait. Gunakan jenis ini jika situs target memeriksa IP pengunjung. ## Parameter permintaan Field pada objek `task` di `createTask`: | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `websiteURL` | string | Ya | URL lengkap halaman yang menampilkan captcha. Isi dengan situs tempat Anda melihat captcha, bukan domain penyedia captcha | | `websiteKey` | string | Ya | Kunci situs (sitekey), ada di sumber halaman atau permintaan jaringan; biasanya tidak berubah | | `isInvisible` | boolean | Tidak | Isi true untuk varian invisible; jangan diisi jika bukan | | `proxyType` | string | Beberapa jenis | Protokol proxy: `http`, `https`, `socks4`, atau `socks5` (Wajib untuk NoCaptchaTask, RecaptchaV2EnterpriseTask) | | `proxyAddress` | string | Beberapa jenis | Alamat IP atau hostname proxy. Alamat lokal atau privat seperti 127.0.0.1 atau 192.168.x.x tidak akan berfungsi karena server kami tidak dapat menjangkaunya (Wajib untuk NoCaptchaTask, RecaptchaV2EnterpriseTask) | | `proxyPort` | integer | Beberapa jenis | Port proxy (Wajib untuk NoCaptchaTask, RecaptchaV2EnterpriseTask) | | `proxyLogin` | string | Tidak | Nama pengguna proxy, jika proxy memerlukan autentikasi (hanya NoCaptchaTask, RecaptchaV2EnterpriseTask) | | `proxyPassword` | string | Tidak | Kata sandi proxy, jika proxy memerlukan autentikasi (hanya NoCaptchaTask, RecaptchaV2EnterpriseTask) | | `userAgent` | string | Tidak | User-Agent browser. Jika hasil berisi `userAgent`, gunakan nilai tersebut saat Anda mengirimkan token (hanya NoCaptchaTask, RecaptchaV2EnterpriseTask) | | `enterprisePayload` | object | Tidak | Parameter tambahan untuk versi enterprise, misalnya nilai `s` reCAPTCHA Enterprise: `{"s": "..."}`. Jangan diisi jika halaman tidak menggunakannya (hanya RecaptchaV2EnterpriseTaskProxyless, RecaptchaV2EnterpriseTask) | Cara menemukan `websiteURL` dan `websiteKey` ada di [Mencari parameter reCAPTCHA](https://docs.yescaptcha.com/id/guides/find-recaptcha-parameters.md). ## Contoh permintaan Menggunakan halaman demo resmi Google: POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } } ``` Kode lengkap (membuat tugas, memeriksa setiap 5 detik, mencetak token). Sebelum dijalankan, simpan ClientKey Anda di variabel lingkungan `YESCAPTCHA_CLIENT_KEY`: **curl** ```bash curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } }' # Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds: curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}' ``` **Python** solve.py ```python import os import time import requests API = "https://api.yescaptcha.com" CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id) solution = solve({ "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", }) print(solution["gRecaptchaResponse"]) ``` **Node.js** solve.mjs ```js const API = 'https://api.yescaptcha.com'; const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data; } async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`); } const solution = await solve({ type: "NoCaptchaTaskProxyless", websiteURL: "https://www.google.com/recaptcha/api2/demo", websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", }); console.log(solution.gRecaptchaResponse); ``` Untuk versi Enterprise, jika halaman mengirim nilai `s` ke reCAPTCHA, masukkan nilai itu ke `enterprisePayload`: POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "RecaptchaV2EnterpriseTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "enterprisePayload": { "s": "S_VALUE_FROM_THE_PAGE" } } } ``` Dengan proxy sendiri: POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTask", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "proxyType": "http", "proxyAddress": "proxy.example.com", "proxyPort": 8080, "proxyLogin": "user", "proxyPassword": "pass" } } ``` ## Hasil `createTask` mengembalikan ID tugas: ```json { "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" } ``` Gunakan ID itu untuk memanggil `getTaskResult`. Saat tugas masih diproses, responsnya `{"errorId": 0, "status": "processing"}`; periksa lagi 5 detik kemudian. Jika sudah selesai, responsnya: ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." } } ``` | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `gRecaptchaResponse` | string | Token yang harus dikirim ke situs target. Sekali pakai, berlaku sekitar 120 detik; gunakan dalam 60 detik | Sebuah tugas diproses paling lama sekitar 110 detik. Jika melewati batas itu, responsnya `ERROR_TASK_TIMEOUT` dan poin dikembalikan. Saat terjadi error, `errorId` bernilai 1; tangani berdasarkan `errorCode`, lihat [Kode error](https://docs.yescaptcha.com/id/api/errors.md). Cara mengirim token setelah Anda mendapatkannya ada di [Menyelesaikan reCAPTCHA dengan token](https://docs.yescaptcha.com/id/guides/submit-recaptcha-token.md). > **Tips:** Token hanya bisa dipakai sekali dan berlaku sekitar 120 detik. Sebaiknya kirim dalam 60 detik setelah diterima. ## Pertanyaan umum ### Mengapa token untuk situs yang sama kadang lolos dan kadang tidak? Situs target yang menentukan. Situs memberi skor pada setiap verifikasi dan menetapkan ambang batas yang bisa diubah kapan saja, sehingga tingkat keberhasilan berbeda di tiap situs dan tidak semua token lolos. Anda bisa membandingkan dengan jenis tugas lain untuk captcha yang sama, atau beralih ke [pengenalan gambar](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md). ### Berapa lama token berlaku? Token hanya bisa dipakai sekali dan berlaku sekitar 120 detik. Sebaiknya kirim dalam 60 detik setelah diterima. Masa berlaku ditentukan oleh Google. ### Apakah poin dipotong jika pengenalan gagal? Tidak. Tugas yang mengembalikan `ERROR_CAPTCHA_UNSOLVABLE` atau melewati batas waktu otomatis mendapat pengembalian poin, lihat [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). ## Tutorial terkait - [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md) - [Mencari parameter reCAPTCHA](https://docs.yescaptcha.com/id/guides/find-recaptcha-parameters.md) - [Menyelesaikan reCAPTCHA dengan token](https://docs.yescaptcha.com/id/guides/submit-recaptcha-token.md) - [Klik gambar reCAPTCHA v2 dengan Selenium](https://docs.yescaptcha.com/id/guides/recaptcha-click-selenium.md) --- # reCAPTCHA v3 > Dapatkan token reCAPTCHA v3 (termasuk versi Enterprise) dengan YesCaptcha: cara mengisi pageAction, jenis dengan skor tetap 0.7 dan 0.9, jenis tugas dan harga, parameter, contoh, dan hasil yang dikembalikan. Source: https://docs.yescaptcha.com/id/tasks/recaptcha-v3/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/recaptcha-v3/ reCAPTCHA v3 tidak punya kotak centang dan tidak menampilkan gambar; halaman web memberi skor kepada pengunjung di latar belakang. YesCaptcha mengembalikan sebuah token (`gRecaptchaResponse`) yang Anda kirimkan ke situs target. `RecaptchaV3TaskProxyless` dikenai biaya 20 poin (≈ $3.00 / 1k) per tugas dan berjalan asinkron: panggil `createTask`, lalu `getTaskResult` setiap 5 detik. Jika gagal atau timeout, poin dikembalikan otomatis. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) Body permintaan berupa JSON, dengan autentikasi memakai `clientKey`. Hasil tugas harus diperiksa di endpoint yang sama dengan tempat tugas dibuat. ## Kapan digunakan - Source halaman berisi `grecaptcha.execute(...)`, atau memuat `recaptcha/api.js?render=KUNCI_SITUS`: reCAPTCHA v3 biasa. - Halaman memanggil `grecaptcha.enterprise.execute(...)`, atau memuat `recaptcha/enterprise.js`: reCAPTCHA v3 Enterprise, gunakan `RecaptchaV3EnterpriseTask` atau `RecaptchaV3EnterpriseTaskM1`. Cara membedakannya ada di [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md). ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `RecaptchaV3TaskProxyless` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | | `RecaptchaV3TaskProxylessM1` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | | `RecaptchaV3TaskProxylessM1S7` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | Meminta skor 0.7; tidak perlu parameter tambahan | | `RecaptchaV3TaskProxylessM1S9` | $5.25 / 1k; 35 poin/tugas · ¥35 / 1k | Asinkron | Meminta skor 0.9; tidak perlu parameter tambahan | | `RecaptchaV3EnterpriseTask` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | | | `RecaptchaV3EnterpriseTaskM1` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. - `RecaptchaV3TaskProxyless` dan `RecaptchaV3TaskProxylessM1` memakai parameter yang sama tetapi jalur berbeda, jadi keduanya bisa saling menjadi cadangan. - Jika situs target meminta skor tinggi, gunakan `RecaptchaV3TaskProxylessM1S7` (0.7) atau `RecaptchaV3TaskProxylessM1S9` (0.9); tidak perlu parameter tambahan. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `websiteURL` | string | Ya | URL lengkap halaman yang menampilkan captcha. Isi dengan situs tempat Anda melihat captcha, bukan domain penyedia captcha | | `websiteKey` | string | Ya | Kunci situs (sitekey), ada di sumber halaman atau permintaan jaringan; biasanya tidak berubah | | `pageAction` | string | Tidak | Action reCAPTCHA v3; harus sama dengan nilai yang diteruskan halaman ke `grecaptcha.execute`, jika tidak token bisa ditolak | `pageAction` harus sama dengan `action` yang dikirim halaman saat memanggil `grecaptcha.execute(KUNCI_SITUS, {action: '...'})`. Jika salah, token bisa ditolak situs. Cara menemukannya ada di [Mencari parameter reCAPTCHA](https://docs.yescaptcha.com/id/guides/find-recaptcha-parameters.md). ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "RecaptchaV3TaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "pageAction": "login" } } ``` **curl** ```bash curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "RecaptchaV3TaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "pageAction": "login" } }' # Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds: curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}' ``` **Python** solve.py ```python import os import time import requests API = "https://api.yescaptcha.com" CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id) solution = solve({ "type": "RecaptchaV3TaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "pageAction": "login", }) print(solution["gRecaptchaResponse"]) ``` **Node.js** solve.mjs ```js const API = 'https://api.yescaptcha.com'; const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data; } async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`); } const solution = await solve({ type: "RecaptchaV3TaskProxyless", websiteURL: "https://example.com/login", websiteKey: "SITE_KEY_OF_THE_PAGE", pageAction: "login", }); console.log(solution.gRecaptchaResponse); ``` Ganti `websiteURL`, `websiteKey`, dan `pageAction` dengan nilai dari situs target. ## Hasil yang dikembalikan ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." } } ``` | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `gRecaptchaResponse` | string | Token yang harus dikirim ke situs target. Sekali pakai, berlaku sekitar 120 detik; gunakan dalam 60 detik | Saat masih diproses, responsnya `{"errorId": 0, "status": "processing"}`; periksa lagi 5 detik kemudian. Jika terjadi error, tangani berdasarkan `errorCode`, lihat [Kode error](https://docs.yescaptcha.com/id/api/errors.md). Cara mengirimkan token setelah didapat ada di [Menyelesaikan reCAPTCHA dengan token](https://docs.yescaptcha.com/id/guides/submit-recaptcha-token.md). ## Pertanyaan umum ### Mengapa token kadang tidak diterima situs? Pada v3, situs target menilai berdasarkan skor, dan ambang batasnya bisa diubah kapan saja, sehingga tidak semua token lolos. Pastikan `pageAction` benar; jika situs meminta skor tinggi, coba `M1S7` atau `M1S9`; Anda juga bisa membandingkan dengan jenis lain dalam kelompok yang sama. ### Bagaimana mengisi reCAPTCHA v3 Enterprise? Sama seperti versi biasa: isi `websiteURL`, `websiteKey`, `pageAction`, dengan jenis tugas `RecaptchaV3EnterpriseTask` atau `RecaptchaV3EnterpriseTaskM1`. ### Berapa lama token berlaku? Sekali pakai, berlaku sekitar 120 detik. Sebaiknya kirim dalam 60 detik. ## Tutorial terkait - [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md) - [Mencari parameter reCAPTCHA](https://docs.yescaptcha.com/id/guides/find-recaptcha-parameters.md) (termasuk cara menemukan `pageAction`) - [Menyelesaikan reCAPTCHA dengan token](https://docs.yescaptcha.com/id/guides/submit-recaptcha-token.md) --- # hCaptcha > Dapatkan token hCaptcha dengan YesCaptcha: HCaptchaTaskProxyless, HCaptchaTaskProxylessM1, dan HCaptchaTask dengan proxy sendiri, cara mengisi userAgent dan rqdata, serta cara menggunakan respKey yang dikembalikan. Source: https://docs.yescaptcha.com/id/tasks/hcaptcha/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/hcaptcha/ Tugas hCaptcha mengembalikan sebuah token (`gRecaptchaResponse`). Kirim token tersebut ke situs target bersama `userAgent` yang dikembalikan (dan `respKey`, jika ada) agar verifikasi lolos. `HCaptchaTaskProxyless` berharga 30 poin (≈ $4.50 / 1k) per tugas, dan `HCaptchaTask` dengan proxy sendiri berharga 15 poin (≈ $2.25 / 1k) per tugas. Keduanya asinkron: panggil `createTask`, lalu `getTaskResult` setiap 5 detik. Jika pengenalan gagal atau waktu habis, poin dikembalikan otomatis. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) Body permintaan berupa JSON dan diautentikasi dengan `clientKey`. Cek hasil di endpoint yang sama dengan tempat Anda membuat tugas. ## Kapan digunakan Halaman web menampilkan kotak centang “Saya manusia” dari hCaptcha, atau memunculkan soal gambar hCaptcha. Jika ingin mengambil token lalu langsung mengirimkannya, gunakan jenis tugas di halaman ini. Jika ingin mengklik gambar sendiri di browser, gunakan [pengenalan gambar hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha-classification.md). > **Catatan:** Tingkat keberhasilan hCaptcha sangat bervariasi antar situs, sebaiknya uji dulu dengan jumlah kecil. ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `HCaptchaTaskProxyless` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | | | `HCaptchaTaskProxylessM1` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | Parameter sama dengan HCaptchaTaskProxyless tetapi lewat jalur berbeda; keduanya bisa dipakai sebagai cadangan satu sama lain | | `HCaptchaTask` | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | Proxy sendiri | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. - `HCaptchaTaskProxyless` dan `HCaptchaTaskProxylessM1` memiliki parameter yang sama dengan jalur yang berbeda, sehingga bisa saling menjadi cadangan. - `HCaptchaTask` memuat captcha lewat proxy Anda sendiri, sehingga field proxy harus diisi. Gunakan jenis ini jika situs target memeriksa IP pengunjung. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `websiteURL` | string | Ya | URL lengkap halaman yang menampilkan captcha. Isi dengan situs tempat Anda melihat captcha, bukan domain penyedia captcha | | `websiteKey` | string | Ya | Kunci situs (sitekey) hCaptcha, biasanya berformat UUID | | `userAgent` | string | Tidak | User-Agent browser. Disarankan diisi, tetapi hanya nilai yang dikembalikan oleh `GET https://api.yescaptcha.com/useragent` yang diterima; kirim token dengan `userAgent` dari hasil | | `isInvisible` | boolean | Tidak | Isi true untuk varian invisible; jangan diisi jika bukan | | `rqdata` | string | Tidak | rqdata untuk hCaptcha enterprise; dibutuhkan oleh beberapa situs dan biasanya ditemukan di permintaan yang memuat captcha | | `proxyType` | string | Beberapa jenis | Protokol proxy: `http`, `https`, `socks4`, atau `socks5` (Wajib untuk HCaptchaTask) | | `proxyAddress` | string | Beberapa jenis | Alamat IP atau hostname proxy. Alamat lokal atau privat seperti 127.0.0.1 atau 192.168.x.x tidak akan berfungsi karena server kami tidak dapat menjangkaunya (Wajib untuk HCaptchaTask) | | `proxyPort` | integer | Beberapa jenis | Port proxy (Wajib untuk HCaptchaTask) | | `proxyLogin` | string | Tidak | Nama pengguna proxy, jika proxy memerlukan autentikasi (hanya HCaptchaTask) | | `proxyPassword` | string | Tidak | Kata sandi proxy, jika proxy memerlukan autentikasi (hanya HCaptchaTask) | - `websiteURL` diisi dengan halaman tempat captcha muncul, **bukan** hcaptcha.com. - `userAgent` disarankan diisi, dan hanya boleh berisi nilai yang dikembalikan oleh [/useragent](https://docs.yescaptcha.com/id/api/useragent.md). - `rqdata`: diperlukan oleh hCaptcha Enterprise (misalnya sebagian situs sosial dan chat), biasanya ada di permintaan yang memuat captcha. Situs biasa tidak perlu mengirimkannya. Cara menemukan parameter, lihat [Mencari parameter hCaptcha](https://docs.yescaptcha.com/id/guides/find-hcaptcha-parameters.md). ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "HCaptchaTaskProxyless", "websiteURL": "https://accounts.hcaptcha.com/demo", "websiteKey": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2" } } ``` **curl** ```bash curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "HCaptchaTaskProxyless", "websiteURL": "https://accounts.hcaptcha.com/demo", "websiteKey": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2" } }' # Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds: curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}' ``` **Python** solve.py ```python import os import time import requests API = "https://api.yescaptcha.com" CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id) solution = solve({ "type": "HCaptchaTaskProxyless", "websiteURL": "https://accounts.hcaptcha.com/demo", "websiteKey": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2", }) print(solution["gRecaptchaResponse"]) ``` **Node.js** solve.mjs ```js const API = 'https://api.yescaptcha.com'; const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data; } async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`); } const solution = await solve({ type: "HCaptchaTaskProxyless", websiteURL: "https://accounts.hcaptcha.com/demo", websiteKey: "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2", }); console.log(solution.gRecaptchaResponse); ``` Dengan proxy sendiri: POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "HCaptchaTask", "websiteURL": "https://accounts.hcaptcha.com/demo", "websiteKey": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2", "proxyType": "http", "proxyAddress": "proxy.example.com", "proxyPort": 8080, "proxyLogin": "user", "proxyPassword": "pass" } } ``` ## Hasil ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36", "respKey": "E0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." } } ``` | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `gRecaptchaResponse` | string | Token yang harus dikirim ke situs target. Sekali pakai, berlaku sekitar 120 detik; gunakan dalam 60 detik | | `userAgent` | string | User-Agent yang digunakan untuk mendapatkan token. Gunakan nilai ini saat mengirim token, meskipun berbeda dari yang Anda kirim | | `respKey` | string | Nilai yang diperlukan beberapa situs bersama token; kirim jika ada | Cara mengirimkan: 1. Isi token ke field `h-captcha-response` di halaman (dan `g-recaptcha-response`, jika ada), atau ke field yang diminta oleh API situs target. 2. Saat mengirim permintaan, gunakan `userAgent` yang dikembalikan sebagai User-Agent. 3. Jika `respKey` dikembalikan, kirimkan juga sesuai kebutuhan situs. Saat masih diproses, responsnya `{"errorId": 0, "status": "processing"}`; periksa lagi 5 detik kemudian. Jika terjadi error, tangani berdasarkan `errorCode`, lihat [Kode error](https://docs.yescaptcha.com/id/api/errors.md). ## Pertanyaan umum ### Mengapa tingkat keberhasilannya tidak stabil? hCaptcha menilai berdasarkan pengaturan situs, IP pengunjung, dan lingkungan browser, sehingga tingkat keberhasilan berbeda di setiap situs. Pastikan Anda memakai `userAgent` yang dikembalikan. Untuk situs yang sensitif terhadap IP, gunakan `HCaptchaTask` dengan proxy sendiri dan kirim juga lewat proxy yang sama. Anda juga bisa membandingkannya dengan `HCaptchaTaskProxylessM1`. ### Berapa lama token berlaku? Token hanya bisa dipakai sekali dan berlaku sekitar 120 detik. Sebaiknya kirim secepat mungkin setelah diterima. ## Tutorial terkait - [Mencari parameter hCaptcha](https://docs.yescaptcha.com/id/guides/find-hcaptcha-parameters.md) - [Klik gambar hCaptcha dengan Selenium](https://docs.yescaptcha.com/id/guides/hcaptcha-click-selenium.md) --- # Cloudflare Turnstile > Dapatkan token Cloudflare Turnstile dengan YesCaptcha: TurnstileTaskProxyless, TurnstileTaskProxylessM1, dan TurnstileTask dengan proxy sendiri, beserta parameter, contoh, dan hasil yang dikembalikan; serta perbedaannya dengan halaman verifikasi Cloudflare. Source: https://docs.yescaptcha.com/id/tasks/turnstile/ · Last verified: 2026-10-21 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/turnstile/ Tugas Cloudflare Turnstile mengembalikan sebuah token (`token`) yang dikirim ke situs target untuk lolos verifikasi. `TurnstileTaskProxyless` berharga 25 poin (≈ $3.75 / 1k) per tugas dan bersifat asinkron: panggil `createTask` terlebih dahulu, lalu `getTaskResult` setiap 5 detik. Jika gagal atau waktu habis, poin dikembalikan otomatis. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) Body permintaan berupa JSON, diautentikasi dengan `clientKey`. Hasil harus dicek di endpoint yang sama dengan tempat tugas dibuat. ## Kapan digunakan Halaman web memiliki kotak verifikasi Cloudflare (“Pastikan Anda adalah manusia”) yang tertanam di dalam formulir, dan halaman memuat skrip dari `challenges.cloudflare.com/turnstile`. Jika seluruh halaman diblokir Cloudflare dan menampilkan “Just a moment…” atau “Checking your browser”, itu adalah halaman verifikasi Cloudflare, bukan Turnstile. Gunakan [Halaman verifikasi Cloudflare](https://docs.yescaptcha.com/id/tasks/cloudflare-challenge.md). Perbedaannya dijelaskan di [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md). ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `TurnstileTaskProxyless` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | | | `TurnstileTaskProxylessM1` | $4.50 / 1k; 30 poin/tugas · ¥30 / 1k | Asinkron | | | `TurnstileTask` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | Proxy sendiri | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. - `TurnstileTaskProxyless` dan `TurnstileTaskProxylessM1` memiliki parameter yang sama tetapi jalur berbeda, sehingga bisa saling menjadi cadangan. - `TurnstileTask` memuat captcha lewat proxy Anda sendiri, sehingga field proxy harus diisi. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `websiteURL` | string | Ya | URL lengkap halaman yang menampilkan captcha. Isi dengan situs tempat Anda melihat captcha, bukan domain penyedia captcha | | `websiteKey` | string | Ya | Kunci situs (sitekey) Turnstile, biasanya diawali 0x | | `pageAction` | string | Tidak | `action` yang diteruskan halaman ke Turnstile (opsi `turnstile.render`, atau `data-action` pada elemen widget), misalnya `login`. Tidak diperlukan di sebagian besar kasus; tambahkan hanya jika tugas terus gagal | | `data` | string | Tidak | `cData` yang diteruskan halaman ke Turnstile (opsi `turnstile.render`, atau `data-cdata` pada elemen widget), misalnya `c0bd4b36-7419-4e18-83c6-378699f2a9a2`. Tidak diperlukan di sebagian besar kasus; tambahkan hanya jika tugas terus gagal | | `proxyType` | string | Beberapa jenis | Protokol proxy: `http`, `https`, `socks4`, atau `socks5` (Wajib untuk TurnstileTask) | | `proxyAddress` | string | Beberapa jenis | Alamat IP atau hostname proxy. Alamat lokal atau privat seperti 127.0.0.1 atau 192.168.x.x tidak akan berfungsi karena server kami tidak dapat menjangkaunya (Wajib untuk TurnstileTask) | | `proxyPort` | integer | Beberapa jenis | Port proxy (Wajib untuk TurnstileTask) | | `proxyLogin` | string | Tidak | Nama pengguna proxy, jika proxy memerlukan autentikasi (hanya TurnstileTask) | | `proxyPassword` | string | Tidak | Kata sandi proxy, jika proxy memerlukan autentikasi (hanya TurnstileTask) | | `userAgent` | string | Tidak | User-Agent browser. Jika hasil berisi `userAgent`, gunakan nilai tersebut saat Anda mengirimkan token (hanya TurnstileTask) | `websiteKey` biasanya diawali `0x`. Cara menemukannya ada di [Mencari parameter Turnstile](https://docs.yescaptcha.com/id/guides/find-turnstile-parameters.md). ### Jika tugas tetap gagal: pageAction dan data Pada umumnya cukup mengirim `websiteURL` dan `websiteKey`, kedua parameter ini tidak diperlukan. Jika Anda yakin `websiteURL` dan `websiteKey` sudah benar tetapi tugas tetap gagal, periksa apakah halaman mengirim `action` dan `cData` saat memanggil Turnstile (opsi `turnstile.render`, atau `data-action` dan `data-cdata` pada elemen kotak verifikasi). Jika ada, sertakan apa adanya: - `pageAction`: isi dengan `action` dari halaman, misalnya `login` - `data`: isi dengan `cData` dari halaman, misalnya `c0bd4b36-7419-4e18-83c6-378699f2a9a2` POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY", "pageAction": "login", "data": "c0bd4b36-7419-4e18-83c6-378699f2a9a2" } } ``` ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY" } } ``` **curl** ```bash curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY" } }' # Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds: curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}' ``` **Python** solve.py ```python import os import time import requests API = "https://api.yescaptcha.com" CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id) solution = solve({ "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY", }) print(solution["token"]) ``` **Node.js** solve.mjs ```js const API = 'https://api.yescaptcha.com'; const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data; } async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`); } const solution = await solve({ type: "TurnstileTaskProxyless", websiteURL: "https://example.com/login", websiteKey: "0x4AAAAAAA_SITE_KEY", }); console.log(solution.token); ``` Ganti `websiteURL` dan `websiteKey` dengan nilai dari situs target. ## Hasil yang dikembalikan ```json { "errorId": 0, "status": "ready", "solution": { "token": "0.ufq5RgSVZd11DPSX1brdrxnEs28KcVlKj2ORchqxSy2q9yAW6ciq3hriXDF4x...", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36" } } ``` | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `token` | string | Token yang harus dikirim ke situs target. Sekali pakai; kirim secepat mungkin | | `userAgent` | string | User-Agent yang digunakan untuk mendapatkan token. Gunakan nilai ini saat mengirim token, meskipun berbeda dari yang Anda kirim | Isikan `token` ke field `cf-turnstile-response` di halaman (atau field yang diminta API situs target) lalu kirim. Gunakan `userAgent` yang dikembalikan sebagai User-Agent pada permintaan pengiriman. Saat masih diproses, hasilnya adalah `{"errorId": 0, "status": "processing"}`; periksa lagi 5 detik kemudian. Jika terjadi error, tangani berdasarkan `errorCode`, lihat [Kode error](https://docs.yescaptcha.com/id/api/errors.md). ## Pertanyaan umum ### Berapa lama token berlaku? Hanya untuk sekali pakai. Sebaiknya segera dikirim setelah diterima (token Turnstile biasanya kedaluwarsa dalam beberapa menit, ditentukan oleh Cloudflare). ### Setelah dikirim, situs tetap menolak? Pastikan `websiteURL` adalah halaman tempat kotak verifikasi muncul, `websiteKey` benar, dan pengiriman memakai `userAgent` yang dikembalikan. Jika halaman mengirim `action` dan `cData`, sertakan sebagai `pageAction` dan `data`, lihat [Jika tugas tetap gagal](#). Jika situs juga memeriksa IP, gunakan `TurnstileTask` dan kirim lewat proxy yang sama. ## Tutorial terkait - [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md) - [Mencari parameter Turnstile](https://docs.yescaptcha.com/id/guides/find-turnstile-parameters.md) --- # Halaman verifikasi Cloudflare > Lewati halaman pemeriksaan "Just a moment..." (Mohon tunggu) dari Cloudflare dengan YesCaptcha dan dapatkan cf_clearance serta Cookie lainnya, User-Agent, dan konten halaman: parameter CloudFlareTaskS2 dan CloudFlareTaskS3, persyaratan proxy, hasil, cara memakainya, dan error umum. Source: https://docs.yescaptcha.com/id/tasks/cloudflare-challenge/ · Last verified: 2026-10-19 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/cloudflare-challenge/ Halaman verifikasi Cloudflare adalah halaman pemeriksaan yang menghalangi seluruh halaman situs dan menampilkan “Mohon tunggu…” atau “Memeriksa browser Anda”. YesCaptcha membuka halaman melalui proxy yang Anda berikan, melewati pemeriksaan, lalu mengembalikan Cookie seperti `cf_clearance`, User-Agent yang dipakai saat itu, request header, response header, dan HTML halaman setelah lolos. `CloudFlareTaskS2` per tugas 25 poin (≈ $3.75 / 1k), `CloudFlareTaskS3` per tugas 20 poin (≈ $3.00 / 1k); kedua jenis memiliki parameter, hasil, dan efektivitas yang sama, hanya harganya yang berbeda. Hasil dikembalikan secara asinkron, satu tugas umumnya memakan 6 hingga 35 detik, dan bervariasi cukup besar antarsitus. Jika gagal atau timeout, poin dikembalikan otomatis. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) ## Kapan dipakai - Kode sumber halaman berisi `__cf_chl_rt_tk` atau `cdn-cgi/challenge-platform`, dan judulnya `Just a moment...` / “Mohon tunggu”: ini adalah halaman verifikasi Cloudflare. Halaman pemeriksaan yang meminta Anda mencentang kotak “Verifikasi bahwa Anda manusia” juga ditangani di halaman ini. - Jika hanya ada kotak verifikasi Cloudflare yang tertanam di formulir: itu [Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md), bukan halaman ini. - Jika permintaan dengan library seperti requests mengembalikan 403 dan “Just a moment…”, padahal browser bisa membukanya langsung: kemungkinan besar hanya TLS fingerprint yang diblokir. Ganti dengan library yang dapat meniru TLS fingerprint browser (seperti curl\_cffi), maka permintaan bisa berhasil tanpa perlu melewati verifikasi. ## Jenis dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `CloudFlareTaskS2` | $3.75 / 1k; 25 poin/tugas · ¥25 / 1k | Asinkron | Proxy sendiri | | `CloudFlareTaskS3` | $3.00 / 1k; 20 poin/tugas · ¥20 / 1k | Asinkron | Proxy sendiri | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `websiteURL` | string | Ya | URL lengkap halaman yang berada di balik halaman verifikasi. Harus berupa URL publik berawalan `http://` atau `https://`; alamat IP privat serta nama host lokal atau internal seperti `localhost` akan ditolak | | `proxy` | string | Ya | Proxy dalam satu string: `http://user:pass@proxy.example.com:8080` (proxy HTTP, kredensial opsional) atau `socks5://proxy.example.com:1080` (tanpa kredensial). Proxy `https://` dan SOCKS5 dengan kredensial tidak didukung, serta alamat lokal atau privat ditolak. Semua permintaan untuk halaman target melewati proxy ini | | `userAgent` | string | Tidak | Biasanya tidak perlu diisi. Hanya User-Agent Chrome desktop di Linux yang dipakai; yang lain (Windows, macOS, seluler, browser lain) diabaikan. Untuk permintaan berikutnya, selalu gunakan `user_agent` dari hasil | | `waitLoad` | boolean | Tidak | Default false. Jika true, setelah lolos verifikasi tugas menunggu hingga aktivitas jaringan halaman mereda sebelum mengembalikan hasil, sehingga `content` berisi lebih banyak konten yang dimuat secara dinamis; butuh beberapa detik lebih lama | | `requiredCookies` | array | Tidak | Daftar nama Cookie yang wajib didapat, berupa array string, misalnya `["cf_clearance"]`. Jika diisi, tugas hanya berhasil bila semuanya didapat; jika tidak, tugas mengembalikan `ERROR_CAPTCHA_UNSOLVABLE` dan poin dikembalikan. Jika tidak diisi, tugas tetap berusaha mendapatkan `cf_clearance`, tetapi dianggap berhasil (dan poin dipotong) dengan Cookie lain yang didapat, jadi isi secara eksplisit jika Anda membutuhkan `cf_clearance` | | `blockImage` | boolean | Tidak | Jika true, gambar di halaman target tidak dimuat (kecuali yang dibutuhkan oleh verifikasi Cloudflare itu sendiri), sehingga menghemat lalu lintas proxy | | `postData` | object | Tidak | Jika diisi, data dikirim ke `websiteURL` sebagai POST formulir HTML biasa (`application/x-www-form-urlencoded`): setiap key adalah satu field formulir dan nilainya dikirim sebagai string, misalnya `{"name": "hi"}`. Harus berupa objek | ### Persyaratan proxy `proxy` wajib diisi, dan semua permintaan untuk membuka halaman target melewati proxy ini. `cf_clearance` terikat pada IP keluar, jadi akses berikutnya ke situs target juga harus memakai proxy yang sama. | Format | Didukung | | --- | --- | | `http://user:pass@proxy.example.com:8080` | Didukung: proxy http dengan akun dan kata sandi | | `http://proxy.example.com:8080` | Didukung: proxy http tanpa akun dan kata sandi | | `socks5://proxy.example.com:1080` | Didukung: proxy socks5 tanpa akun dan kata sandi; `socks5h://` diperlakukan sebagai `socks5://` | | `socks5://user:pass@proxy.example.com:1080` | Tidak didukung, mengembalikan `ERROR_PROXY_INCORRECT`; jika memerlukan akun dan kata sandi, gunakan proxy http | | `https://proxy.example.com:443` atau protokol lain, atau tanpa port | Tidak didukung, mengembalikan `ERROR_PROXY_INCORRECT` | | Alamat lokal, jaringan internal, atau alamat yang dicadangkan seperti `127.0.0.1`, `192.168.x.x`, `10.x.x.x`, atau domain yang diresolusi ke alamat tersebut | Ditolak, mengembalikan `ERROR_PROXY_BANNED` | > **Diperiksa saat tugas dibuat:** Jika URL atau proxy tidak valid, `createTask` langsung mengembalikan error dan tidak ada pemotongan poin. Jika sebuah proxy gagal terhubung beberapa kali dalam waktu singkat, membuat tugas dengan proxy itu juga akan langsung mengembalikan `ERROR_PROXY_BANNED` selama beberapa waktu; gunakan proxy lain atau coba lagi nanti. ### User-Agent Umumnya tidak perlu mengirim `userAgent`. Kami lulus verifikasi dengan Chrome desktop di Linux, sehingga hanya User-Agent Chrome desktop di Linux yang dipakai; yang lain (Windows, macOS, ponsel, atau browser lain) diabaikan: dalam pengujian, verifikasi Cloudflare tidak lolos jika lingkungan browser sebenarnya tidak cocok dengan User-Agent. Untuk semua permintaan berikutnya, selalu gunakan `user_agent` dari hasil. ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "CloudFlareTaskS3", "websiteURL": "https://example.com/", "proxy": "http://user:pass@proxy.example.com:8080", "requiredCookies": ["cf_clearance"] } } ``` - Untuk memakai `CloudFlareTaskS2`, ubah `type` saja, yang lain tetap. - Jika `requiredCookies` diisi `["cf_clearance"]`, tugas gagal dan poin dikembalikan bila `cf_clearance` tidak didapat; jika tidak diisi, tugas yang hanya mendapat Cookie lain tanpa `cf_clearance` tetap dianggap berhasil dan poin dipotong. - Untuk mengirim formulir, tambahkan `postData`, misalnya `{"name": "hi"}`; data dikirim ke `websiteURL` sebagai formulir POST. Setelah tugas dibuat, panggil `getTaskResult` setiap 5 detik; alurnya sama seperti tugas asinkron lainnya, lihat [getTaskResult](https://docs.yescaptcha.com/id/api/get-task-result.md). ## Hasil ```json { "errorId": 0, "status": "ready", "solution": { "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36", "cookies": { "cf_clearance": "Wq3vXk9...-1760860800-1.2.1.1-..." }, "request_headers": { "accept-language": "en-US,en;q=0.9", "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36" }, "headers": { "content-type": "text/html; charset=UTF-8", "server": "cloudflare" }, "content": "..." } } ``` Nilai Cookie dan request header di atas hanya ilustrasi; yang berlaku adalah yang dikembalikan API. | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `cookies` | object | Semua cookie di browser setelah lolos verifikasi (objek nama ke nilai), biasanya termasuk `cf_clearance`; jika Anda mengisi `requiredCookies`, setiap cookie di dalamnya pasti disertakan. Gunakan bersama `user_agent` yang dikembalikan dan proxy yang Anda berikan | | `user_agent` | string | User-Agent yang sebenarnya digunakan browser untuk lolos verifikasi (Chrome desktop di Linux). `cf_clearance` terikat dengannya, jadi gunakan untuk semua permintaan berikutnya | | `request_headers` | object | Header permintaan yang dikirim browser pada permintaan terakhirnya ke halaman target; gunakan kembali pada permintaan berikutnya | | `headers` | object | Header respons halaman target setelah lolos verifikasi | | `content` | string | Sumber HTML halaman target setelah lolos verifikasi | ## Cara memakai hasil 1. Untuk permintaan berikutnya, gunakan `cookies` yang dikembalikan, `user_agent` yang dikembalikan, **dan** proxy yang sama dengan saat membuat tugas. `cf_clearance` terikat pada User-Agent dan IP keluar; jika salah satu dari ketiganya tidak cocok, halaman verifikasi Cloudflare muncul lagi. 2. Sertakan request header sesuai `request_headers` sebisa mungkin, dan gunakan TLS fingerprint yang sama dengan browser (misalnya parameter `impersonate` di curl\_cffi). 3. `cf_clearance` memiliki masa berlaku (ditetapkan oleh situs target, di beberapa situs hingga 1 jam). Selama masa berlaku, Anda tidak perlu melewati verifikasi lagi; frekuensi permintaan yang terlalu tinggi dapat membuat IP diblokir oleh Cloudflare. 4. Jika hanya membutuhkan konten halaman, langsung gunakan `content`, tidak perlu meminta halaman sekali lagi. ## Error umum Error yang dikembalikan saat membuat tugas tidak dipotong poinnya; tugas yang gagal atau timeout setelah berhasil dibuat mendapat pengembalian poin otomatis. API hanya mengembalikan kode error dan keterangan umum, sehingga penyebab sebenarnya dapat dilihat pada tabel berikut. | Kode error | Kapan dikembalikan | Yang perlu dilakukan | | --- | --- | --- | | `ERROR_REQUIRED_FIELDS` | Saat membuat tugas: `websiteURL` atau `proxy` tidak ada | Lengkapi kedua field wajib | | `ERROR_ILLEGAL_PARAMETERS` | Saat membuat tugas: `websiteURL` bukan URL publik berawalan `http://` / `https://`, `postData` bukan objek, atau `requiredCookies` bukan array string. Saat memeriksa hasil: domain target tidak dapat diresolusi melalui proxy | Perbaiki parameter; periksa penulisan URL dan apakah proxy dapat mengakses situs tersebut | | `ERROR_PROXY_INCORRECT` | Saat membuat tugas: format proxy salah, tidak ada port, memakai proxy `https://`, atau socks5 dengan akun dan kata sandi | Ubah sesuai format pada “Persyaratan proxy” di atas; jika memerlukan akun dan kata sandi, gunakan proxy http | | `ERROR_PROXY_BANNED` | Saat membuat tugas: proxy adalah alamat lokal, jaringan internal, atau alamat yang dicadangkan, atau proxy ini gagal terhubung beberapa kali dalam waktu singkat. Saat memeriksa hasil: Cloudflare situs target langsung memblokir IP proxy ini (halaman “Sorry, you have been blocked” atau “Access denied”) | Ganti proxy; semakin baik kualitas IP, semakin mudah lolos | | `ERROR_PROXY_CONNECT_REFUSED` | Tidak dapat terhubung ke proxy (koneksi ditolak, domain proxy tidak dapat diresolusi), atau koneksi ditolak atau direset saat membuka halaman melalui proxy | Periksa alamat dan port proxy, pastikan proxy online dan mengizinkan akses dari luar; jika masih gagal, ganti proxy | | `ERROR_PROXY_CONNECT_TIMEOUT` | Timeout saat terhubung ke proxy atau saat membuka halaman melalui proxy | Gunakan proxy yang lebih cepat dan stabil | | `ERROR_PROXY_NOT_AUTHORISED` | Akun atau kata sandi proxy salah | Periksa akun dan kata sandi di `proxy`; karakter khusus harus di-URL-encode | | `ERROR_PROXY_TLS_ERROR` | Handshake TLS gagal saat membuka halaman melalui proxy | Pastikan alamat, port, dan protokol proxy tidak salah; jika masih gagal, ganti proxy | | `ERROR_CAPTCHA_UNSOLVABLE` | Verifikasi tidak lolos dalam waktu yang ditentukan, halaman masih berupa halaman pemeriksaan setelah lolos, atau Cookie yang diminta di `requiredCookies` tidak didapat | Coba lagi dengan proxy lain; untuk situs tertentu, hubungi dukungan | | `ERROR_NO_SLOT_AVAILABLE` | Saat membuat tugas: antrean penuh. Saat memeriksa hasil: antrean terlalu lama dan belum dimulai, poin sudah dikembalikan | Tunggu beberapa detik, lalu buat tugas lagi | | `ERROR_TASK_TIMEOUT` | Tugas tidak selesai dalam waktu yang ditentukan | Buat tugas baru; timeout yang terus berulang umumnya berarti proxy terlalu lambat | Daftar lengkap kode error ada di [Kode error](https://docs.yescaptcha.com/id/api/errors.md). ## Terkait - [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md): perbedaan halaman verifikasi Cloudflare dan Turnstile - [Cloudflare Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md) --- # Pengenalan teks pada gambar > Kenali huruf dan angka di dalam gambar dengan YesCaptcha. ImageToTextTaskOcrBase dan ImageToTextTaskMuggle mengembalikan hasil secara sinkron; ImageToTextTask dan ImageToTextTaskM1 bersifat asinkron dan mendukung huruf besar/kecil, hanya angka, ekspresi hitung, dan batas panjang; model khusus tersedia. Source: https://docs.yescaptcha.com/id/tasks/image-to-text/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/image-to-text/ Kirim gambar captcha berupa karakter dalam format Base64, lalu terima huruf dan angka di dalam gambar (`solution.text`). `ImageToTextTaskOcrBase` dikenai biaya 2 poin (≈ $0.30 / 1k) per gambar dan bersifat sinkron: satu permintaan `createTask` langsung mengembalikan hasilnya. Jika Anda memerlukan ketentuan seperti huruf besar/kecil, hanya angka, atau ekspresi hitung, gunakan `ImageToTextTask` yang asinkron. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) Isi permintaan berupa JSON, dengan autentikasi memakai `clientKey`. ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `ImageToTextTaskOcrBase` | $0.30 / 1k; 2 poin/tugas · ¥2 / 1k | Sinkron | | | `ImageToTextTaskMuggle` | $0.30 / 1k; 2 poin/tugas · ¥2 / 1k | Sinkron | Tidak mendukung opsi case/numeric; gunakan project\_name untuk memilih model khusus | | `ImageToTextTask` | $0.60 / 1k; 4 poin/tugas · ¥4 / 1k | Asinkron | | | `ImageToTextTaskM1` | $2.25 / 1k; 15 poin/tugas · ¥15 / 1k | Asinkron | | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. | Kebutuhan | Gunakan | | --- | --- | | Captcha huruf dan angka biasa, paling murah dan paling cepat | `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle` (sinkron) | | Dikenali dengan model yang dibuat khusus untuk Anda | `ImageToTextTaskMuggle` dengan `project_name` | | Perlu membedakan huruf besar/kecil, hanya angka, menghitung ekspresi, membatasi panjang | `ImageToTextTask`, `ImageToTextTaskM1` (asinkron) | Setiap jenis memakai model dan jalur yang berbeda, sehingga hasil untuk gambar yang sama bisa berbeda. Coba semuanya terlebih dahulu, lalu pilih yang terbaik. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `body` | string | Ya | Gambar yang dienkode Base64 tanpa prefiks `data:image/...;base64,` dan tanpa baris baru | | `project_name` | string | Tidak | Nama model khusus, hanya didukung oleh `ImageToTextTaskMuggle`. Jangan diisi untuk memakai model alfanumerik umum. Hubungi Dukungan untuk model khusus (hanya ImageToTextTaskMuggle) | | `phrase` | boolean | Tidak | true berarti jawaban berisi setidaknya satu spasi (hanya ImageToTextTask, ImageToTextTaskM1) | | `case` | boolean | Tidak | true berarti jawaban peka huruf besar/kecil (hanya ImageToTextTask, ImageToTextTaskM1) | | `numeric` | integer | Tidak | 0 tanpa persyaratan; 1 hanya angka; 2 tanpa angka (hanya ImageToTextTask, ImageToTextTaskM1) | | `math` | boolean | Tidak | true berarti gambar berupa ekspresi matematika dan jawabannya adalah hasilnya (hanya ImageToTextTask, ImageToTextTaskM1) | | `minLength` | integer | Tidak | Panjang jawaban minimum; 0 berarti tanpa batas (hanya ImageToTextTask, ImageToTextTaskM1) | | `maxLength` | integer | Tidak | Panjang jawaban maksimum; 0 berarti tanpa batas (hanya ImageToTextTask, ImageToTextTaskM1) | `body` adalah encoding Base64 dari file gambar. Gambar WebP dikonversi secara otomatis. > **Perhatian:** Jangan sertakan awalan `data:image/...;base64,` dan jangan ada baris baru di dalam Base64. ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE" } } ``` Kode lengkap (membaca `captcha.png` di direktori saat ini): **curl** ```bash # Replace BASE64_IMAGE with the Base64-encoded image curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE" } }' ``` **Python** solve.py ```python import os import base64 import requests API = "https://api.yescaptcha.com" CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def solve(task): return call("createTask", {"task": task})["solution"] # Base64-encode the image (no data: prefix) with open("captcha.png", "rb") as f: image_b64 = base64.b64encode(f.read()).decode() solution = solve({ "type": "ImageToTextTaskOcrBase", "body": image_b64, }) print(solution["text"]) ``` **Node.js** solve.mjs ```js import { readFileSync } from 'node:fs'; const API = 'https://api.yescaptcha.com'; const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data; } async function solve(task) { const { solution } = await call('createTask', { task }); return solution; } // Base64-encode the image (no data: prefix) const imageB64 = readFileSync('captcha.png').toString('base64'); const solution = await solve({ type: "ImageToTextTaskOcrBase", body: imageB64, }); console.log(solution.text); ``` Tugas asinkron dengan ketentuan tambahan: POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ImageToTextTask", "body": "BASE64_IMAGE", "case": true, "numeric": 0, "minLength": 4, "maxLength": 6 } } ``` ## Hasil Jenis sinkron langsung mengembalikan hasil di `createTask`: ```json { "errorId": 0, "status": "ready", "solution": { "text": "LMResm" }, "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b" } ``` Jenis asinkron (`ImageToTextTask`, `ImageToTextTaskM1`) lebih dulu mengembalikan `taskId`, lalu lakukan polling (memeriksa berkala) dengan `getTaskResult` setiap 5 detik. Setelah selesai, format `solution` sama. | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `text` | string | Teks yang berhasil dikenali | ## Model khusus Model umum dapat dipakai untuk semua captcha huruf dan angka, tetapi akurasinya sedikit lebih rendah daripada model yang dilatih khusus. Jika gambar yang ingin Anda kenali selalu memiliki satu gaya yang sama, [hubungi dukungan](https://docs.yescaptcha.com/id/help/contact.md) untuk membuat model khusus, lalu tentukan modelnya dengan `ImageToTextTaskMuggle` dan `project_name`. ## Pertanyaan umum ### Apakah poin dipotong jika hasilnya salah? Untuk jenis sinkron, poin dipotong setiap kali hasil dikembalikan, meskipun hasilnya salah. Anda bisa membandingkan dengan jenis lain, atau meminta model khusus. ### Saya mendapat `ERROR_ZERO_CAPTCHA_FILESIZE` atau `ERROR_PARSE_IMAGE_FAIL`? Base64 gambar tidak lengkap, atau memakai awalan `data:` atau ada baris baru. Periksa encoding-nya, lihat [Kode error](https://docs.yescaptcha.com/id/api/errors.md). ## Contoh terkait - [Mulai cepat](https://docs.yescaptcha.com/id/getting-started/quickstart.md): mengirim permintaan pertama dengan `ImageToTextTaskOcrBase` - [Contoh Python](https://docs.yescaptcha.com/id/samples/python.md) --- # Pengenalan gambar reCAPTCHA v2 > Kenali tantangan gambar reCAPTCHA v2 dengan YesCaptcha (ReCaptchaV2Classification): unggah gambar 3x3, 4x4, atau 1x1 beserta ID pertanyaan, dan dapatkan kotak yang harus diklik secara sinkron; harga sesuai ukuran gambar; tabel ID pertanyaan. Source: https://docs.yescaptcha.com/id/tasks/recaptcha-classification/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/recaptcha-classification/ `ReCaptchaV2Classification` mengenali tantangan gambar yang muncul pada reCAPTCHA v2: kirim gambar dan ID pertanyaan, lalu Anda mendapat kotak mana yang harus diklik; program Anda yang melakukan klik di browser. Jenis ini **tidak mengembalikan token**. Hasilnya sinkron, cukup satu permintaan `createTask`; gambar 3x3 atau 4x4 dikenai 6 poin (≈ $0.90 / 1k) per gambar, sedangkan gambar kecil 1x1 lebih murah, lihat tabel di bawah. > **Tips:** Jika tidak ingin menulis logika klik sendiri, gunakan [ekstensi browser](https://docs.yescaptcha.com/id/extension.md), yang mengeklik otomatis berdasarkan API ini. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `ReCaptchaV2Classification` | $0.90 / 1k; 6 poin/tugas · ¥6 / 1k | Sinkron | 2 poin untuk petak 1x1 (100x100); 6 poin untuk 3x3 (300x300) dan 4x4 (450x450) | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `image` | string | Ya | Gambar soal yang dienkode Base64 tanpa prefiks `data:` | | `question` | string | Ya | ID pertanyaan seperti `/m/0k4j`; lihat "ID pertanyaan" di halaman ini | | `confidence` | number | Tidak | Ambang kepercayaan dari 0 sampai 1, hanya berlaku untuk gambar 3x3. Jika diisi (disarankan mulai dari 0.5), semua kotak di atas nilai tersebut dikembalikan; jika tidak diisi, 3 kotak teratas yang dikembalikan | > **Perhatian:** Gambar harus diubah ukurannya ke salah satu ukuran standar pada tabel di bawah; server menentukan jenis tantangan berdasarkan ukuran. | Jenis tantangan | Ukuran gambar | Hasil | | --- | --- | --- | | Kisi 3x3 (“Select all images with …”) | 300 × 300 | `objects`: kotak yang harus diklik | | Kisi 4x4 (“Select all squares with …”) | 450 × 450 | `objects`: kotak yang harus diklik | | Gambar kecil 1x1 (satu gambar pengganti yang muncul setelah klik pada kisi 3x3) | 100 × 100 | `hasObject`: apakah gambar ini perlu diklik | Jika Anda menggunakan tangkapan layar, bedakan dari pertanyaannya: kisi 3x3 berbunyi “Select all images with …”, sedangkan kisi 4x4 berbunyi “Select all squares with …”. ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ReCaptchaV2Classification", "image": "BASE64_IMAGE", "question": "/m/0k4j" } } ``` ## Hasil 3x3 dan 4x4: ```json { "errorId": 0, "status": "ready", "solution": { "objects": [1, 5, 8], "type": "multi" }, "taskId": "3a9e8cb8-3871-11ec-9794-94e6f7355a0b" } ``` Gambar kecil 1x1: ```json { "errorId": 0, "status": "ready", "solution": { "hasObject": true, "type": "single" } } ``` | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `objects` | array | Indeks gambar yang harus diklik, dimulai dari 0, dari kiri ke kanan dan atas ke bawah | | `hasObject` | boolean | Dikembalikan untuk gambar kecil 1x1; apakah gambar tersebut berisi target | | `type` | string | Jenis soal: `multi` (gambar besar 3x3 atau 4x4, lihat `objects`), `single` (gambar kecil 1x1, lihat `hasObject`); `drag` untuk soal geser hCaptcha | Kotak diberi nomor mulai dari 0, dari kiri ke kanan dan dari atas ke bawah:   ## confidence: dapatkan semua kotak yang cocok sekaligus Setelah kisi 3x3 diklik, biasanya muncul gambar kecil 1x1 yang juga perlu diperiksa. Jika gambar kecil itu sulit diambil (misalnya saat mengembangkan untuk ponsel), kirim `confidence`: - Jika tidak dikirim, gambar 3x3 mengembalikan 3 kotak dengan skor tertinggi (reCAPTCHA mewajibkan minimal 3 klik). - Jika dikirim (disarankan `0.5`), semua kotak dengan skor di atas nilai tersebut dikembalikan, jumlahnya bisa lebih atau kurang dari 3; jika tidak ada yang cocok, hasilnya array kosong. Dengan begitu Anda tidak perlu lagi mengirim gambar kecil 1x1. - Tidak berpengaruh pada gambar 4x4 dan 1x1. ## ID pertanyaan `question` diisi dengan ID pertanyaan (diawali `/m/`), bukan teks pertanyaannya. ID ini dikirim bersama gambar dalam respons permintaan yang dipakai reCAPTCHA untuk memuat tantangan (`reload` atau `userverify`). Berikut pertanyaan yang umum; terjemahan Mandarin hanya sebagai referensi: Total 16 | ID pertanyaan | Pertanyaan (Inggris) | | --- | --- | | `/m/0pg52` | `taxis` | | `/m/01bjv` | `bus` | | `/m/04_sv` | `motorcycles` | | `/m/013xlm` | `tractors` | | `/m/01jk_4` | `chimneys` | | `/m/014xcs` | `crosswalks` | | `/m/015qff` | `traffic lights` | | `/m/0199g` | `bicycles` | | `/m/015qbp` | `parking meters` | | `/m/0k4j` | `cars` | | `/m/015kr` | `bridges` | | `/m/019jd` | `boats` | | `/m/0cdl1` | `palm trees` | | `/m/09d_r` | `mountains or hills` | | `/m/01pns0` | `fire hydrant` | | `/m/01lynh` | `stairs` | Tidak ada pertanyaan yang cocok `ERROR_UNKNOWN_QUESTION` berarti ID salah atau pertanyaan ini belum didukung; `ERROR_UNKNOW_450x450_QUESTION` berarti pertanyaan ini belum didukung untuk gambar 4x4, cukup muat ulang di halaman untuk mendapat pertanyaan lain. ## Laporan dan pengembalian poin Jika verifikasi gagal setelah klik, laporkan dengan [report](https://docs.yescaptcha.com/id/api/report.md) dalam 1 jam; pengembalian poin setelah laporan diselesaikan sekitar 24 jam kemudian. Aturannya ada di [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). Jika verifikasi berhasil, laporkan juga dengan `isSuccess: true`. ## Panduan terkait - [Klik gambar reCAPTCHA v2 dengan Selenium](https://docs.yescaptcha.com/id/guides/recaptcha-click-selenium.md) - [reCAPTCHA v2 (mengembalikan token)](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) --- # Pengenalan gambar hCaptcha > Kenali tantangan gambar hCaptcha dengan YesCaptcha (HCaptchaClassification): pemilihan kisi, klik posisi tertentu, seret ke posisi tertentu, dan pertanyaan animasi; sinkron, dan tidak ada pemotongan poin jika target tidak ditemukan. Source: https://docs.yescaptcha.com/id/tasks/hcaptcha-classification/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/hcaptcha-classification/ `HCaptchaClassification` mengenali tantangan gambar yang muncul di hCaptcha: kirim pertanyaan dan gambarnya, lalu Anda mendapat hasil berupa gambar mana yang harus dipilih, posisi mana yang harus diklik, atau dari mana ke mana harus menyeret; program Anda yang menjalankan aksinya di browser. Jenis ini **tidak mengembalikan token**. Responsnya sinkron, biayanya 8 poin (≈ $1.20 / 1k) per permintaan, dan tidak ada pemotongan poin jika target tidak ditemukan (hasil kosong). > **Tips:** Jika tidak ingin menulis logika klik sendiri, gunakan [ekstensi browser](https://docs.yescaptcha.com/id/extension.md); semua jenis pertanyaan ini didukung oleh ekstensi. Jika Anda membutuhkan token, bukan posisi klik, gunakan [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md). - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `HCaptchaClassification` | $1.20 / 1k; 8 poin/tugas · ¥8 / 1k | Sinkron | Tidak ada pemotongan poin jika target tidak ditemukan | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `queries` | array | Ya | Daftar gambar soal dalam encoding Base64, sesuai urutan di halaman (9 gambar kecil untuk kisi 3×3) | | `question` | string | Tidak | Pertanyaan lengkap seperti yang ditampilkan di halaman (disarankan bahasa Mandarin Sederhana atau Inggris), misalnya `Please click each image containing a bicycle`. Kirim minimal salah satu dari `question` dan `anchors`; disarankan mengirim keduanya | | `anchors` | array | Tidak | Daftar gambar contoh dalam encoding Base64 yang ditampilkan di samping pertanyaan; wajib dikirim untuk pertanyaan yang memiliki gambar contoh | - Kirim `question` persis seperti kalimat lengkap yang tampil di halaman; tidak perlu diterjemahkan, tetapi disarankan mengganti bahasa hCaptcha ke Mandarin Sederhana atau Inggris. Pertanyaan baru umumnya segera didukung, dan kategori yang benar-benar baru didukung dalam 3 hari kerja. > **Perhatian:** Jika di pojok kanan atas pertanyaan terdapat gambar contoh kecil, masukkan gambar tersebut ke `anchors`. Pertanyaan yang hanya bisa dijawab dengan melihat gambar contoh tidak dapat dikenali tanpa `anchors`. ## Pemilihan kisi 3×3 Pertanyaannya berbunyi “Please click each image containing …” dengan 9 gambar kecil di bawahnya. Masukkan Base64 dari 9 gambar kecil tersebut ke `queries` secara berurutan: POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "HCaptchaClassification", "question": "Please click each image containing a bicycle", "queries": ["BASE64_IMAGE_1", "BASE64_IMAGE_2"] } } ``` Hasil: ```json { "errorId": 0, "status": "ready", "solution": { "objects": [true, false, false, true, true, false, true, true, false], "top_k": [0, 3, 4, 6, 7], "confidences": [1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0] } } ``` `objects` dan `top_k` memiliki arti yang sama: `objects` menunjukkan apakah tiap gambar adalah target, sedangkan `top_k` berisi nomor urut gambar target (dimulai dari 0). Cukup klik gambar-gambar tersebut. ## Klik posisi tertentu Pertanyaannya berbunyi “Please click …”, dengan satu gambar besar di bawahnya, dan Anda perlu mengklik satu (atau beberapa) posisi pada gambar itu. 1. Ambil `question` dari halaman; jika ada gambar contoh kecil, masukkan ke `anchors`. 2. Masukkan satu gambar ke `queries`: sebaiknya gambar asli yang diekspor langsung dari canvas (disarankan dikonversi ke JPG). Jika hanya bisa mengambil tangkapan layar, tangkap area gambar besar di dalam kotak merah di bawah ini, jangan lebih dan jangan kurang. 3. `box` pada hasil adalah koordinat yang harus diklik, berurutan x1, y1, x2, y2, …, dengan titik asal di pojok kiri atas gambar yang diunggah. 4. Jika ukuran gambar yang diunggah berbeda dengan ukuran tampilannya di halaman, lakukan konversi: x di halaman = x hasil × lebar tampilan ÷ lebar gambar yang diunggah (y sama). Contoh: hasil x = 769, lebar tampilan canvas 350, lebar gambar yang diunggah 1000, maka posisi yang diklik di halaman adalah 769 × 350 ÷ 1000 ≈ 269.  POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "HCaptchaClassification", "question": "Please click on the entity present in the sample image.", "anchors": ["BASE64_ANCHOR_1", "BASE64_ANCHOR_2", "BASE64_ANCHOR_3"], "queries": ["BASE64_OF_THE_BIG_IMAGE"] } } ``` Hasil: ```json { "errorId": 0, "status": "ready", "solution": { "box": ["221", "213"] } } ``` Jika ada beberapa target yang harus diklik, `box` berisi beberapa pasang koordinat secara berurutan: `["221", "213", "340", "118", ...]`. ## Seret ke posisi tertentu Pertanyaannya berbunyi “Drag … to …”, dan Anda perlu menyeret potongan di sebelah kanan ke posisi yang sesuai pada gambar. 1. Ambil `question` dari halaman. 2. Ambil satu tangkapan layar dan masukkan ke `queries`; gambar harus memuat **sekaligus** potongan yang akan diseret dan posisi tujuannya, dengan setiap sisi gambar minimal 260 piksel. 3. Setiap item di `box` pada hasil adalah satu kali seretan: `start` adalah posisi potongan, `end` adalah posisi tujuan. Jika ada beberapa potongan, seret satu per satu. ```json { "errorId": 0, "status": "ready", "solution": { "type": "drag", "box": [ { "start": [644, 218], "end": [239, 315] } ] } } ```  Jika yang Anda peroleh adalah data protokol (gambar potongan, koordinat potongan, dan gambar latar besar) dan bukan tangkapan layar, tempelkan dulu potongan ke gambar latar sesuai koordinatnya hingga tampilannya sama dengan tangkapan layar halaman, lalu kirim. ## Pertanyaan animasi Jika gambar pertanyaan berupa animasi, masukkan Base64 animasi (GIF atau format lain) ke `queries`. Disarankan durasi animasi minimal 3 detik, idealnya 5 sampai 6 detik, dengan frame rate sekitar 12 FPS. ## Laporan dan pengembalian poin Jika verifikasi gagal setelah klik, Anda dapat melaporkannya dengan [report](https://docs.yescaptcha.com/id/api/report.md) dalam 1 jam; pengembalian poin setelah laporan diselesaikan sekitar 24 jam kemudian. Aturannya ada di [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). ## Tutorial terkait - [Klik gambar hCaptcha dengan Selenium](https://docs.yescaptcha.com/id/guides/hcaptcha-click-selenium.md) --- # Pengenalan gambar FunCaptcha > Kenali teka-teki gambar FunCaptcha (Arkose Labs) dengan YesCaptcha (FunCaptchaClassification). Unggah gambar teka-teki (kisi 6 gambar atau teka-teki panah dengan gambar kiri dan kanan) beserta pertanyaan dalam bahasa Inggris, lalu dapatkan secara sinkron gambar mana yang harus dipilih; semua jenis teka-teki didukung. Source: https://docs.yescaptcha.com/id/tasks/funcaptcha-classification/ · Last verified: 2026-10-16 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/funcaptcha-classification/ `FunCaptchaClassification` mengenali teka-teki gambar FunCaptcha (Arkose Labs): kirim gambar teka-teki beserta pertanyaan dalam bahasa Inggris, dan Anda akan mendapat gambar mana yang harus dipilih, lalu program Anda mengkliknya di browser. Jenis ini **tidak mengembalikan token**. Hasil dikembalikan secara sinkron, dengan biaya 3 poin (≈ $0.45 / 1k) per permintaan. > **Tips:** Tanpa menulis kode, gunakan [ekstensi browser](https://docs.yescaptcha.com/id/extension.md) untuk menyelesaikannya secara otomatis di halaman web. - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) ## Jenis dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `FunCaptchaClassification` | $0.45 / 1k; 3 poin/tugas · ¥3 / 1k | Sinkron | | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `image` | string | Ya | Gambar soal yang dienkode Base64 tanpa prefiks `data:` | | `question` | string | Ya | Teks pertanyaan dalam bahasa Inggris (misalnya `Pick the image that is the correct way up`); pertanyaan yang didukung tercantum di halaman ini | - `image` hanya berisi bagian gambar teka-teki (kisi 6 gambar, atau gambar kiri dan kanan yang digabung pada teka-teki panah). Jangan sertakan judul atau tombol di atasnya. Tangkapan layar harus utuh; bagian yang hilang akan memengaruhi akurasi. Untuk kisi 6 gambar yang tersusun vertikal, unggah gambar aslinya langsung. - `question` adalah teks pertanyaan lengkap dalam bahasa Inggris persis seperti yang tampil di halaman web, dengan huruf besar-kecil yang tepat; jangan diterjemahkan sendiri. Jika halaman web menggunakan bahasa lain, ubah captcha ke bahasa Inggris terlebih dahulu. Server menentukan jenis teka-teki dari pertanyaan, jadi pertanyaan harus tepat. ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "FunCaptchaClassification", "image": "BASE64_IMAGE", "question": "Pick the bread" } } ``` ## Hasil ```json { "errorId": 0, "status": "ready", "solution": { "objects": [4], "labels": ["parrot", "panda", "octopus", "owl", "bread", "dog"] }, "taskId": "04a3fa76-11a0-11ed-a58c-0ef20f419382" } ``` | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `objects` | array | Indeks gambar yang harus dipilih, dimulai dari 0, dari kiri ke kanan dan atas ke bawah | | `labels` | array | Label yang berhasil dikenali | `objects: [4]` berarti pilih gambar ke-5 (indeks dimulai dari 0, dari kiri ke kanan dan dari atas ke bawah). Satu soal sering terdiri dari beberapa putaran berturut-turut; setiap putaran harus ditangkap ulang dan dikirim sebagai panggilan baru. ## Pertanyaan yang didukung **Semua jenis teka-teki didukung**, jadi tidak perlu memeriksa daftar pertanyaan terlebih dahulu: kirim saja pertanyaan bahasa Inggris dan gambar teka-teki dari halaman web. Jika Anda menerima `ERROR_UNKNOWN_QUESTION`, [hubungi dukungan](https://docs.yescaptcha.com/id/help/contact.md). Yang paling umum saat ini adalah teka-teki panah dengan dua bagian: sisi kiri adalah contoh yang harus dicocokkan, sisi kanan adalah gambar saat ini, yang diganti dengan panah di halaman web sampai ditemukan gambar yang sesuai dengan pertanyaan. Unggah seluruh gambar (kedua bagian) sebagaimana tampil di halaman web, misalnya:  `Use the arrows to change the number of objects until it matches the left image`Jumlahnya sama dengan gambar kiri  `use the arrows to choose the image where all the darts add up to the number in the left image`Jumlah angka pada dart sama dengan angka di gambar kiri  `use the arrows to find the jigsaw puzzle that is missing the puzzle piece shown on the left`Potongan yang hilang tepat seperti potongan puzzle di kiri  `find the image that has the prize on the left held by the claw in the machine on the right`Capit memegang hadiah yang ada di kiri Jenis lainnya adalah teka-teki pilih gambar dengan kisi 6 gambar (seperti `Pick the bread`): cukup unggah bagian kisi 6 gambar, seperti pada contoh permintaan di atas. ## Laporan dan pengembalian poin Jika pengiriman akhir gagal dan Anda tidak tahu putaran mana yang salah, laporkan seluruh ID tugas dalam satu kelompok dengan [report](https://docs.yescaptcha.com/id/api/report.md) dalam 1 jam; pengembalian poin setelah laporan diselesaikan sekitar 24 jam kemudian. Aturannya ada di [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). --- # Pengenalan gambar AWS WAF / bCaptcha > Kenali tantangan gambar kisi 3×3 AWS WAF CAPTCHA dan bCaptcha dengan YesCaptcha (AwsClassification, bCaptchaClassification). Unggah gambar utuh beserta pertanyaannya, lalu dapatkan kotak yang harus diklik secara sinkron. Source: https://docs.yescaptcha.com/id/tasks/aws-bcaptcha-classification/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/aws-bcaptcha-classification/ `AwsClassification` mengenali tantangan gambar kisi 3×3 AWS WAF CAPTCHA, dan `bCaptchaClassification` mengenali tantangan gambar kisi 3×3 bCaptcha: kirim gambar utuh beserta pertanyaannya, lalu Anda mendapat kotak mana saja yang harus diklik. Program Anda yang mengklik di browser. Kedua jenis ini **tidak mengembalikan token**. Hasilnya sinkron, dengan biaya 8 poin (≈ $1.20 / 1k) per permintaan. Jika tidak ingin menulis kode, gunakan [ekstensi browser](https://docs.yescaptcha.com/id/extension.md). - POST `https://api.yescaptcha.com/createTask` (Endpoint global) - POST `https://cn.yescaptcha.com/createTask` (Endpoint Tiongkok) ## Jenis tugas dan harga | Jenis tugas | Harga | Mode | Catatan | | --- | --- | --- | --- | | `AwsClassification` | $1.20 / 1k; 8 poin/tugas · ¥8 / 1k | Sinkron | | | `bCaptchaClassification` | $1.20 / 1k; 8 poin/tugas · ¥8 / 1k | Sinkron | | Harga dalam dolar AS adalah perkiraan dengan kurs US$1 ≈ ¥6.67; tugas ditagih dalam poin. Kedua jenis memiliki parameter dan format respons yang sama. Pilih sesuai asal captcha: `AwsClassification` untuk AWS WAF, `bCaptchaClassification` untuk bCaptcha. ## Parameter permintaan | Kolom | Tipe | Wajib | Deskripsi | | --- | --- | --- | --- | | `type` | string | Ya | Jenis tugas; lihat "Jenis tugas dan harga" di halaman ini | | `queries` | string | Ya | Base64 dari seluruh gambar kisi 3×3 (satu gambar) | | `question` | string | Tidak | Pertanyaan lengkap seperti yang ditampilkan di halaman, misalnya `Select all hats`; bahasa lain diterjemahkan secara otomatis | `queries` berisi gambar kisi **utuh** (satu gambar, bukan 9 gambar kecil). Untuk `question`, ambil kalimat pertanyaan lengkap dari halaman web apa adanya. Bahasa Mandarin dan Inggris bisa dipakai, bahasa lain diterjemahkan otomatis. ## Contoh permintaan POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "AwsClassification", "queries": "BASE64_IMAGE", "question": "Select all hats" } } ``` ## Hasil ```json { "errorId": 0, "status": "ready", "solution": { "label": "Select All Hats", "objects": [false, true, false, false, true, true, true, true, false], "top_k": [1, 4, 5, 6, 7], "confidences": [0.0, 1.0, 0.0, 0.255, 1.0, 1.0, 0.9637, 0.9999, 0.0] }, "taskId": "2053f690-3c3b-11f0-8ffb-d2c180657082" } ``` | Kolom | Tipe | Deskripsi | | --- | --- | --- | | `label` | string | Target pertanyaan yang berhasil dikenali | | `objects` | array | Apakah masing-masing dari 9 kotak adalah target (true / false), dari kiri ke kanan dan atas ke bawah | | `top_k` | array | Indeks (mulai dari 0) gambar yang merupakan target; artinya sama dengan `objects`, gunakan salah satu | | `confidences` | array | Tingkat kepercayaan untuk setiap hasil | Sembilan kotak diberi nomor 0 sampai 8 dalam susunan 3×3, dari kiri ke kanan dan dari atas ke bawah. `objects` dan `top_k` berisi informasi yang sama, pilih salah satu: klik kotak yang nilainya `true` di `objects`, atau nomor yang ada di `top_k`. ## Laporan dan pengembalian poin Jika verifikasi gagal setelah Anda mengklik, laporkan tugas tersebut dengan [report](https://docs.yescaptcha.com/id/api/report.md) dalam 1 jam. Pengembalian poin setelah laporan diselesaikan sekitar 24 jam kemudian. Aturannya ada di [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). --- # YesCaptcha Assistant > YesCaptcha Assistant (ekstensi browser) untuk Chrome dan Firefox yang mengenali dan mengklik reCAPTCHA, hCaptcha, FunCaptcha, AWS WAF, dan captcha lainnya secara otomatis. Ekstensi ini gratis; poin dipotong sesuai API yang dipakai untuk pengenalan. Tautan toko, unduhan paket, serta video instalasi untuk Chrome, BitBrowser, dan Kiwi Browser. Source: https://docs.yescaptcha.com/id/extension/ · Last verified: 2026-10-24 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/extension/ YesCaptcha Assistant adalah ekstensi browser untuk Chrome dan Firefox: saat Anda membuka halaman yang menampilkan captcha, ekstensi mengirim gambar captcha ke YesCaptcha untuk dikenali, lalu mengklik secara otomatis, tanpa perlu menulis kode. Ekstensi ini gratis; pengenalan dikenai pemotongan poin sesuai API yang dipakai, dengan akun dan saldo yang sama seperti API. ## Fungsi - Mengenali dan mengklik soal gambar reCAPTCHA v2, hCaptcha, FunCaptcha, AWS WAF, dan bCaptcha secara otomatis. - Captcha karakter biasa: klik kanan pada gambar lalu pilih “Tandai sebagai captcha”, klik kanan pada kolom input lalu pilih “Isi captcha”; ekstensi akan mengenali dan mengisinya. - Di pengaturan, setiap jenis captcha bisa diaktifkan atau dinonaktifkan sendiri-sendiri, serta kecepatan klik dan percobaan ulang saat gagal bisa disesuaikan. > **Catatan:** Tidak semua situs bisa dilewati, sebaiknya coba dulu. ## Instalasi **Instal dari toko (disarankan, diperbarui otomatis):** - Chrome (dan browser berbasis Chromium seperti Edge): [Chrome Web Store](https://chromewebstore.google.com/detail/yescaptcha-assistant/jiofmdifioeejeilfkpegipdjiopiekl) - Firefox: [Firefox Add-ons](https://addons.mozilla.org/firefox/addon/yescaptcha-assistant/) Buka halaman ekstensi di Chrome Web Store, klik “Tambahkan ke Chrome”, lalu klik ikon ekstensi di toolbar dan isi `clientKey`: Browser Anda tidak dapat memutar video ini. Unduh videonya: [Video: instalasi dari Chrome Web Store (34 detik)](https://docs.yescaptcha.com/videos/extension-chrome-store.mp4) Video: instalasi dari Chrome Web Store (34 detik) **Jika toko tidak bisa dibuka, unduh paket instalasi:** Versi Chrome Versi 1.4.12 Ukuran 1.1 MB Diperbarui 2026-11-10 [Unduh](https://api.yescaptcha.com/extension/chrome/latest)[Chrome Web Store](https://chromewebstore.google.com/detail/yescaptcha-assistant/jiofmdifioeejeilfkpegipdjiopiekl) Versi Firefox Versi 0.4.6 Ukuran 0.9 MB Diperbarui 2026-10-31 [Unduh](https://api.yescaptcha.com/extension/firefox/latest)[Firefox Add-ons](https://addons.mozilla.org/firefox/addon/yescaptcha-assistant/) Versi di toko Firefox bisa lebih lama daripada paket di sini; untuk versi terbaru, gunakan paket instalasi. ### Instalasi Chrome dengan paket 1. Unduh file zip, lalu ekstrak ke folder yang tetap. 2. Buka `chrome://extensions` di address bar, lalu aktifkan “Mode pengembang” di kanan atas. 3. Klik “Muat yang belum dikemas”, lalu pilih folder hasil ekstrak. 4. Klik ikon ekstensi di toolbar, lalu isi `clientKey` Anda. Sebelum memuat, Anda juga bisa membuka `config.js` hasil ekstrak dengan editor teks, mengisi `clientKey` Anda di antara tanda kutip pada `clientKey: ''`, lalu menyimpannya. Setelah terpasang, Anda tidak perlu mengisinya lagi. Cara ini lebih praktis jika Anda memasang ekstensi di banyak lingkungan browser. Browser Anda tidak dapat memutar video ini. Unduh videonya: [Video: instalasi Chrome dengan paket, isi clientKey di config.js terlebih dahulu (44 detik; video memakai versi lama, langkahnya sama)](https://docs.yescaptcha.com/videos/extension-chrome-zip.mp4) Video: instalasi Chrome dengan paket, isi clientKey di config.js terlebih dahulu (44 detik; video memakai versi lama, langkahnya sama) > **Perhatian:** Jangan hapus atau pindahkan folder hasil ekstrak, karena browser tidak akan bisa memuat ekstensi. Ekstensi yang dipasang dengan paket tidak diperbarui otomatis; unduh ulang saat ada versi baru. ### Instalasi Firefox dengan paket 1. Unduh file `.xpi`. 2. Buka `about:addons` di address bar, klik ikon roda gigi, pilih “Pasang Pengaya dari Berkas”, lalu pilih file yang diunduh. 3. Klik ikon ekstensi di toolbar, lalu isi `clientKey` Anda. ## Instalasi di BitBrowser Browser anti-deteksi (anti-detect browser) seperti BitBrowser berbasis Chrome. Ekstensi ditambahkan lewat Extension Center (扩展中心) dan bisa diaktifkan untuk semua jendela atau jendela tertentu. Langkah dan video di bawah direkam dengan BitBrowser 6.0 berantarmuka bahasa Mandarin; versi yang lebih baru mungkin tampil sedikit berbeda. ### Dari Chrome Web Store 1. Di sisi kiri BitBrowser, klik Extension Center (扩展中心), klik “Add custom extension” (添加自定义扩展), lalu pilih “Add Chrome Web Store extension” (添加 Chrome 商店扩展). 2. Pada kolom URL detail ekstensi, tempel alamat Chrome Web Store ekstensi `https://chromewebstore.google.com/detail/yescaptcha-assistant/jiofmdifioeejeilfkpegipdjiopiekl`, klik tombol di sebelah kanan kolom untuk mengenali, lalu setelah “YesCaptcha Assistant” terdeteksi, klik “OK”. 3. Setelah ditambahkan, klik “Settings” (设置) pada kartu YesCaptcha Assistant, pilih “Semua jendela” pada cara mengaktifkan ekstensi, atau pilih jendela tertentu lalu centang jendela yang akan dipakai, kemudian klik “OK”. 4. Buka satu jendela browser, klik ikon ekstensi di toolbar, temukan YesCaptcha Assistant, lalu isi `clientKey` Anda. Jika saldo tampil, pengaturan sudah selesai. Browser Anda tidak dapat memutar video ini. Unduh videonya: [Video: menambahkan dari Chrome Web Store di BitBrowser (30 detik)](https://docs.yescaptcha.com/videos/extension-bit-store.mp4) Video: menambahkan dari Chrome Web Store di BitBrowser (30 detik) ### Menambahkan dengan paket 1. Unduh paket Chrome di atas, lalu ekstrak ke folder yang tetap. 2. (Opsional) Buka `config.js` di folder tersebut dengan editor teks, isi `clientKey` Anda di antara tanda kutip pada `clientKey: ''`, lalu simpan. Dengan begitu, setiap jendela tidak perlu mengisinya lagi setelah ekstensi terpasang. 3. Di Extension Center, klik “Add custom extension”, pilih “Add local extension” (添加本地扩展), lalu pada “Upload extension” pilih folder hasil ekstrak (tingkat yang berisi `manifest.json`) dan klik “OK”. 4. Setelah berhasil diunggah, klik “Settings” pada kartu YesCaptcha Assistant, pilih cara mengaktifkan (semua jendela atau jendela tertentu), lalu klik “OK”. 5. Buka jendela browser, klik YesCaptcha Assistant di ikon ekstensi. Jika ClientKey dan saldo tampil, pengaturan sudah selesai. Browser Anda tidak dapat memutar video ini. Unduh videonya: [Video: menambahkan dengan paket di BitBrowser (46 detik; video memakai versi lama, langkahnya sama)](https://docs.yescaptcha.com/videos/extension-bit-zip.mp4) Video: menambahkan dengan paket di BitBrowser (46 detik; video memakai versi lama, langkahnya sama) ## Di ponsel Android (Kiwi Browser) > **Perhatian:** Kiwi Browser tidak lagi dikelola sejak Januari 2025 dan sudah dihapus dari Google Play, sehingga tidak ada lagi pembaruan maupun patch keamanan. Langkah dan video di bawah berasal dari dokumentasi lama, sebagai referensi bagi pengguna yang masih memakai Kiwi Browser; versi ekstensi saat ini belum diuji ulang di Kiwi Browser. 1. Unduh paket Chrome (`.zip`) ke ponsel, tanpa diekstrak. Jika ingin mengisi ClientKey terlebih dahulu, ekstrak di komputer, ubah `config.js`, lalu kompres ulang menjadi zip (`manifest.json` harus berada di tingkat paling luar arsip). 2. Di Kiwi Browser, ketuk menu di kanan atas, lalu pilih “Extensions”. 3. Aktifkan “Developer mode”, ketuk “+ (from .zip/.crx/.user.js)”, lalu pilih paket yang diunduh. 4. Ketuk menu di kanan atas lagi; YesCaptcha Assistant muncul di bagian bawah. Buka, lalu isi `clientKey` Anda. Jika saldo tampil, pengaturan sudah selesai. Browser Anda tidak dapat memutar video ini. Unduh videonya: [Video: instalasi di Kiwi Browser (16 detik; video memakai versi lama, langkahnya sama)](https://docs.yescaptcha.com/videos/extension-kiwi.mp4) Video: instalasi di Kiwi Browser (16 detik; video memakai versi lama, langkahnya sama) ## Pengaturan 1. Daftar dan isi saldo di [yescaptcha.com](https://yescaptcha.com/), lalu salin `clientKey` di dasbor; lihat [Mulai cepat](https://docs.yescaptcha.com/id/getting-started/quickstart.md). 2. Klik ikon ekstensi, lalu isi ClientKey di panel pengaturan. Jika saldo tampil, pengaturan sudah selesai. 3. Buka halaman yang menampilkan captcha; ekstensi akan mulai mengenali secara otomatis. ## Biaya Ekstensi ini gratis. Pengenalan dikenai pemotongan poin sesuai jenis yang dipakai, misalnya soal gambar reCAPTCHA dihitung menurut harga [pengenalan gambar reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md), dan hCaptcha menurut harga [pengenalan gambar hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha-classification.md). Hasil yang salah bisa dilaporkan untuk pengembalian poin; lihat [Penagihan dan pengembalian poin](https://docs.yescaptcha.com/id/getting-started/billing.md). --- # Menentukan jenis captcha > Cara mengetahui captcha apa yang dipakai sebuah halaman web, yaitu reCAPTCHA v2, v2 invisible, v3, versi Enterprise, hCaptcha, perbedaan Cloudflare Turnstile dengan halaman verifikasi Cloudflare, serta jenis tugas YesCaptcha yang sesuai. Source: https://docs.yescaptcha.com/id/guides/identify-captcha/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/identify-captcha/ Langkah pertama untuk memilih jenis tugas yang tepat adalah mengenali captcha-nya. Cara paling andal adalah membuka developer tools browser (F12), lalu melihat di panel Network (Jaringan) skrip captcha mana yang dimuat halaman. Anda juga bisa menebaknya dari tampilannya. ## Dari tampilan Berikut tampilan tiap captcha di halaman web (animasi ilustrasi, bukan tangkapan layar). Klik kartu untuk membuka halaman jenis tugas yang sesuai. Jika tampilannya sulit dibedakan, pastikan dengan tabel ringkas di bawah dan panel Network. - [reCAPTCHA v2: Kotak centang · Tak terlihat](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) - [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) - [Pengenalan gambar reCAPTCHA v2: Kisi 3×3 · Kisi 4×4 · Gambar tunggal 1x1](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md) - [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md) - [Pengenalan gambar hCaptcha: Kisi gambar · Klik satu titik · Seret dan lepas · Animasi](https://docs.yescaptcha.com/id/tasks/hcaptcha-classification.md) - [Cloudflare Turnstile: Otomatis · Kotak centang](https://docs.yescaptcha.com/id/tasks/turnstile.md) - [Halaman verifikasi Cloudflare: Otomatis · Kotak centang](https://docs.yescaptcha.com/id/tasks/cloudflare-challenge.md) - [Pengenalan gambar FunCaptcha: Panah · Kisi 6 gambar](https://docs.yescaptcha.com/id/tasks/funcaptcha-classification.md) - [Pengenalan gambar AWS WAF / bCaptcha: AWS WAF · bCaptcha](https://docs.yescaptcha.com/id/tasks/aws-bcaptcha-classification.md) - [Pengenalan teks pada gambar: Berbintik · Garis gangguan · Matematika](https://docs.yescaptcha.com/id/tasks/image-to-text.md) ## Tabel ringkas | Yang Anda lihat | Apa itu | Jenis tugas yang dipakai | | --- | --- | --- | | Kotak centang “I’m not a robot” | reCAPTCHA v2 | [reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-v2.md) | | Tidak ada kotak centang; soal gambar baru muncul setelah klik kirim; ada logo kecil reCAPTCHA di pojok kanan bawah | reCAPTCHA v2 invisible (atau v3) | Lihat “Versi reCAPTCHA” di bawah | | Tanpa interaksi apa pun, hanya ada logo kecil reCAPTCHA di pojok kanan bawah | reCAPTCHA v3 | [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md) | | Kotak centang “I am human”, soal gambar bertanda hCaptcha | hCaptcha | [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md) | | Kotak verifikasi Cloudflare tertanam di formulir; setelah dicentang halaman tidak berpindah | Cloudflare Turnstile | [Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md) | | Seluruh halaman menampilkan “Just a moment…” / “Checking your connection”, lalu berpindah otomatis | Halaman verifikasi Cloudflare | [Halaman verifikasi Cloudflare](https://docs.yescaptcha.com/id/tasks/cloudflare-challenge.md) | | Puzzle atau soal memilih gambar dari Arkose Labs (misalnya “pilih gambar yang posisinya benar”) | FunCaptcha | [Pengenalan gambar FunCaptcha](https://docs.yescaptcha.com/id/tasks/funcaptcha-classification.md) | | Gambar berisi huruf dan angka yang terdistorsi | Captcha karakter | [Pengenalan huruf dan angka pada gambar](https://docs.yescaptcha.com/id/tasks/image-to-text.md) | ## Versi reCAPTCHA Cari `api.js` atau `enterprise.js` di panel Network: | Skrip yang dimuat | Versi | | --- | --- | | `recaptcha/api.js`, tanpa parameter `render` atau dengan `render=explicit` | v2 biasa | | Sama seperti di atas, dan URL permintaan `anchor` berisi `size=invisible` | v2 invisible, tambahkan `"isInvisible": true` pada tugas | | `recaptcha/api.js?render=SITE_KEY` (`render` bukan `explicit`) | v3 biasa | | `recaptcha/enterprise.js`, tanpa parameter `render` atau dengan `render=explicit` | v2 Enterprise | | `recaptcha/enterprise.js?render=SITE_KEY` | v3 Enterprise | Contoh: ```text https://www.google.com/recaptcha/api.js?onload=onloadcallback&render=explicit → v2 https://www.google.com/recaptcha/api.js?render=6LdyC2cUAAAAACGuDKpXeDorzUDWXmdqeg-xy696 → v3 https://www.google.com/recaptcha/enterprise.js?render=explicit → v2 Enterprise ``` v2 invisible kadang baru lolos dengan jenis tugas v3, jadi coba keduanya. Anda juga bisa menjalankan kode berikut di Console. Kode ini mencantumkan semua reCAPTCHA di halaman beserta versi, site key, URL halaman, dan fungsi callback-nya: find-recaptcha-clients.js ```js // Paste into the browser DevTools console on a page with reCAPTCHA, then run findRecaptchaClients(). // Lists every reCAPTCHA on the page: version (V2/V3), sitekey, page URL and the callback function. function findRecaptchaClients() { if (typeof ___grecaptcha_cfg === 'undefined') return []; return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => { const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' }; const objects = Object.entries(client).filter(([, value]) => value && typeof value === 'object'); objects.forEach(([toplevelKey, toplevel]) => { const found = Object.entries(toplevel).find( ([, value]) => value && typeof value === 'object' && 'sitekey' in value && 'size' in value, ); if (toplevel instanceof HTMLElement && toplevel.tagName === 'DIV') data.pageurl = toplevel.baseURI; if (found) { const [sublevelKey, sublevel] = found; data.sitekey = sublevel.sitekey; const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback'; const callback = sublevel[callbackKey]; if (!callback) { data.callback = null; data.function = null; } else { data.function = callback; const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join(''); data.callback = `___grecaptcha_cfg.clients${keys}`; } } }); return data; }); } findRecaptchaClients(); ``` Contoh hasil: ```json [ { "id": "0", "version": "V2", "sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "function": "onSuccess", "callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']", "pageurl": "https://www.google.com/recaptcha/api2/demo" } ] ``` Halaman demo resmi Google bisa dipakai sebagai pembanding: v2 biasa `https://www.google.com/recaptcha/api2/demo`, v2 invisible `https://www.google.com/recaptcha/api2/demo?invisible=true`. ## Turnstile dan halaman verifikasi Cloudflare Keduanya dari Cloudflare, tetapi berbeda: - **Turnstile** adalah kotak verifikasi yang tertanam di formulir halaman web. Setelah verifikasi selesai, kotak diberi tanda centang dan halaman itu sendiri tidak berpindah. Halaman memuat `challenges.cloudflare.com/turnstile/v0/api.js`. Gunakan [Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md). - **Halaman verifikasi Cloudflare** mengganti seluruh halaman dengan halaman pemeriksaan Cloudflare yang menampilkan “Just a moment…” dan “xx.com perlu memeriksa keamanan koneksi Anda terlebih dahulu”. Halaman ini mungkin juga berisi kotak verifikasi, dan setelah lolos Anda otomatis dialihkan ke halaman yang sebenarnya. Di source terdapat `__cf_chl_rt_tk` atau `cdn-cgi/challenge-platform`. Gunakan [Halaman verifikasi Cloudflare](https://docs.yescaptcha.com/id/tasks/cloudflare-challenge.md). Jika permintaan dari program mendapat 403 dan “Just a moment…”, padahal browser bisa membuka halamannya langsung, kemungkinan besar Anda hanya diblokir karena sidik jari TLS. Gunakan library yang dapat meniru sidik jari TLS browser (misalnya curl\_cffi), dan permintaan akan berhasil tanpa perlu melewati halaman verifikasi. --- # Cara menemukan parameter reCAPTCHA > Cara menemukan websiteKey (sitekey) reCAPTCHA, websiteURL, pageAction untuk v3, dan fungsi callback di panel Network, Sources, dan Console pada developer tools, lengkap dengan skrip pencarian otomatis. Source: https://docs.yescaptcha.com/id/guides/find-recaptcha-parameters/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/find-recaptcha-parameters/ Untuk membuat tugas reCAPTCHA, Anda memerlukan `websiteURL` (alamat halaman tempat captcha muncul) dan `websiteKey` (kunci situs); v3 juga memerlukan `pageAction`. Jika Anda mensimulasikan pengiriman dengan alat seperti Selenium, Anda juga perlu mengetahui fungsi callback. Semuanya dapat ditemukan di developer tools browser (F12). ## Cara tercepat: skrip pencarian otomatis Buka halaman tempat captcha muncul, tekan F12 untuk membuka Console, lalu tempel dan jalankan: find-recaptcha-clients.js ```js // Paste into the browser DevTools console on a page with reCAPTCHA, then run findRecaptchaClients(). // Lists every reCAPTCHA on the page: version (V2/V3), sitekey, page URL and the callback function. function findRecaptchaClients() { if (typeof ___grecaptcha_cfg === 'undefined') return []; return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => { const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' }; const objects = Object.entries(client).filter(([, value]) => value && typeof value === 'object'); objects.forEach(([toplevelKey, toplevel]) => { const found = Object.entries(toplevel).find( ([, value]) => value && typeof value === 'object' && 'sitekey' in value && 'size' in value, ); if (toplevel instanceof HTMLElement && toplevel.tagName === 'DIV') data.pageurl = toplevel.baseURI; if (found) { const [sublevelKey, sublevel] = found; data.sitekey = sublevel.sitekey; const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback'; const callback = sublevel[callbackKey]; if (!callback) { data.callback = null; data.function = null; } else { data.function = callback; const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join(''); data.callback = `___grecaptcha_cfg.clients${keys}`; } } }); return data; }); } findRecaptchaClients(); ``` Pada hasilnya, `sitekey` adalah `websiteKey`, `pageurl` adalah `websiteURL`, `version` menunjukkan v2 atau v3, dan `function` serta `callback` adalah fungsi callback: ```json [ { "id": "0", "version": "V2", "sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "function": "onSuccess", "callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']", "pageurl": "https://www.google.com/recaptcha/api2/demo" } ] ``` Jika hasilnya array kosong, berarti halaman belum memuat reCAPTCHA. Jalankan lagi setelah captcha muncul. ## websiteKey dan websiteURL Di panel Network, cari `anchor`, lalu temukan request seperti ini: ```text https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normal ``` - Nilai setelah `k=` adalah `websiteKey`. - Isi `websiteURL` dengan alamat lengkap halaman tempat captcha muncul (biasanya sama dengan `Referer` dari request ini). Anda juga dapat mencari `data-sitekey` di source halaman. ## pageAction (v3) `pageAction` adalah `action` yang dikirim halaman saat memanggil `grecaptcha.execute(kunci situs, {action: '...'})`, dan harus sama dengan yang ada di halaman. **Metode 1: cari di source.** Di panel Sources pada developer tools, klik kanan lalu pilih “Search in all files”. Untuk v3 biasa, cari `.execute(`; untuk v3 Enterprise, cari `.enterprise.execute`. Lihat `action` yang mengikutinya: ```js grecaptcha.ready(function () { grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', { action: 'login' }).then(function (token) { // ... }); }); ``` Di sini `pageAction` adalah `login`. **Metode 2: breakpoint.** Jika kode diobfuskasi dan pencarian tidak menemukan apa pun, jalankan `debug(grecaptcha.execute)` di Console (untuk Enterprise: `debug(grecaptcha.enterprise.execute)`), lalu lakukan tindakan di halaman yang memicu verifikasi (misalnya klik Masuk). Setelah breakpoint berhenti, lihat nilai `action` di panel Scope di sisi kanan. Satu situs bisa memakai `action` berbeda di langkah yang berbeda (misalnya saat pendaftaran, `signup/submit_email` lalu `signup/success`). Ambil nilai untuk langkah yang ingin Anda lewati. Tekan F8 untuk melanjutkan eksekusi dan melihat `action` berikutnya. ## Fungsi callback Saat mengisi token di browser dengan alat seperti Selenium, setelah mengisi Anda perlu memanggil fungsi callback halaman untuk memberi tahu halaman bahwa verifikasi sudah selesai: - Cari `data-callback` di panel Elements; nilainya adalah nama fungsi callback, misalnya `data-callback="onSuccess"`. - Atau cari `grecaptcha.render` dan lihat `callback` di parameternya. - Atau periksa `___grecaptcha_cfg.clients` di Console, atau gunakan skrip pencarian otomatis di atas. Cara memanggilnya: ```python driver.execute_script("onSuccess(arguments[0])", g_recaptcha_response) ``` Sebagian halaman tidak memiliki fungsi callback; cukup isi token ke kolom teks `g-recaptcha-response`, lalu kirim formulirnya. Alur lengkapnya ada di [Menyelesaikan reCAPTCHA dengan token](https://docs.yescaptcha.com/id/guides/submit-recaptcha-token.md). --- # Cara menemukan parameter hCaptcha > Cara menemukan websiteKey (sitekey), websiteURL, dan rqdata versi Enterprise pada hCaptcha: cari data-sitekey di source halaman, atau cari request checksiteconfig dan getcaptcha di panel Network. Source: https://docs.yescaptcha.com/id/guides/find-hcaptcha-parameters/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/find-hcaptcha-parameters/ Untuk membuat tugas [hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha.md), Anda memerlukan `websiteURL` (alamat halaman yang menampilkan captcha) dan `websiteKey` (kunci situs, format UUID). Versi Enterprise kadang juga memerlukan `rqdata`. Semuanya dapat ditemukan di developer tools browser (F12). ## websiteKey **Cara 1: cari di source halaman.** Di panel Elements, tekan Ctrl+F (Cmd+F di Mac) lalu cari `data-sitekey`: ```html
``` Nilai `data-sitekey` adalah `websiteKey`. **Cara 2: lihat request jaringan.** Di panel Network, cari `hcaptcha`, lalu temukan request `checksiteconfig`. Nilai setelah `sitekey=` pada alamatnya adalah `websiteKey`: ```text https://api.hcaptcha.com/checksiteconfig?v=...&host=example.com&sitekey=51829642-2cda-4b09-896c-594f89d700cc&sc=1&swa=1 ``` ## websiteURL Isi dengan alamat lengkap halaman yang menampilkan captcha, **bukan** `hcaptcha.com`. Nilai `host=` pada request di atas adalah domain halaman tersebut. ## rqdata (versi Enterprise) Sebagian situs memakai hCaptcha Enterprise. Setiap kali captcha dimuat, situs menerbitkan sebuah `rqdata`; tanpanya token tidak akan lolos. Nilai ini biasanya muncul di respons API milik situs itu sendiri (misalnya `captcha_rqdata` yang dikembalikan oleh API login), atau diberikan saat memanggil `hcaptcha.render` / `hcaptcha.setData`. Setelah didapat, masukkan ke field `rqdata` pada tugas. `rqdata` umumnya hanya bisa dipakai sekali, jadi ambil yang baru setiap kali. ## userAgent `userAgent` hanya boleh diisi dengan nilai yang dikembalikan oleh [/useragent](https://docs.yescaptcha.com/id/api/useragent.md). Saat mengirim token, gunakan `userAgent` yang dikembalikan dalam hasil pengenalan. --- # Mencari parameter Turnstile > Cara menemukan websiteKey (sitekey, diawali 0x) dan websiteURL Cloudflare Turnstile: cari data-sitekey atau turnstile.render di source halaman, atau lihat request challenges.cloudflare.com di Network. Source: https://docs.yescaptcha.com/id/guides/find-turnstile-parameters/ · Last verified: 2026-10-21 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/find-turnstile-parameters/ Untuk membuat tugas [Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md), Anda memerlukan `websiteURL` (alamat halaman tempat kotak verifikasi muncul) dan `websiteKey` (kunci situs, biasanya diawali `0x`). Pastikan dulu yang muncul adalah Turnstile, bukan halaman verifikasi Cloudflare, lihat [Mengenali jenis captcha](https://docs.yescaptcha.com/id/guides/identify-captcha.md). ## websiteKey **Cara 1: cari di source halaman.** Di panel Elements pada developer tools (F12), cari `data-sitekey`: ```html ``` **Cara 2: cari di script.** Untuk kotak verifikasi yang dirender dengan JavaScript, klik kanan di panel Sources, pilih “Search in all files”, cari `turnstile.render`, lalu lihat `sitekey` pada parameternya: ```js turnstile.render('#container', { sitekey: '0x4AAAAAAAxxxxxxxxxxxxxx', callback: onDone }); ``` **Cara 3: lihat request jaringan.** Cari `challenges.cloudflare.com` di panel Network. URL iframe kotak verifikasi memuat kunci situs yang diawali `0x`. ## websiteURL Isi dengan alamat lengkap halaman tempat kotak verifikasi muncul, misalnya `https://example.com/login`. ## action dan cData (biasanya tidak diperlukan) Pada sebagian besar kasus keduanya tidak diperlukan. Cari hanya jika `websiteKey` dan `websiteURL` sudah dipastikan benar tetapi tugas tetap gagal: lihat apakah ada `action` dan `cData` pada parameter `turnstile.render` atau pada elemen kotak verifikasi (pada elemen berupa `data-action` dan `data-cdata`): ```js turnstile.render('#container', { sitekey: '0x4AAAAAAAxxxxxxxxxxxxxx', action: 'login', cData: 'c0bd4b36-7419-4e18-83c6-378699f2a9a2' }); ``` Jika ada, saat membuat tugas isi `action` ke `pageAction` dan `cData` ke `data`, lihat [Turnstile](https://docs.yescaptcha.com/id/tasks/turnstile.md). ## Mengirim token Setelah pengenalan selesai, isi `token` ke field tersembunyi bernama `cf-turnstile-response` di formulir (jika halaman memakai `turnstile.render` dengan `callback`, panggil fungsi callback tersebut dengan token sebagai argumen), lalu kirim formulir. Gunakan `userAgent` dari hasil pengenalan sebagai User-Agent pada request pengiriman. --- # Menggunakan token untuk menyelesaikan reCAPTCHA > Yang dilakukan setelah mendapat token reCAPTCHA (gRecaptchaResponse): cara kerjanya, mengirimnya langsung lewat request (field g-recaptcha-response), atau mengisinya di browser lalu memanggil callback, lengkap dengan contoh Python di halaman demo Google. Source: https://docs.yescaptcha.com/id/guides/submit-recaptcha-token/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/submit-recaptcha-token/ `gRecaptchaResponse` yang dikembalikan YesCaptcha adalah hasil yang diberikan Google kepada halaman web setelah captcha diselesaikan. Setelah mendapatkannya, Anda perlu **mengirimkannya ke situs target** (bukan ke Google atau YesCaptcha) seperti yang dilakukan browser. Situs tersebut akan memverifikasinya ke Google, lalu meloloskan Anda. Ada dua cara: kirim request langsung, atau isi token ke halaman di browser lalu kirim. ## Cara kerja Alur pada akses normal: 1. Halaman memuat reCAPTCHA, lalu pengguna menyelesaikan verifikasi; 2. Google memberikan token ke halaman, dan halaman menaruhnya di textarea `g-recaptcha-response` (atau meneruskannya ke fungsi callback); 3. Pengguna mengirim formulir, dan token ikut terkirim ke server situs; 4. Server situs memverifikasi token ke Google, lalu meloloskan jika valid. Saat memakai YesCaptcha, langkah 1 dan 2 kami yang mengerjakan: Anda membuat tugas dengan `websiteURL` dan `websiteKey`, mendapatkan token, lalu melanjutkan dari langkah 3. > **Perhatian:** Token hanya dapat dipakai sekali dan berlaku sekitar 120 detik. Sebaiknya kirim dalam 60 detik setelah didapat. Situs tidak menerima token yang sudah kedaluwarsa. ## Cara 1: kirim request langsung (disarankan) 1. Lakukan sekali secara manual di browser: tekan F12 untuk membuka panel Network, selesaikan captcha dan kirim formulir, lalu cari request yang mengirim formulir tersebut. 2. Di Payload (atau Form Data) request itu, cari field yang membawa token, biasanya bernama `g-recaptcha-response`, dengan token yang diawali `03A`. Sebagian situs mengganti namanya, misalnya `grecaptcharesponse` atau `captcha`. 3. Kirim request yang sama dari program Anda, dengan nilai field diganti token dari YesCaptcha. Field lain, Cookie, dan header request juga harus sama dengan yang dikirim browser, karena situs sering memeriksanya sekaligus. Contoh lengkap di halaman demo Google: kenali dulu, lalu kirim token ke halaman demo lewat field `g-recaptcha-response`: recaptcha_requests.py ```python """Solve reCAPTCHA v2 on Google's demo page and submit the token with plain HTTP (no browser). Run: pip install requests export YESCAPTCHA_CLIENT_KEY=your_client_key python recaptcha_requests.py Each run creates one NoCaptchaTaskProxyless task (charged per the price list). """ import os import time import requests CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] API = "https://api.yescaptcha.com" WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo" WEBSITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" def call(method, payload): data = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30).json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def get_token(): task = {"type": "NoCaptchaTaskProxyless", "websiteURL": WEBSITE_URL, "websiteKey": WEBSITE_KEY} task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"]["gRecaptchaResponse"] raise TimeoutError(task_id) token = get_token() print("token:", token[:40], "...") # Submit the token the same way the browser does: the demo form posts the field # "g-recaptcha-response" back to the page. Check your own site's request in DevTools > Network. page = requests.post(WEBSITE_URL, data={"g-recaptcha-response": token}, timeout=30) print("passed" if "Verification Success" in page.text else "not passed", page.status_code) ``` ## Cara 2: isi di browser (Selenium dan sejenisnya) Saat mengendalikan browser sungguhan dengan alat seperti Selenium atau Playwright: 1. Baca `data-sitekey` dari halaman, lalu gunakan untuk membuat tugas dan mendapatkan token. 2. Tulis token ke textarea `g-recaptcha-response` di halaman. 3. Jika halaman memiliki fungsi callback (`data-callback="..."`), panggil dengan token tersebut. Di sebagian situs, tombol kirim baru bisa diklik setelah callback dipanggil. 4. Kirim formulir. ```js // Step 2: write the token (run in the page) document.getElementById('g-recaptcha-response').value = 'TOKEN'; // Step 3: call the callback if there is one, e.g. data-callback="onSuccess" onSuccess('TOKEN'); ``` Jika ada beberapa reCAPTCHA di halaman, id textarea bisa berbentuk `g-recaptcha-response-1`. Jika textarea tidak ditemukan, selesaikan verifikasi secara manual sekali, lalu cari `03A` di Elements untuk melihat di mana hasilnya disimpan. Cara menemukan fungsi callback ada di [Menemukan parameter reCAPTCHA](https://docs.yescaptcha.com/id/guides/find-recaptcha-parameters.md). Contoh lengkap (Selenium 4): recaptcha_selenium.py ```python """Solve reCAPTCHA v2 on Google's demo page in a real browser with Selenium 4: get a token from YesCaptcha, put it into the page, then submit the form. Run: pip install requests selenium export YESCAPTCHA_CLIENT_KEY=your_client_key python recaptcha_selenium.py Each run creates one NoCaptchaTaskProxyless task (charged per the price list). """ import os import time import requests from selenium import webdriver from selenium.webdriver.common.by import By CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] API = "https://api.yescaptcha.com" WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo" def call(method, payload): data = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30).json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data def get_token(website_url, website_key): task = {"type": "NoCaptchaTaskProxyless", "websiteURL": website_url, "websiteKey": website_key} task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"]["gRecaptchaResponse"] raise TimeoutError(task_id) driver = webdriver.Chrome() # Selenium 4 downloads a matching chromedriver automatically try: driver.get(WEBSITE_URL) site_key = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey") token = get_token(WEBSITE_URL, site_key) # Put the token where reCAPTCHA keeps it ... driver.execute_script( "document.getElementById('g-recaptcha-response').value = arguments[0];", token ) # ... and, if the page uses a callback (data-callback="..."), call it: callback = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-callback") if callback: driver.execute_script(f"window[{callback!r}](arguments[0]);", token) driver.find_element(By.ID, "recaptcha-demo-submit").click() time.sleep(2) print("passed" if "Verification Success" in driver.page_source else "not passed") finally: driver.quit() ``` ## reCAPTCHA v3 v3 tidak memiliki kotak centang. Halaman memanggil `grecaptcha.execute(kunci situs, {action: '...'})` saat membutuhkan token, lalu menaruh token itu di request-nya sendiri (nama field ditentukan situs; yang umum adalah `g-recaptcha-response`, `token`, `recaptchaToken`). Caranya sama dengan Cara 1: cari request yang membawa token di Network, lalu tiru. Saat membuat tugas, `pageAction` harus sama dengan `action` di halaman. ## Sudah dikirim tetapi tetap tidak lolos - Token kedaluwarsa: kirim secepat mungkin setelah didapat, jangan lebih dari 60 detik. - Field yang dikirim bukan yang diperiksa situs, atau ada field lain dan Cookie yang terlewat: bandingkan dengan request di browser satu per satu. - Situs juga memeriksa IP, User-Agent, dan sebagainya: gunakan jenis yang membawa proxy sendiri (seperti `NoCaptchaTask`), dan kirim lewat proxy yang sama. - Skor v3 kurang: pastikan `pageAction`, atau beralih ke jenis dengan skor tinggi tetap, lihat [reCAPTCHA v3](https://docs.yescaptcha.com/id/tasks/recaptcha-v3.md). - Sistem keamanan situs juga melihat sinyal perilaku lain. Jika tingkat lolos dengan token rendah, gunakan [pengenalan gambar](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md) dengan klik sungguhan di browser, atau gunakan [ekstensi browser](https://docs.yescaptcha.com/id/extension.md). --- # Klik gambar reCAPTCHA dengan Selenium > Gunakan Python, Selenium 4, dan ReCaptchaV2Classification untuk mengklik soal gambar reCAPTCHA v2 secara otomatis di browser sungguhan: memicu captcha, membaca pertanyaan dan gambar, memanggil API pengenalan, mengklik kotak, lalu mengirim; lengkap dengan kode contoh. Source: https://docs.yescaptcha.com/id/guides/recaptcha-click-selenium/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/recaptcha-click-selenium/ Tutorial ini membuka halaman demo reCAPTCHA Google dengan Selenium 4 dan menyelesaikan soal gambar di browser sungguhan: membaca pertanyaan dan gambar, menyerahkannya ke [pengenalan gambar reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md) (`ReCaptchaV2Classification`) untuk menentukan kotak mana yang harus diklik, lalu mensimulasikan kliknya. Berbeda dengan cara mengambil token, verifikasi di sini diselesaikan langsung di browser, sehingga cocok untuk situs yang tingkat keberhasilan token-nya rendah. Jika tidak ingin menulis kode, gunakan langsung [ekstensi browser](https://docs.yescaptcha.com/id/extension.md), yang mengklik secara otomatis dengan API yang sama. ## Persiapan ```bash pip install requests selenium pillow export YESCAPTCHA_CLIENT_KEY=your_client_key ``` Chrome harus sudah terpasang. Selenium 4 akan mengunduh chromedriver yang sesuai secara otomatis. ## Alur 1. **Klik kotak centang.** Kotak centang berada di dalam iframe dengan `title="reCAPTCHA"`; pindah ke iframe tersebut, lalu klik `#recaptcha-anchor`. 2. **Pindah ke iframe soal.** Soal berada di iframe lain (title mengandung “challenge”). 3. **Baca pertanyaan.** Teks tebal di `.rc-imageselect-desc-wrapper strong` adalah target yang dicari, misalnya “traffic lights”. API membutuhkan ID pertanyaan, jadi ubah nama menjadi ID (`/m/015qff`) dengan tabel padanan, lihat [ID pertanyaan](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md). Antarmuka browser berbahasa Inggris paling mudah untuk dicocokkan. 4. **Ambil gambar.** Gambar di setiap kotak sebenarnya berasal dari satu gambar besar yang sama; unduh `src` dari `td.rc-imageselect-tile img`. Untuk 9 kotak (3x3), ubah ukuran menjadi 300×300; untuk 16 kotak (4x4), ubah menjadi 450×450, lalu konversi ke Base64. 5. **Kenali.** Panggil `createTask` dengan jenis tugas `ReCaptchaV2Classification`, kirim `image` dan `question`. Tambahkan `"confidence": 0.5`, maka gambar 3x3 akan mengembalikan semua kotak yang sesuai sekaligus, sehingga Anda tidak perlu menangani gambar kecil yang muncul setelah klik. 6. **Klik.** `objects` yang dikembalikan adalah nomor kotak, dimulai dari 0, dari kiri ke kanan dan dari atas ke bawah; klik `td` yang sesuai satu per satu. 7. **Verifikasi.** Klik `#recaptcha-verify-button`. Jika muncul putaran soal baru, kembali ke langkah 3; jika jendela soal tertutup, berarti sudah lolos. 8. **Kirim formulir.** Kembali ke halaman utama, lalu klik tombol kirim. ## Kode lengkap recaptcha_click_selenium.py ```python """Click through a reCAPTCHA v2 image challenge with Selenium 4 and ReCaptchaV2Classification. Flow: open the page -> click the checkbox -> read the target name and the grid image -> ask YesCaptcha which tiles to click -> click them -> press Verify. Repeat if a new challenge appears. Run: pip install requests selenium pillow export YESCAPTCHA_CLIENT_KEY=your_client_key python recaptcha_click_selenium.py Each recognized image is charged (see the price list). reCAPTCHA's page structure can change; adjust the selectors below if a step stops working. """ import base64 import io import os import time import requests from PIL import Image from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] PAGE_URL = "https://www.google.com/recaptcha/api2/demo" # Target names shown in the challenge (English UI) -> question IDs. # Full list: https://docs.yescaptcha.com/en/tasks/recaptcha-classification/ QUESTION_IDS = { "taxis": "/m/0pg52", "bus": "/m/01bjv", "buses": "/m/01bjv", "motorcycles": "/m/04_sv", "tractors": "/m/013xlm", "chimneys": "/m/01jk_4", "crosswalks": "/m/014xcs", "traffic lights": "/m/015qff", "bicycles": "/m/0199g", "parking meters": "/m/015qbp", "cars": "/m/0k4j", "bridges": "/m/015kr", "boats": "/m/019jd", "palm trees": "/m/0cdl1", "mountains or hills": "/m/09d_r", "fire hydrants": "/m/01pns0", "a fire hydrant": "/m/01pns0", "stairs": "/m/01lynh", } def classify(image_b64, question): task = {"type": "ReCaptchaV2Classification", "image": image_b64, "question": question, "confidence": 0.5} data = requests.post( "https://api.yescaptcha.com/createTask", json={"clientKey": CLIENT_KEY, "task": task}, timeout=30, ).json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data["solution"] # synchronous: the solution comes back right away def grid_image_b64(url, size): """Download the challenge image and scale it to the standard size (300 for 3x3, 450 for 4x4).""" img = Image.open(io.BytesIO(requests.get(url, timeout=30).content)).convert("RGB") img = img.resize((size, size)) buf = io.BytesIO() img.save(buf, format="JPEG") return base64.b64encode(buf.getvalue()).decode() driver = webdriver.Chrome() wait = WebDriverWait(driver, 15) try: driver.get(PAGE_URL) # 1. Click the checkbox (inside the "reCAPTCHA" iframe) wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, 'iframe[title="reCAPTCHA"]'))) wait.until(EC.element_to_be_clickable((By.ID, "recaptcha-anchor"))).click() driver.switch_to.default_content() # 2. Switch to the challenge iframe and solve rounds until it closes wait.until(EC.frame_to_be_available_and_switch_to_it( (By.XPATH, '//iframe[contains(@title, "challenge")]'))) for _ in range(5): target = wait.until(EC.presence_of_element_located( (By.CSS_SELECTOR, ".rc-imageselect-desc-wrapper strong"))).text.strip().lower() question = QUESTION_IDS.get(target) if not question: print("unsupported target, reloading:", target) driver.find_element(By.ID, "recaptcha-reload-button").click() time.sleep(2) continue tiles = driver.find_elements(By.CSS_SELECTOR, "td.rc-imageselect-tile") size = 450 if len(tiles) == 16 else 300 url = driver.find_element(By.CSS_SELECTOR, "td.rc-imageselect-tile img").get_attribute("src") solution = classify(grid_image_b64(url, size), question) for index in solution.get("objects", []): tiles[index].click() time.sleep(0.3) time.sleep(1) driver.find_element(By.ID, "recaptcha-verify-button").click() time.sleep(3) driver.switch_to.default_content() frame = driver.find_element(By.XPATH, '//iframe[contains(@title, "challenge")]') if not frame.is_displayed(): # challenge closed: passed break driver.switch_to.frame(frame) driver.switch_to.default_content() driver.find_element(By.ID, "recaptcha-demo-submit").click() time.sleep(2) print("passed" if "Verification Success" in driver.page_source else "not passed") finally: driver.quit() ``` ## Catatan - Struktur halaman reCAPTCHA bisa berubah; jika selector di kode tidak berfungsi lagi, sesuaikan dengan halaman yang sebenarnya. - Setiap pengenalan satu gambar dikenai pemotongan poin (harga ada di [pengenalan gambar reCAPTCHA v2](https://docs.yescaptcha.com/id/tasks/recaptcha-classification.md)). Tugas yang gagal verifikasi setelah diklik dapat [dilaporkan](https://docs.yescaptcha.com/id/api/report.md) dalam 1 jam untuk mengajukan pengembalian poin setelah laporan. - Jika menemukan pertanyaan yang tidak ada di tabel padanan, klik tombol refresh untuk mengganti soal, atau hubungi Dukungan agar ditambahkan. --- # Klik gambar hCaptcha dengan Selenium > Gunakan Python, Selenium 4, dan HCaptchaClassification untuk menyelesaikan tantangan gambar kisi 3×3 hCaptcha di browser sungguhan. Klik kotak centang, baca pertanyaan dan 9 gambar, panggil API, klik, lalu kirim; lengkap dengan kode contoh. Source: https://docs.yescaptcha.com/id/guides/hcaptcha-click-selenium/ · Last verified: 2026-10-15 > This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/hcaptcha-click-selenium/ Panduan ini membuka halaman demo hCaptcha dengan Selenium 4 dan menyelesaikan tantangan gambar kisi 3×3 di browser sungguhan: membaca pertanyaan dan 9 gambar, meminta [pengenalan gambar hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha-classification.md) (`HCaptchaClassification`) menentukan mana yang merupakan target, lalu mensimulasikan klik. hCaptcha juga memiliki jenis tantangan seperti “klik posisi tertentu” dan “seret”, yang mengembalikan koordinat, bukan kotak. Cara menanganinya ada di [pengenalan gambar hCaptcha](https://docs.yescaptcha.com/id/tasks/hcaptcha-classification.md). Jika tidak ingin menulis kode, Anda bisa langsung memakai [ekstensi browser](https://docs.yescaptcha.com/id/extension.md); semua jenis tantangan ini didukung. ## Persiapan ```bash pip install requests selenium export YESCAPTCHA_CLIENT_KEY=your_client_key ``` ## Alur 1. **Klik kotak centang.** Kotak centang berada di iframe hCaptcha yang alamatnya memuat `frame=checkbox`. Pindah ke iframe tersebut, lalu klik `#checkbox`. 2. **Pindah ke iframe tantangan.** Tantangan berada di iframe yang alamatnya memuat `frame=challenge`. 3. **Baca pertanyaan.** Teks di `.prompt-text` adalah pertanyaannya; kirim apa adanya ke API (disarankan mengganti bahasa antarmuka hCaptcha ke Mandarin Sederhana atau Inggris). Jika di samping pertanyaan ada gambar contoh kecil, masukkan juga ke `anchors`. 4. **Ambil gambar.** Latar belakang `.task-image .image` di setiap kotak adalah satu gambar kecil. Unduh berurutan, ubah ke Base64, lalu susun menjadi daftar `queries`. 5. **Kenali.** Panggil `createTask` dengan jenis `HCaptchaClassification`. `objects` pada hasil sesuai satu-satu dengan kotak; `true` berarti target. 6. **Klik dan kirim.** Klik kotak yang merupakan target, lalu tekan tombol kirim. Bisa muncul beberapa putaran berturut-turut; ulangi langkah 3 sampai 6. 7. **Selesai.** Setelah lolos, kolom `h-captcha-response` di halaman berisi token; kirim bersama formulir. ## Kode lengkap hcaptcha_click_selenium.py ```python """Click through an hCaptcha 3x3 image challenge with Selenium 4 and HCaptchaClassification. Flow: open the page -> click the checkbox -> read the question and the 9 images -> ask YesCaptcha which images match -> click them -> submit. Repeat while new rounds appear. Run: pip install requests selenium export YESCAPTCHA_CLIENT_KEY=your_client_key python hcaptcha_click_selenium.py Each recognized round is charged (see the price list; rounds with no target found are free). hCaptcha changes its page structure often; adjust the selectors below if a step stops working. Click and drag questions return coordinates instead; see the HCaptchaClassification page. """ import base64 import os import re import time import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] PAGE_URL = "https://accounts.hcaptcha.com/demo" def classify(question, images_b64): task = {"type": "HCaptchaClassification", "question": question, "queries": images_b64} data = requests.post( "https://api.yescaptcha.com/createTask", json={"clientKey": CLIENT_KEY, "task": task}, timeout=60, ).json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data["solution"] # synchronous def background_image_b64(element): """The tiles are