# reCAPTCHA v2

> Получение токенов reCAPTCHA v2 (обычная, невидимая и Enterprise-версии) через YesCaptcha: типы задач и цены, параметры запроса, примеры на curl/Python/Node.js и формат результата.

Source: https://docs.yescaptcha.com/ru/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/

Задача reCAPTCHA v2 возвращает токен (`gRecaptchaResponse`), который нужно отправить на целевой сайт, чтобы пройти проверку, без выбора картинок. Самый популярный тип `NoCaptchaTaskProxyless` стоит 15 pts (≈ $2.25 / 1k) за задачу и работает асинхронно: создайте задачу через `createTask`, затем вызывайте `getTaskResult` каждые 5 секунд, пока не получите результат. При неудаче или тайм-ауте баллы возвращаются автоматически.

- POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint)
- POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая)

Тело запроса — JSON, авторизация по `clientKey` (скопируйте его в панели на [yescaptcha.com](https://yescaptcha.com/)). Результат нужно запрашивать на том же endpoint, где создана задача.

## Когда использовать

-   На странице есть флажок «Я не робот» (I’m not a robot): обычная версия.
-   Флажка нет, а задание с картинками появляется только после нажатия кнопки отправки: невидимая версия, добавьте `"isInvisible": true`.
-   Страница загружает `recaptcha/enterprise.js` или в адресах запросов есть `enterprise`: Enterprise-версия, используйте типы со словом `Enterprise` в названии.

Если не уверены, какая версия у вас, см. [Как определить тип капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md). Если токены проходят недостаточно часто, попробуйте [распознавание изображений reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md): API сообщает, по каким картинкам нужно кликнуть, а клики вы выполняете в браузере сами.

## Типы задач и цены

| Тип задачи | Цена | Режим | Примечания |
| --- | --- | --- | --- |
| `NoCaptchaTaskProxyless` | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный |  |
| `RecaptchaV2TaskProxyless` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | Те же параметры, что у NoCaptchaTaskProxyless, но другой маршрут; можно использовать любой из них как резервный |
| `NoCaptchaTask` | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | Свой прокси |
| `RecaptchaV2EnterpriseTaskProxyless` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный |  |
| `RecaptchaV2EnterpriseTask` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | Свой прокси |

Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах.

-   `NoCaptchaTaskProxyless` и `RecaptchaV2TaskProxyless` принимают одинаковые параметры, но работают по разным маршрутам. Если один проходит недостаточно часто, попробуйте другой.
-   Типы без `Proxyless` в названии (`NoCaptchaTask`, `RecaptchaV2EnterpriseTask`) загружают капчу через ваш прокси и требуют поля `proxyType`, `proxyAddress`, `proxyPort` и другие. Используйте их, если целевой сайт проверяет IP посетителя.

## Параметры запроса

Поля объекта `task` в `createTask`:

| Поле | Тип | Обязательное | Описание |
| --- | --- | --- | --- |
| `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице |
| `websiteURL` | string | Да | Полный URL страницы, на которой показывается капча. Укажите сайт, на котором вы видите капчу, а не домен поставщика капчи |
| `websiteKey` | string | Да | Ключ сайта (sitekey), его можно найти в исходном коде страницы или в сетевых запросах; обычно не меняется |
| `isInvisible` | boolean | Нет | Передайте true для невидимого варианта; в остальных случаях не передавайте |
| `proxyType` | string | Некоторые типы | Протокол прокси: `http`, `https`, `socks4` или `socks5` (Обязательно для NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyAddress` | string | Некоторые типы | IP-адрес или имя хоста прокси. Локальные или частные адреса, например 127.0.0.1 или 192.168.x.x, не подойдут, так как наши серверы не могут до них достучаться (Обязательно для NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyPort` | integer | Некоторые типы | Порт прокси (Обязательно для NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyLogin` | string | Нет | Имя пользователя прокси, если прокси требует аутентификации (только NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyPassword` | string | Нет | Пароль прокси, если прокси требует аутентификации (только NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `userAgent` | string | Нет | User-Agent браузера. Если в результате есть `userAgent`, используйте это значение при отправке токена (только NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `enterprisePayload` | object | Нет | Дополнительные параметры Enterprise-версии, например значение `s` для reCAPTCHA Enterprise: `{"s": "..."}`. Не передавайте, если страница их не использует (только RecaptchaV2EnterpriseTaskProxyless, RecaptchaV2EnterpriseTask) |

Как найти `websiteURL` и `websiteKey`, см. [Как найти параметры reCAPTCHA](https://docs.yescaptcha.com/ru/guides/find-recaptcha-parameters.md).

## Пример запроса

На примере официальной демо-страницы 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-"
  }
}
```

Полный код: создаёт задачу, опрашивает результат каждые 5 секунд и выводит токен. Перед запуском поместите ClientKey в переменную окружения `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);
```

Для Enterprise-версии, если страница передаёт в reCAPTCHA значение `s`, укажите его в `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"
    }
  }
}
```

Со своим прокси:

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"
  }
}
```

## Результат

`createTask` возвращает ID задачи:

```json
{
  "errorId": 0,
  "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
```

Передайте его в `getTaskResult`. Пока задача выполняется, возвращается `{"errorId": 0, "status": "processing"}` — повторите запрос через 5 секунд. Когда задача готова:

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..."
  }
}
```

| Поле | Тип | Описание |
| --- | --- | --- |
| `gRecaptchaResponse` | string | Токен, который нужно отправить на целевой сайт. Одноразовый, действителен около 120 секунд; используйте его в течение 60 секунд |

Задача выполняется не более 110 секунд; по истечении возвращается `ERROR_TASK_TIMEOUT`, а баллы возвращаются. При ошибке `errorId` равен 1, обрабатывайте её по `errorCode`, см. [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md). Как отправить токен, см. [Как отправить токен reCAPTCHA](https://docs.yescaptcha.com/ru/guides/submit-recaptcha-token.md).

> **Совет:** Токен одноразовый и действителен около 120 секунд; рекомендуем отправить его в течение 60 секунд после получения.

## Частые вопросы

### Почему токены для одного и того же сайта иногда проходят, а иногда нет?

Решение принимает целевой сайт. Он оценивает каждую проверку и сравнивает с порогом, который может изменить в любой момент, поэтому доля успешных проверок зависит от сайта, и не каждый токен проходит. Сравните результаты с другим типом задачи для той же капчи или перейдите на [распознавание изображений](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md).

### Сколько действителен токен?

Токен одноразовый и действителен около 120 секунд; рекомендуем отправить его в течение 60 секунд после получения. Срок задаёт Google.

### Списываются ли баллы, если решить не удалось?

Нет. Для задач с ответом `ERROR_CAPTCHA_UNSOLVABLE` или с тайм-аутом возврат баллов происходит автоматически, см. [Тарификация и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md).

## Связанные руководства

-   [Как определить тип капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md)
-   [Как найти параметры reCAPTCHA](https://docs.yescaptcha.com/ru/guides/find-recaptcha-parameters.md)
-   [Как отправить токен reCAPTCHA](https://docs.yescaptcha.com/ru/guides/submit-recaptcha-token.md)
-   [Клики по картинкам reCAPTCHA v2 через Selenium](https://docs.yescaptcha.com/ru/guides/recaptcha-click-selenium.md)
