# 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)
