# YesCaptcha Docs (full text) > YesCaptcha — API для распознавания капчи. Через один JSON-интерфейс решает reCAPTCHA, hCaptcha, Cloudflare Turnstile, FunCaptcha, AWS WAF и капчу с изображением. Оплата за каждую задачу, при ошибке распознавания и тайм-ауте баллы возвращаются автоматически. --- # Решайте капчу через один JSON-интерфейс > YesCaptcha — API для распознавания капчи. Через один JSON-интерфейс решает reCAPTCHA, hCaptcha, Cloudflare Turnstile, FunCaptcha, AWS WAF и капчу с изображением. Оплата за каждую задачу, при ошибке распознавания и тайм-ауте баллы возвращаются автоматически. Source: https://docs.yescaptcha.com/ru/ · 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 распознавания капчиСтатус](https://status.yescaptcha.com/?lang=en) Распознаёт reCAPTCHA, hCaptcha, Cloudflare Turnstile, FunCaptcha, AWS WAF и буквенно-цифровую капчу с изображением. Баллы списываются за каждую задачу, 1,000 баллов = ¥1; при ошибке распознавания и тайм-ауте баллы возвращаются автоматически. [Быстрый старт](https://docs.yescaptcha.com/ru/getting-started/quickstart.md)[Справочник API](https://docs.yescaptcha.com/ru/api/overview.md) Версия для ИИ и программ:[llms.txt](https://docs.yescaptcha.com/ru/llms.txt)[llms-full.txt](https://docs.yescaptcha.com/ru/llms-full.txt)[OpenAPI](https://docs.yescaptcha.com/openapi.json)[Markdown](https://docs.yescaptcha.com/ru/index.md) YesCaptcha можно использовать только в законных целях. Использование в незаконных целях запрещено. 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. 1Создать задачу 2. 2Получить результат 3. 3Отправить Пример: reCAPTCHA v2, результат запрашивается опросом каждые 5 секунд От $0.30 / 1k Минимальная цена за задачу 1,000 баллов = ¥1 За неудачные задачи и задачи с таймаутом баллы возвращаются 2 endpoint Глобальный endpoint и endpoint для Китая 9:00–21:00 Живая поддержка (UTC+8) [Быстрый стартЗарегистрируйтесь, получите clientKey и отправьте первый запрос за 5 минут](https://docs.yescaptcha.com/ru/getting-started/quickstart.md)[Справочник APIcreateTask, getTaskResult, коды ошибок и лимит параллельных задач](https://docs.yescaptcha.com/ru/api/overview.md)[Типы задач и ценыЦены, способ возврата результата и параметры всех публичных типов](https://docs.yescaptcha.com/ru/tasks.md)[Расширение браузераАвтоматическое прохождение проверки на страницах без написания кода](https://docs.yescaptcha.com/ru/extension.md) ## Поддерживаемые капчи [01reCAPTCHAv2, v3, Enterprise и распознавание изображений v2от $0.90 / 1k](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md)[02hCaptchaВозвращает токен или распознаёт изображения, а клики вы выполняете самиот $1.20 / 1k](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md)[03Cloudflare TurnstileТокен проверки Turnstileот $3.75 / 1k](https://docs.yescaptcha.com/ru/tasks/turnstile.md)[04FunCaptchaРаспознавание картиночных заданий Arkose Labs, поддерживаются все типы заданийот $0.45 / 1k](https://docs.yescaptcha.com/ru/tasks/funcaptcha-classification.md)[05AWS WAF / bCaptchaРаспознавание изображений в сетке 3×3от $1.20 / 1k](https://docs.yescaptcha.com/ru/tasks/aws-bcaptcha-classification.md)[06Буквы и цифры на изображенииОбычная символьная капча, результат возвращается синхронноот $0.30 / 1k](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) ## Подключение в три шага 1. 01 **Создайте задачу** Отправьте через `createTask` тип задачи и параметры сайта и получите `taskId`. Синхронные типы, например распознавание изображений и буквы и цифры на изображении, сразу возвращают результат. 2. 02 **Получите результат** Вызывайте `getTaskResult` каждые 5 секунд. Когда `status` станет `ready`, результат будет в `solution`. 3. 03 **Передайте его целевому сайту** Подставьте полученный токен в форму или запрос на странице. Токен одноразовый, используйте его в течение 60 секунд. 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..." } } ``` ## Частые разделы - [**Коды ошибок**Значение каждого кода ошибки и что делать](https://docs.yescaptcha.com/ru/api/errors.md) - [**Лимит параллельных задач и автоматическая приостановка**Что происходит при превышении лимита и при большом числе ошибок](https://docs.yescaptcha.com/ru/api/rate-limits.md) - [**Оплата и возврат баллов**Баллы, предварительное списание, возврат баллов и возврат баллов после жалобы](https://docs.yescaptcha.com/ru/getting-started/billing.md) - [**Связаться с нами**WeChat, QQ, Telegram, почта; время работы 9:00–21:00 (UTC+8)](https://docs.yescaptcha.com/ru/help/contact.md) - [**Панель**Регистрация, получение clientKey, пополнение](https://yescaptcha.com/) --- # Введение > Что такое YesCaptcha. Решайте reCAPTCHA, hCaptcha, Turnstile, FunCaptcha и графические капчи через API или расширение браузера; оплата за каждую задачу, при неудаче баллы возвращаются автоматически. Source: https://docs.yescaptcha.com/ru/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 — это сервис распознавания капчи. Вы отправляете в API YesCaptcha данные капчи и получаете либо токен, который можно сразу отправить на целевой сайт, либо результат распознавания изображения. Поддерживаются reCAPTCHA (v2, v3 и Enterprise), hCaptcha, Cloudflare Turnstile, страница проверки Cloudflare, FunCaptcha, AWS WAF, bCaptcha и графические капчи из букв и цифр. Списание баллов происходит за каждую задачу, 1,000 баллов = ¥1; при неудачном распознавании или тайм-ауте баллы возвращаются автоматически. YesCaptcha можно использовать только в законных целях. Использование в незаконных целях запрещено. ## Два способа использования | | API | Расширение браузера (YesCaptcha Assistant) | | --- | --- | --- | | Подходит | Разработчикам, которые обрабатывают капчи в своём коде | Тем, кто не пишет код и работает в браузере | | Как использовать | Вызывайте `createTask` и `getTaskResult` с вашим `clientKey` | Установите расширение и введите `clientKey`; капчи распознаются и нажимаются автоматически | | Поддержка | Все типы задач, перечисленные на этом сайте | Графические задания reCAPTCHA v2, hCaptcha, FunCaptcha, AWS WAF и bCaptcha, а также текстовые капчи | | Стоимость | Баллы по типу задачи | Расширение бесплатно; списываются баллы за вызовы API, которые оно использует | Оба способа используют один и тот же аккаунт, один и тот же `clientKey` и один и тот же баланс. ## Три вида результата - **Токен**: большинство типов задач reCAPTCHA, hCaptcha, Turnstile и FunCaptcha. Возвращается строка, которую нужно подставить в форму или запрос на странице, чтобы пройти проверку; нажимать на изображения не нужно. Все такие задачи асинхронные: сначала создайте задачу, затем опрашивайте результат каждые 5 секунд. - **Результат распознавания изображений**: типы, названия которых заканчиваются на `Classification`. Вы отправляете изображения капчи, а в ответ получаете, какие картинки или какую позицию нужно нажать; нажатие в браузере выполняет ваша программа. Задачи синхронные: результат приходит в ответ на один запрос. - **Текст или Cookie**: распознавание графических капч из букв и цифр возвращает текст на изображении; задача для страницы проверки Cloudflare возвращает Cookie после прохождения проверки. Все типы задач и цены: [Типы задач и цены](https://docs.yescaptcha.com/ru/tasks.md). ## С чего начать [Быстрый старт](https://docs.yescaptcha.com/ru/getting-started/quickstart.md)Регистрация, получение clientKey, первый запрос [Адреса подключения](https://docs.yescaptcha.com/ru/getting-started/endpoints.md)Глобальный endpoint и endpoint для Китая [Оплата и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md)Баллы, предварительное списание, возврат баллов, возврат баллов после жалобы [Расширение браузера](https://docs.yescaptcha.com/ru/extension.md)Автоматическое распознавание в браузере без кода ## Сообщество и SDK SDK, созданные пользователями, неофициальные; оцените их самостоятельно перед использованием: см. [Примеры кода и SDK](https://docs.yescaptcha.com/ru/samples.md). --- # Быстрый старт > Отправьте первый запрос к YesCaptcha за 5 минут. Зарегистрируйтесь, скопируйте clientKey, пополните баланс, затем распознайте картинку с капчей через curl, Python или Node.js (ImageToTextTaskOcrBase, синхронно, 2 балла за запрос). Source: https://docs.yescaptcha.com/ru/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/ На этой странице первый запрос отправляется с самым простым типом задачи `ImageToTextTaskOcrBase`, который распознаёт английские буквы и цифры на картинке. Он синхронный: один запрос `createTask` сразу возвращает результат. Стоимость — 2 pts (≈ $0.30 / 1k) за запрос, сторонние сайты не нужны, поэтому это удобный способ проверить, что аккаунт и код работают. 1. **Зарегистрируйте аккаунт** Откройте [yescaptcha.com](https://yescaptcha.com/), зарегистрируйтесь и войдите. 2. **Скопируйте clientKey** После входа в Панели ([yescaptcha.com/dashboard.html](https://yescaptcha.com/dashboard.html)) найдите «Ваш ClientKey» и нажмите «копировать». Копируйте значение полностью. > **Осторожно:** Все API-запросы авторизуются по clientKey: кто получил его, тот может тратить ваш баланс. Не передавайте его другим и не добавляйте в публичный код; если ключ утёк, его можно сбросить там же. 3. **Пополните баланс** Чтобы создавать задачи, баланс должен быть больше 10 баллов. Способы пополнения и бонусы VIP: [Пополнение и VIP](https://docs.yescaptcha.com/ru/account/recharge.md). 4. **Проверьте, что clientKey работает** `getBalance` возвращает баланс и не списывает баллы: ```bash curl -s https://api.yescaptcha.com/getBalance \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY"}' ``` Ответ `{"errorId": 0, "balance": 12345, ...}` означает, что всё работает; `balance` — оставшиеся баллы. Если вернулся `ERROR_KEY_DOES_NOT_EXIST`, ключ скопирован неверно. 5. **Распознайте картинку** Скачайте пример изображения [captcha.jpg](https://docs.yescaptcha.com/samples/captcha.jpg) (можно взять свою картинку с капчей), задайте clientKey в переменной окружения и запустите скрипт: ```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); ``` Запуск: `bash quickstart.sh captcha.jpg`, `python quickstart.py captcha.jpg` или `node quickstart.mjs captcha.jpg`. Для Python сначала выполните `pip install requests`; для Node.js нужна версия 18 или новее. 6. **Посмотрите результат** При успехе вернётся: ```json { "errorId": 0, "status": "ready", "solution": { "text": "LMResm" }, "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b" } ``` `errorId` равен 0 — запрос успешен, распознанный текст находится в `solution.text`. Если `errorId` равен 1, смотрите `errorCode`; значения описаны в разделе [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md). ## Что дальше - Задачи, возвращающие токен (reCAPTCHA, hCaptcha), **асинхронные**: `createTask` сначала возвращает `taskId`, затем нужно вызывать `getTaskResult` каждые 5 секунд. Полный процесс описан в разделе [Запросы и ответы](https://docs.yescaptcha.com/ru/api/overview.md), пример — [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md). - Выбор типа задачи: [Типы задач и цены](https://docs.yescaptcha.com/ru/tasks.md). - Готовый клиент, который можно скопировать в проект: [Python](https://docs.yescaptcha.com/ru/samples/python.md), [Node.js](https://docs.yescaptcha.com/ru/samples/nodejs.md). - Без кода: [расширение браузера](https://docs.yescaptcha.com/ru/extension.md). --- # Адреса доступа > Два endpoint API YesCaptcha — глобальный api.yescaptcha.com и для Китая cn.yescaptcha.com. Только HTTPS POST с JSON; создавайте и запрашивайте задачу на одном и том же endpoint. Source: https://docs.yescaptcha.com/ru/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/ У API YesCaptcha два endpoint с одинаковыми методами и параметрами. Выберите тот, что ближе к вашим серверам: | Endpoint | Адрес | Для чего | | --- | --- | --- | | Глобальный | `https://api.yescaptcha.com` | Серверы за пределами материкового Китая | | Для Китая | `https://cn.yescaptcha.com` | Серверы в материковом Китае | URL метода — это адрес endpoint плюс имя метода, например для создания задачи: - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) ## Правила - Только HTTPS. - Все методы, кроме [/useragent](https://docs.yescaptcha.com/ru/api/useragent.md), используют `POST` с телом в формате JSON и заголовком `Content-Type: application/json`. Размер тела не должен превышать 6 MB. - Аутентификация выполняется по `clientKey` в теле запроса; другие заголовки не нужны. > **Заметка:** Запрашивайте результат задачи через `getTaskResult` на том же endpoint, на котором вы её создали. Не смешивайте два endpoint. ## Все методы | Метод | Назначение | Примечания | | --- | --- | --- | | [createTask](https://docs.yescaptcha.com/ru/api/create-task.md) | Создать задачу | Синхронные типы сразу возвращают результат | | [getTaskResult](https://docs.yescaptcha.com/ru/api/get-task-result.md) | Получить результат задачи | Для асинхронных типов опрашивайте (polling) каждые 5 секунд | | [getBalance](https://docs.yescaptcha.com/ru/api/get-balance.md) | Узнать баланс | Баллы не списываются | | [getSoftID](https://docs.yescaptcha.com/ru/api/get-soft-id.md) | Узнать ID разработчика | Для доли разработчика | | [report](https://docs.yescaptcha.com/ru/api/report.md) | Сообщить о неверном результате | Для типов распознавания изображений возможен возврат баллов после жалобы | | [useragent](https://docs.yescaptcha.com/ru/api/useragent.md) | Получить рекомендуемый User-Agent | `GET`, используется с hCaptcha | Если не удаётся подключиться, см. [Проблемы с подключением и сетью](https://docs.yescaptcha.com/ru/help/troubleshooting.md). --- # Тарификация и возврат баллов > Как YesCaptcha списывает баллы: 1,000 баллов = ¥1, фиксированная цена за каждый тип задачи; при неудаче и тайм-ауте баллы возвращаются автоматически, запросы с ошибкой не списываются; баланс должен быть больше 10 баллов; при жалобе на неверное распознавание изображений баллы возвращаются примерно через 24 часа. Source: https://docs.yescaptcha.com/ru/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 списывает баллы за каждую задачу: у каждого типа задачи фиксированная цена, 1,000 баллов = ¥1. Например, `NoCaptchaTaskProxyless` стоит 15 pts (≈ $2.25 / 1k) за задачу. Цены всех типов: [Типы задач и цены](https://docs.yescaptcha.com/ru/tasks.md). > **Совет:** Вы платите только за успешные задачи: при неудаче и тайм-ауте баллы возвращаются автоматически, а запросы, вернувшие ошибку, не списываются. ## Когда списываются баллы - **Асинхронные типы** (большинство типов, возвращающих токен): баллы списываются при успешном создании задачи. Если затем распознавание не удалось (`ERROR_CAPTCHA_UNSOLVABLE` и т. п.) или истекло время ожидания (`ERROR_TASK_TIMEOUT`, обычно 110 секунд), баллы возвращаются автоматически. - **Синхронные типы** (распознавание изображений, `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle`): баллы списываются, когда возвращается результат распознавания. - Если ошибка возвращается уже при создании задачи (неверные параметры, недостаточный баланс, превышение лимита параллельных задач и т. д.), баллы не списываются. ## Баланс - Чтобы создать задачу, баланс должен быть **больше 10 баллов**, иначе возвращается `ERROR_ZERO_BALANCE`. - Баланс можно проверить через [getBalance](https://docs.yescaptcha.com/ru/api/get-balance.md), баллы за это не списываются. - Пополнение и бонусы VIP: [Пополнение и VIP](https://docs.yescaptcha.com/ru/account/recharge.md). Когда суммарное пополнение достигает уровня VIP, за каждое следующее пополнение начисляются бонусные баллы пропорционально сумме. ## Типы с ценой, зависящей от случая - **Распознавание изображений reCAPTCHA v2** (`ReCaptchaV2Classification`): цена маленького изображения 1x1 отличается от цены больших изображений 3x3 и 4x4, см. [Распознавание изображений reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md). - **Распознавание изображений hCaptcha** (`HCaptchaClassification`): если цель не найдена (пустой результат), баллы не списываются. ## Возврат баллов после жалобы на неверный результат Если результат распознавания изображений оказался неверным, можно сообщить об этом через [report](https://docs.yescaptcha.com/ru/api/report.md); при выполнении условий баллы возвращаются: - Только для 5 типов распознавания изображений: `FunCaptchaClassification`, `HCaptchaClassification`, `ReCaptchaV2Classification`, `AwsClassification`, `bCaptchaClassification`. - Сообщить нужно **в течение 1 часа** после создания задачи; одна задача учитывается только один раз. - Баллы возвращаются не сразу, а **примерно через 24 часа** при общем расчёте. - При расчёте ваши данные сравниваются с другими пользователями за тот же период по тем же вопросам: если доля неудач в ваших сообщениях заметно выше, чем в среднем за период, баллы возвращаются по доле неудач за период. - Пожалуйста, сообщайте честно и об успехах, и о неудачах. Сообщения, в которых указаны только неудачи, не учитываются как эталон за период, а доля неудач считается по всем созданным вами задачам. - Если вы не согласны с результатом расчёта, [обратитесь в поддержку](https://docs.yescaptcha.com/ru/help/contact.md) и подайте апелляцию. Для типов, возвращающих токен (reCAPTCHA, hCaptcha, Turnstile и др.), принимает ли токен целевой сайт, определяет сам сайт, поэтому за жалобы баллы не возвращаются. ## Когда баллы не списываются | Ситуация | Ответ | | --- | --- | | Неверные параметры, несуществующий тип, неверный `clientKey` | Соответствующий код ошибки | | Баланс не больше 10 баллов | `ERROR_ZERO_BALANCE` | | Превышен лимит параллельных задач | `ERROR_THREADS_MAXIMUM`, см. [Лимит параллельных задач и автоматическая приостановка](https://docs.yescaptcha.com/ru/api/rate-limits.md) | | Во время автоматической приостановки | `ERROR_IP_BLOCKED_5MIN` | | Sitekey или домен, уже признанные недействительными (пока действует кеш) | Исходный код ошибки с `cached: true` | | Распознавание не удалось или истекло время ожидания | Списанные баллы автоматически возвращаются | ## Доля разработчика и вознаграждения - Если вы пользуетесь чужой программой или расширением, задачи могут содержать ID разработчика, и разработчик получает долю; на ваше списание это не влияет. Если вы разрабатываете программу сами, см. [Доля разработчика](https://docs.yescaptcha.com/ru/account/developer.md). - О приглашении других пользователей: [Реферальное вознаграждение](https://docs.yescaptcha.com/ru/account/referral.md). --- # Запросы и ответы > Общие правила YesCaptcha API: POST JSON, аутентификация по clientKey, формат ответа с errorId, синхронные и асинхронные задачи, опрос каждые 5 секунд, тайм-аут 110 секунд, результат хранится около 10 минут, язык сообщений по Accept-Language. Source: https://docs.yescaptcha.com/ru/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/ Все методы принимают HTTPS `POST` с JSON в теле (только `/useragent` — это `GET`), аутентифицируются по `clientKey` в теле запроса и возвращают JSON: `errorId` равен 0 при успехе и 1 при ошибке, при этом в ответе есть `errorCode`. Решение капчи состоит из двух шагов: `createTask` создаёт задачу, а `getTaskResult` нужно опрашивать каждые 5 секунд, чтобы получить результат. Синхронные типы возвращают результат сразу в `createTask`. ## Запрос ```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` (глобальный) или `https://cn.yescaptcha.com` (для Китая), см. [Адреса подключения](https://docs.yescaptcha.com/ru/getting-started/endpoints.md). - Тело запроса — JSON с заголовком `Content-Type: application/json`, не более 6 MB. Комментарии в JSON недопустимы. - Каждый запрос должен содержать `clientKey`; копируйте значение из Панели целиком. > **Осторожно:** В Python requests используйте `json=data`, а не `data=data`. Во втором случае отправляется форма, и в ответ придёт `ERROR_TASK_ABSENT` или `ERROR_REQUIRED_FIELDS`. ## Ответ Успех: ```json { "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" } ``` Ошибка: ```json { "errorId": 1, "errorCode": "ERROR_ZERO_BALANCE", "errorDescription": "帐户余额不足" } ``` | Поле | Описание | | --- | --- | | `errorId` | 0 — успех, 1 — ошибка | | `errorCode` | Код ошибки; значения и способы решения см. в разделе [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md) | | `errorDescription` | Текстовое описание причины ошибки (для большинства кодов — на китайском) | | `taskId` | ID задачи | | `status` | `processing` (в обработке) или `ready` (готово) | | `solution` | Результат; набор полей зависит от типа задачи, см. страницы отдельных типов задач | В коде проверяйте `errorId` и `errorCode`, а не текст `errorDescription`: он может измениться. ## Синхронные и асинхронные задачи | | Асинхронные | Синхронные | | --- | --- | --- | | Какие типы | Задачи, возвращающие токен (reCAPTCHA, hCaptcha, Turnstile, FunCaptcha), страница проверки Cloudflare, `ImageToTextTask`, `ImageToTextTaskM1` | Распознавание изображений (названия заканчиваются на `Classification`), `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle` | | `createTask` возвращает | `taskId` | `status: "ready"` и `solution` | | Как получить результат | Вызывать `getTaskResult` каждые 5 секунд | Больше ничего делать не нужно | К какому виду относится каждый тип, показывает столбец «Способ возврата» на странице [Типы задач и цены](https://docs.yescaptcha.com/ru/tasks.md). ## Опрос 1. После того как `createTask` вернул `taskId`, подождите 5 секунд и вызовите `getTaskResult`. 2. Если вернулся `status: "processing"`, подождите ещё 5 секунд и повторите; если вернулся `status: "ready"`, результат находится в `solution`. 3. Если вернулся `errorId: 1`, прекратите опрос этой задачи и обработайте `errorCode`. - Повторные запросы по одному `taskId` в течение 5 секунд сразу возвращают `processing`; более частый опрос не ускорит получение результата. - Задача обрабатывается не дольше 110 секунд (для некоторых типов — 180–220 секунд); по истечении времени возвращается `ERROR_TASK_TIMEOUT`, а баллы автоматически возвращаются. - Результат хранится на сервере около 10 минут, после чего `taskId` становится недействительным, а запрос возвращает `ERROR_TASKID_INVALID`. - Запрос результата не списывает баллы; списание происходит только при создании задачи. ## Язык сообщений Для сообщений об автоматической приостановке, кэшированных недопустимых параметрах и прекращении опроса язык `errorDescription` выбирается по заголовку запроса `Accept-Language`: если значение начинается с `zh`, возвращается китайский, для любого другого языка — английский, а без этого заголовка возвращаются оба варианта. Описания для остальных кодов ошибок от заголовка не зависят. ## Дальше - [createTask — создание задачи](https://docs.yescaptcha.com/ru/api/create-task.md) - [getTaskResult — получение результата](https://docs.yescaptcha.com/ru/api/get-task-result.md) - [Лимит параллельных задач и автоматическая приостановка](https://docs.yescaptcha.com/ru/api/rate-limits.md): при слишком большом числе ошибок ключ приостанавливается на несколько минут --- # createTask — создание задачи > POST /createTask создаёт задачу распознавания капчи: параметры запроса (clientKey, task, softID), порядок проверок, асинхронные типы возвращают taskId, синхронные сразу возвращают solution; баланс должен быть больше 10 баллов. Source: https://docs.yescaptcha.com/ru/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` создаёт задачу распознавания; в `task.type` указывается, какую капчу нужно решить. Асинхронные типы возвращают `taskId`, по которому результат запрашивается через [getTaskResult](https://docs.yescaptcha.com/ru/api/get-task-result.md); синхронные типы возвращают результат сразу. > **Заметка:** Баллы списываются при успешном создании задачи, а для создания задачи баланс должен быть больше 10 баллов. За задачи, которые завершились ошибкой или превысили время ожидания, баллы возвращаются автоматически. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `clientKey` | string | Да | ClientKey вашего аккаунта; скопируйте его в Панели на [yescaptcha.com](https://yescaptcha.com/) | | `task` | object | Да | Объект задачи. Должен содержать `type`; остальные поля зависят от типа задачи, см. страницы отдельных типов задач | | `softID` | integer | Нет | ID разработчика. Указывайте его, если ваше программное обеспечение используют другие люди: так вы получаете долю разработчика, см. [Доля разработчика](https://docs.yescaptcha.com/ru/account/developer.md) | ## Пример запроса Распознавание капчи-изображения (синхронно): ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE" } } ``` Получение токена reCAPTCHA v2 (асинхронно): ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } } ``` Поля `task` для каждого типа описаны на страницах раздела [Типы задач и цены](https://docs.yescaptcha.com/ru/tasks.md). ## Ответ Асинхронные типы: ```json { "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" } ``` Сохраните `taskId` и через 5 секунд начните опрашивать `getTaskResult`. Синхронные типы: ```json { "errorId": 0, "status": "ready", "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b", "solution": { "text": "LMResm" } } ``` Ошибка: ```json { "errorId": 1, "errorCode": "ERROR_TASK_NOT_SUPPORTED", "errorDescription": "任务类型不正确或不受支持" } ``` ## Порядок проверок Сервер проверяет запрос в таком порядке и возвращает код первой найденной ошибки. Баллы при этом не списываются: 1. Тело запроса — корректный JSON: `ERROR_REQUEST_FORMATS` 2. Передан `clientKey`: `ERROR_REQUIRED_FIELDS` 3. `clientKey` существует: `ERROR_KEY_DOES_NOT_EXIST` 4. Аккаунт не приостановлен автоматически: `ERROR_IP_BLOCKED_5MIN` (см. [Лимит параллельных задач и автоматическая приостановка](https://docs.yescaptcha.com/ru/api/rate-limits.md)) 5. Баланс больше 10 баллов: `ERROR_ZERO_BALANCE` 6. Передан `task`: `ERROR_TASK_ABSENT` 7. `task.type` существует: `ERROR_TASK_NOT_SUPPORTED` 8. Заполнены все обязательные поля: `ERROR_REQUIRED_FIELDS` (в `errorDescription` указано, какого поля не хватает) 9. Для задач с изображениями изображение корректно: `ERROR_ZERO_CAPTCHA_FILESIZE`, `ERROR_IMAGE_TYPE_NOT_SUPPORTED` и другие ## Полный пример Создание задачи и опрос результата (асинхронный тип): **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 — получение результата > POST /getTaskResult возвращает результат асинхронной задачи: опрашивайте каждые 5 секунд, при processing продолжайте ждать, при ready берите solution, при ошибке прекращайте опрос; задача выполняется до 110 секунд, результат хранится около 10 минут, запросы не списывают баллы. Source: https://docs.yescaptcha.com/ru/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` возвращает результат асинхронной задачи. Вызывайте его каждые 5 секунд после создания задачи: при `processing` продолжайте ждать, при `ready` результат лежит в `solution`, при ошибке остановитесь. Запросы не списывают баллы, сколько бы вы их ни делали. - POST `https://api.yescaptcha.com/getTaskResult` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/getTaskResult` (Endpoint для Китая) ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `clientKey` | string | Да | Ваш ClientKey, тот же, с которым создавалась задача | | `taskId` | string | Да | ID задачи, возвращённый методом [createTask](https://docs.yescaptcha.com/ru/api/create-task.md) | ```json { "clientKey": "YOUR_CLIENT_KEY", "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" } ``` ## Ответ | Ситуация | Ответ | Что делать | | --- | --- | --- | | В обработке | `errorId` равен 0, `status` равен `processing` | Повторите запрос через 5 секунд | | Готово | `errorId` равен 0, `status` равен `ready`, результат в `solution` | Возьмите `solution`; его поля описаны на страницах типов задач | | Не удалось решить | `errorId` равен 1, `errorCode` равен `ERROR_CAPTCHA_UNSOLVABLE` | Баллы уже возвращены, можно создать новую задачу | | Превышено время | `errorId` равен 1, `errorCode` равен `ERROR_TASK_TIMEOUT` | Баллы уже возвращены, можно создать новую задачу | | Задача не найдена или устарела | `errorId` равен 1, `errorCode` равен `ERROR_TASKID_INVALID` | Прекратите опрашивать этот `taskId` | Пример готового результата (reCAPTCHA v2): ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." } } ``` ## Правила - **Опрашивайте каждые 5 секунд.** Повторные запросы по одному и тому же `taskId` в течение 5 секунд сразу возвращают `processing`, более частый опрос не ускорит результат. - **Задача обрабатывается не более 110 секунд** (для некоторых типов 180–220 секунд); по истечении времени возвращается `ERROR_TASK_TIMEOUT`, баллы автоматически возвращаются. Рекомендуем ограничить ожидание в коде примерно 3 минутами. - **Результат хранится около 10 минут**, после этого `taskId` перестаёт действовать и возвращает `ERROR_TASKID_INVALID`. Используйте результат сразу: срок действия самого токена короче (у reCAPTCHA около 120 секунд). - **При ошибке остановитесь.** После `errorId: 1` повторные запросы по тому же `taskId` результат не изменят; начиная с третьего запроса по завершённой задаче в конце `errorDescription` появляется подсказка прекратить опрос. `ERROR_TASKID_INVALID` учитывается в счётчике ошибок [автоматической приостановки](https://docs.yescaptcha.com/ru/api/rate-limits.md) (для одного ID учитывается только первый раз). - Запрашивайте результат на том endpoint, на котором была создана задача. - Автоматическая приостановка не влияет на `getTaskResult`: задачи, созданные до приостановки, по-прежнему можно опрашивать. --- # getBalance — запрос баланса > POST /getBalance возвращает баланс аккаунта в баллах (1,000 баллов = ¥1), а также балансы доли разработчика и реферального вознаграждения. Баллы не списываются; удобно для проверки clientKey. Source: https://docs.yescaptcha.com/ru/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` возвращает остаток баллов на аккаунте (1,000 баллов = ¥1), а также балансы доли разработчика и реферального вознаграждения (в юанях). Баллы не списываются, поэтому метод часто используют, чтобы проверить, что `clientKey` указан верно. - POST `https://api.yescaptcha.com/getBalance` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/getBalance` (Endpoint для Китая) ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `clientKey` | string | Да | ClientKey аккаунта | ```json { "clientKey": "YOUR_CLIENT_KEY" } ``` ## Ответ ```json { "errorId": 0, "balance": 1071810, "softBalance": 36.0098, "inviteBalance": 0, "inviteBy": 0 } ``` | Поле | Тип | Описание | | --- | --- | --- | | `balance` | integer | Баланс аккаунта в баллах (1,000 баллов = ¥1). Для создания задачи должно быть больше 10 баллов | | `softBalance` | number | Баланс доли разработчика в юанях, см. [Доля разработчика](https://docs.yescaptcha.com/ru/account/developer.md) | | `inviteBalance` | number | Баланс реферального вознаграждения в юанях, см. [Реферальное вознаграждение](https://docs.yescaptcha.com/ru/account/referral.md) | | `inviteBy` | integer | ID пользователя, пригласившего вас на регистрацию; если такого нет, равно 0 | | `keyQuotaRemaining` | integer | Оставшийся лимит расходов для этого `clientKey` в текущем периоде, в баллах. Поле есть только у `clientKey` с заданным лимитом; тогда `balance` равен меньшему из значений: баланс аккаунта и оставшийся лимит. Если лимит не задан, поля нет | При неверном `clientKey` возвращается `ERROR_KEY_DOES_NOT_EXIST`; если для `clientKey` задан белый список IP, а запрос пришёл с IP вне списка, возвращается `ERROR_KEY_IP_NOT_ALLOWED`. На `getBalance` влияет [автоматическая приостановка](https://docs.yescaptcha.com/ru/api/rate-limits.md): во время приостановки возвращается `ERROR_IP_BLOCKED_5MIN`. ## Примеры **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 — запрос ID разработчика > POST /getSoftID возвращает ваш ID разработчика (softID) и накопленную сумму доли разработчика. Добавьте softID в запросы createTask, которые ваше ПО отправляет от имени других пользователей, чтобы получать долю. Source: https://docs.yescaptcha.com/ru/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` возвращает ваш ID разработчика (`softID`) и накопленную сумму доли разработчика (в юанях). Когда другие люди используют ваше ПО или расширение, добавляйте этот ID в их запросы `createTask` — вы получаете долю от их расходов. Правила и вывод средств: [Доля разработчика](https://docs.yescaptcha.com/ru/account/developer.md). - POST `https://api.yescaptcha.com/getSoftID` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/getSoftID` (Endpoint для Китая) ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `clientKey` | string | Да | Ваш собственный ClientKey (ключ разработчика) | ```json { "clientKey": "YOUR_CLIENT_KEY" } ``` ## Ответ ```json { "errorId": 0, "softID": 3, "balance": 0.004 } ``` | Поле | Тип | Описание | | --- | --- | --- | | `softID` | integer | Ваш ID разработчика | | `balance` | number | Накопленная доля разработчика в юанях | ## Как использовать В запросы `createTask`, которые отправляют пользователи вашего ПО, добавьте поле `softID` верхнего уровня: ```json { "clientKey": "THE_USERS_CLIENT_KEY", "task": { "type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE" }, "softID": 3 } ``` > **Осторожно:** Размещайте `softID` на верхнем уровне тела запроса, на одном уровне с `clientKey` и `task`, с точно таким же регистром. Внутри `task` поле не действует. `clientKey` — это собственный ключ пользователя, и баллы списываются с него; `softID` — ваш ID разработчика. --- # report — сообщить о результате > POST /report сообщает, верен ли результат задач; сообщайте честно и об успехах, и об ошибках. Для типов распознавания изображений ошибки нужно сообщить в течение 1 часа после создания задачи, возврат баллов после жалобы рассчитывается примерно через 24 часа. Source: https://docs.yescaptcha.com/ru/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` сообщает нам, верен ли результат группы задач. **Сообщайте и об успешных, и о неудачных результатах.** Если для типа распознавания изображений сообщить о неверном результате, подходящие задачи получают возврат баллов примерно через 24 часа; эти данные также используются для оценки и улучшения распознавания. - POST `https://api.yescaptcha.com/report` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/report` (Endpoint для Китая) ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `id` | array of string | Да | Список ID задач; можно передать сразу несколько | | `isSuccess` | boolean | Да | `true` — результат верный, `false` — результат неверный | `clientKey` не нужен: задачу определяет сам ID задачи. ```json { "id": ["610ff5e0-68eb-11ef-95a6-22e70a0b794d", "65b88c06-68eb-11ef-8e9a-52540023ccb3"], "isSuccess": false } ``` ## Ответ ```json { "errorId": 0, "status": "success" } ``` ## Сообщайте честно Эти данные используются и для расчёта возврата баллов, и для оценки и улучшения распознавания, поэтому сообщайте фактический результат: - Для верных результатов передавайте `isSuccess: true`, для неверных — `false`. Сообщения, в которых отправляются только ошибки, или в которых всё помечено как ошибка независимо от результата, не учитываются в статистике и расчёте. - Доля ошибок считается по всем задачам, созданным вами за период, а не только по тем, о которых вы сообщили. Больше сообщений об ошибках не даёт больше возврата: если ваша доля ошибок заметно выше, чем у других за тот же период, возврат считается по доле ошибок за этот период. - Если для одной проверки использовано несколько изображений (например, FunCaptcha требует 5 раундов) и неизвестно, какое из них неверное, можно сообщить об ошибке для всей группы задач сразу; если проверка пройдена, так же сообщите об успехе для всей группы. ## Возврат баллов после жалобы - Возврат баллов возможен только для 5 типов распознавания изображений: `FunCaptchaClassification`, `HCaptchaClassification`, `ReCaptchaV2Classification`, `AwsClassification`, `bCaptchaClassification`. - Учитываются только сообщения, отправленные в течение **1 часа** после создания задачи; по одной задаче возврат происходит только один раз. - Возврат происходит не сразу, а **примерно через 24 часа**, при общем расчёте. - При расчёте ваша доля ошибок сравнивается с другими пользователями за тот же период по тому же вопросу; если ваша доля заметно выше уровня за период, возврат считается по доле ошибок за этот период. - Если у вас есть вопросы по расчёту, можно подать апелляцию, [обратившись в поддержку](https://docs.yescaptcha.com/ru/help/contact.md). Для задач, возвращающих токен (reCAPTCHA, hCaptcha, Turnstile, FunCaptcha и др.), принятие токена определяет целевой сайт, поэтому возврат баллов за такие сообщения не производится. Сводка правил тарификации: [Тарификация и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md). --- # useragent — получение User-Agent > GET https://api.yescaptcha.com/useragent возвращает рекомендуемый браузерный User-Agent (обычный текст). Поле userAgent в задачах hCaptcha принимает только это значение. Source: https://docs.yescaptcha.com/ru/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` возвращает текущий рекомендуемый браузерный User-Agent в виде обычного текста. `clientKey` не нужен, баллы не списываются. Поле `userAgent` в задачах [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md) принимает только это значение; если использовать его и при заходе на целевой сайт, токен проходит проверку легче. - GET `https://api.yescaptcha.com/useragent` (Глобальный endpoint) - GET `https://cn.yescaptcha.com/useragent` (Endpoint для Китая) ## Пример ```bash curl -s https://api.yescaptcha.com/useragent ``` Ответ (значение на 2026-10-15; меняется вместе с версиями браузера): ```text Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 ``` > **Заметка:** Значение со временем меняется. Не зашивайте его в код, достаточно получать его один раз при запуске программы. - Если в результате распознавания есть `userAgent`, отправляйте токен с этим значением. --- # Коды ошибок > Все коды ошибок YesCaptcha API, их значение и что делать: формат запроса, аккаунт и баланс, параллельные задачи и приостановка, результат задачи, параметры сайта, изображения, прокси, сервер. За запросы, вернувшие ошибку, баллы не списываются. Source: https://docs.yescaptcha.com/ru/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/ При ошибке API возвращает `errorId: 1`; `errorCode` содержит код ошибки, `errorDescription` — текстовое описание. За запросы, вернувшие ошибку, баллы не списываются: если ошибка возникла при создании задачи, списания нет, а если распознавание не удалось или истекло время после создания, баллы возвращаются автоматически. > **Совет:** В коде ориентируйтесь на `errorCode`, а не на текст `errorDescription`: текст описания может измениться. ```json { "errorId": 1, "errorCode": "ERROR_ZERO_BALANCE", "errorDescription": "帐户余额不足" } ``` ## Как обрабатывать ошибки 1. **Ошибки параметров** (формат запроса, ClientKey, тип задачи, параметры сайта, изображения) не исчезнут при повторной отправке — сначала исправьте запрос. 2. **Неудачное распознавание и тайм-аут** (`ERROR_CAPTCHA_UNSOLVABLE`, `ERROR_TASK_TIMEOUT`) можно повторить, создав задачу заново. 3. После ошибки **прекратите опрос** (polling) этого `taskId` и не отправляйте тот же запрос повторно с высокой частотой. 4. Ошибки с пометкой «Учитывается в приостановке»: если для одного `clientKey` набирается 100 таких ошибок за минуту, создание задач приостанавливается на 5 минут. Ошибки с пометкой «Кэшируется» в этот счётчик не входят, но пока действует кэш, одинаковые запросы сразу получают прежнюю ошибку. Подробнее — в разделе [Лимит параллельных задач и автоматическая приостановка](https://docs.yescaptcha.com/ru/api/rate-limits.md). ## Все коды ошибок ### Формат запроса | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_REQUIRED_FIELDS` | Отсутствует обязательное поле (например, `clientKey` или `websiteURL` / `websiteKey` для данного типа задачи), либо тело запроса не является JSON | Добавьте недостающие поля, перечисленные на странице типа задачи, и отправляйте JSON методом `POST` с заголовком `Content-Type: application/json` | | `ERROR_REQUEST_FORMATS` (Учитывается для автоматической приостановки) | Тело запроса не является корректным JSON | Формируйте тело запроса с помощью JSON-библиотеки, а не конкатенацией строк; в JSON не должно быть комментариев `//` | | `ERROR_TASK_ABSENT` (Учитывается для автоматической приостановки) | В вызове `createTask` отсутствует поле `task` | Поместите параметры задачи в объект `task`. В Python requests используйте `json=data`, а не `data=data` | | `ERROR_TASK_NOT_SUPPORTED` (Учитывается для автоматической приостановки) | В `task.type` допущена опечатка, либо этот тип отключён | Скопируйте название типа из раздела «Типы задач и цены»; регистр важен | | `ERROR_PAGE_NOT_FOUND` | Запрошенный путь не существует | Проверьте адрес endpoint, например `https://api.yescaptcha.com/createTask`; названия методов чувствительны к регистру | | `ERROR_BAD_REQUEST` | Запрос не может быть обработан, обычно из-за неверного HTTP-метода (GET вместо POST) или недопустимых значений параметров | Отправляйте JSON методом `POST` и проверьте типы и значения параметров | | `ERROR_ILLEGAL_PARAMETERS` | Недопустимое значение параметра. Типично для страницы проверки Cloudflare: `websiteURL` не является публичным URL, начинающимся с `http://` / `https://`, `postData` не является объектом, либо `requiredCookies` не является массивом строк (возвращается `createTask`, списание баллов не производится); либо не удалось разрешить домен целевого сайта через прокси (возвращается `getTaskResult`, возврат баллов выполняется автоматически) | Исправьте значение в соответствии с таблицей параметров на странице типа задачи. Если домен не удалось разрешить, проверьте написание URL и то, может ли прокси подключиться к сайту | ### Аккаунт и баланс | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_KEY_DOES_NOT_EXIST` (Учитывается для автоматической приостановки) | `clientKey` не существует: при копировании были добавлены или потеряны символы, либо ключ был сброшен в Панели | Скопируйте ключ заново в Панели на yescaptcha.com, без пробелов и переносов строк | | `ERROR_KEY_EXPIRED` (Учитывается для автоматической приостановки) | Срок действия `clientKey` истёк (возвращается при createTask и getBalance, списание баллов не производится). Возможны два случая: ключ долго не использовался, и система установила срок действия для защиты аккаунта (перед истечением срока приходит напоминание по электронной почте), либо истёк срок действия, заданный для этого `clientKey` | Войдите в Панель на yescaptcha.com. Если срок истёк из-за долгого неиспользования, создайте новый `clientKey`: Баланс автоматически перейдёт на новый ключ. Если срок действия был задан вручную, измените его или используйте другой `clientKey`. Затем обновите `clientKey` в своей программе | | `ERROR_KEY_IP_NOT_ALLOWED` | Для этого `clientKey` задан белый список IP, и IP, с которого пришёл запрос, в нём отсутствует (возвращается при createTask и getBalance, списание баллов не происходит, в автоматическую приостановку не засчитывается) | Войдите в Панель на yescaptcha.com и добавьте публичный IP машины, отправляющей запросы, в белый список этого `clientKey`, либо используйте другой `clientKey`. Если API вызывается с нескольких машин, добавьте публичный IP каждой из них (имеется в виду IP, с которого вызывается API YesCaptcha, а не прокси в параметрах задачи) | | `ERROR_KEY_QUOTA_EXCEEDED` | Для этого `clientKey` задан лимит расходов, и его остатка за текущий период меньше, чем стоимость этой задачи (возвращается при createTask, списание баллов не происходит, в автоматическую приостановку не засчитывается). В лимит засчитываются фактически списанные баллы; баллы, возвращённые за неудачные задачи или задачи с истекшим временем ожидания, возвращаются в лимит | Войдите в Панель на yescaptcha.com и увеличьте лимит этого `clientKey`, дождитесь следующего периода (лимит сбрасывается ежедневно, каждый понедельник или 1-го числа каждого месяца по пекинскому времени; разовый лимит не сбрасывается) либо используйте другой `clientKey`. Оставшийся лимит этого `clientKey` (`keyQuotaRemaining`) возвращает `getBalance` | | `ERROR_ZERO_BALANCE` | Недостаточно баллов на балансе. Для создания задачи баланс должен быть больше 10 баллов | Пополните баланс и повторите попытку. Проверить баланс можно с помощью `getBalance` | ### Параллельные задачи и приостановки | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_THREADS_MAXIMUM` (Иногда учитывается для автоматической приостановки) | Для аккаунта одновременно выполняется слишком много задач этого типа. `limit` в ответе — текущий лимит параллельных задач. Запрос не был обработан, списание баллов не производилось | Дождитесь ответов на уже отправленные запросы или подождите 1–2 секунды и повторите; ограничьте в программе число одновременно ожидающих запросов | | `ERROR_IP_BLOCKED_5MIN` | Этот `clientKey` за короткое время вызвал слишком много ошибок и был автоматически приостановлен. `retryAfter` — оставшееся время в секундах, `blockReason` — ошибка, вызвавшая приостановку | Исправьте запрос согласно `blockReason` и подождите `retryAfter` секунд; отправка запросов во время приостановки её не продлевает | | `ERROR_NO_SLOT_AVAILABLE` | Сервис распознавания временно перегружен. Если ошибка возвращена методом createTask, баллы не списываются; если задача слишком долго ждала в очереди, ошибка также возвращается методом getTaskResult, а баллы возвращаются автоматически | Подождите несколько секунд и создайте задачу снова | ### Задачи и результаты | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_TASKID_INVALID` (Учитывается для автоматической приостановки) | `taskId` не существует, срок его действия истёк (результаты хранятся около 10 минут), он принадлежит другому `clientKey` или был создан на другом endpoint | Прекратите опрос (polling) этой задачи. Запрашивайте результат через тот же endpoint и с тем же `clientKey`, которые использовались при создании | | `ERROR_TASK_TIMEOUT` | Задача не была выполнена за отведённое время (обычно 110 секунд); баллы возвращены автоматически | Создайте новую задачу; если таймауты повторяются, попробуйте другой тип задачи для той же капчи | | `ERROR_CAPTCHA_UNSOLVABLE` | В этот раз капчу распознать не удалось; баллы возвращены. Эта ошибка не учитывается при автоматической приостановке | Создайте новую задачу. Если ошибка повторяется, проверьте `websiteURL`, `websiteKey` и другие параметры или попробуйте другой тип задачи для той же капчи | | `ERROR_SETTLEMENT_FAILED` (Учитывается для автоматической приостановки) | На момент расчёта на балансе не хватило баллов, поэтому результат не был возвращён | Пополните баланс и создайте новую задачу | | `ERROR_NO_SUCH_CAPCHA_ID` | Задача больше не действительна | Прекратите опрос (polling) этой задачи и создайте новую | | `ERROR_RECAPTCHA_TIMEOUT` | Время распознавания капчи истекло; баллы возвращены | Создайте новую задачу | ### Параметры целевого сайта | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_RECAPTCHA_INVALID_SITEKEY` (Кешируется, не ведёт к приостановке) | `websiteKey` недействителен | Заново найдите sitekey на странице (см. руководства по поиску параметров). Идентичные запросы в течение срока кеширования сразу возвращают эту ошибку с `cached: true` | | `ERROR_RECAPTCHA_INVALID_DOMAIN` (Кешируется, не ведёт к приостановке) | Домен в `websiteURL` не соответствует `websiteKey` | Укажите в `websiteURL` адрес страницы, на которой отображается капча | | `ERROR_INVALID_KEY_TYPE` (Кешируется, не ведёт к приостановке) | Sitekey относится к другой капче, например ключ v3 использован с типом задачи для v2 | Сначала определите тип капчи (см. «Определение типа капчи») и выберите соответствующий тип задачи; для невидимой версии v2 укажите `isInvisible` | | `ERROR_DOMAIN_NOT_ALLOWED` (Кешируется, не ведёт к приостановке) | Этот сайт не поддерживается | Попробуйте другой тип задачи для той же капчи или обратитесь в поддержку | | `ERROR_HIGH_DEMAND_DOMAIN` (Учитывается для автоматической приостановки) | Этот сайт не поддерживается | Прекратите отправлять задачи для этого сайта и обратитесь в поддержку | | `ERROR_FAILED_LOADING_WIDGET` | Не удалось загрузить капчу с указанными параметрами | Проверьте `websiteURL` и `websiteKey`; для типов задач с собственным прокси убедитесь, что прокси имеет доступ к сайту | ### Изображения | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_ZERO_CAPTCHA_FILESIZE` (Учитывается для автоматической приостановки) | Изображение пустое или слишком маленькое | Убедитесь, что данные Base64 переданы полностью и без префикса `data:image/...;base64,` | | `ERROR_TOO_BIG_CAPTCHA_FILESIZE` (Учитывается для автоматической приостановки) | Изображение слишком большое | Сожмите или уменьшите изображение; размер всего тела запроса не должен превышать 6 MB | | `ERROR_IMAGE_TYPE_NOT_SUPPORTED` (Учитывается для автоматической приостановки) | Формат изображения не поддерживается или это изображение не подходит для данного типа задачи. Одного такого случая достаточно, чтобы приостановить ключ на 30 минут | Используйте JPG или PNG и убедитесь, что изображение соответствует типу задачи, например для распознавания изображений reCAPTCHA нужен размер 100x100, 300x300 или 450x450 | | `ERROR_ILLEGAL_IMAGE` (Учитывается для автоматической приостановки) | Размер изображения не соответствует требованиям этого типа задачи | Измените размер изображения согласно описанию на странице типа задачи | | `ERROR_PARSE_IMAGE_FAIL` | Не удалось декодировать изображение, часто из-за того, что Base64 обрезан или содержит префикс | Проверьте кодировку Base64 и удалите префикс `data:` и переносы строк | | `ERROR_UNKNOWN_QUESTION` | Значение `question` указано неверно или этот вопрос пока не поддерживается | Сверьтесь со списком вопросов на странице типа задачи. Если вопрос не поддерживается, обратитесь в поддержку; новые вопросы обычно добавляются в течение 3 рабочих дней | | `ERROR_UNKNOW_450x450_QUESTION` | Этот вопрос пока не поддерживается для изображений 4x4 (450x450) | Обновите проверку на странице, чтобы получить другой вопрос | ### Прокси | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_PROXY_CONNECT_REFUSED` | Прокси отклонил подключение | Проверьте адрес, порт и протокол прокси и убедитесь, что он принимает внешние подключения (это не должен быть локальный адрес, например 127.0.0.1) | | `ERROR_PROXY_CONNECT_TIMEOUT` | Время подключения к прокси истекло | Используйте более надёжный прокси | | `ERROR_PROXY_READ_TIMEOUT` | Время чтения данных через прокси истекло | Используйте более быстрый прокси | | `ERROR_PROXY_BANNED` | Прокси недоступен или его IP заблокирован целевым сайтом | Используйте другой прокси | | `ERROR_PROXY_INCORRECT` | Параметры прокси имеют неверный формат | Проверьте формат `proxyType`, `proxyAddress`, `proxyPort` (или строки `proxy`) | | `ERROR_PROXY_TRANSPARENT` | Прокси является прозрачным и раскрывает реальный IP | Используйте анонимный (элитный) прокси | | `ERROR_PROXY_NOT_AUTHORISED` | Логин или пароль прокси указаны неверно | Проверьте `proxyLogin` и `proxyPassword` (или учётные данные в строке `proxy`) | | `ERROR_PROXY_TLS_ERROR` | Не удалось выполнить TLS-рукопожатие с прокси, часто из-за неверного `proxyType` (например, указан https для http-прокси) | Проверьте протокол прокси | | `ERROR_PROXY_CONNECTION_FAILED` | Не удалось подключиться к прокси-серверу | Проверьте адрес и порт прокси и убедитесь, что прокси работает | ### Сервер | Код ошибки | Значение | Что делать | | --- | --- | --- | | `ERROR_SERVICE_UNAVALIABLE` | Сервис временно недоступен (в коде ошибки используется написание `UNAVALIABLE`) | Повторите попытку позже; если ошибка не исчезает, обратитесь в поддержку | | `ERROR_INTERNAL_SERVER_ERROR` | Внутренняя ошибка сервера | Повторите попытку позже; если ошибка повторяется, обратитесь в поддержку и укажите `taskId` | | `ERROR_UNKNOWN` | Неклассифицированная ошибка | Повторите попытку позже; если ошибка повторяется, обратитесь в поддержку и укажите `taskId` | ## Дополнительные поля В ответах на некоторые ошибки есть дополнительные поля: | Поле | Где встречается | Описание | | --- | --- | --- | | `retryAfter` | `ERROR_IP_BLOCKED_5MIN`, кэшированные ошибки | Сколько секунд осталось ждать | | `blockReason` | `ERROR_IP_BLOCKED_5MIN` | Код ошибки, вызвавшей приостановку | | `blockDetail` | `ERROR_IP_BLOCKED_5MIN` | Тип, URL и sitekey запросов, вызвавших приостановку, — для удобства поиска причины | | `cached` | Кэшированные ошибки | `true` означает, что это кэшированный результат, распознавание не выполнялось | | `badRequest` | Кэшированные ошибки | Параметры, попавшие в кэш | | `limit` | `ERROR_THREADS_MAXIMUM` | Ваш текущий лимит параллельных задач | Правила выбора языка `errorDescription` описаны в разделе [Запросы и ответы](https://docs.yescaptcha.com/ru/api/overview.md). --- # Лимит параллельных задач и автоматическая приостановка > Лимит параллельных задач YesCaptcha (ERROR_THREADS_MAXIMUM, баллы не списываются, в приостановку не засчитывается), автоматическая приостановка при большом числе ошибок (100 за минуту — на 5 минут, ERROR_IP_BLOCKED_5MIN) и кэш неверных параметров (cached). Source: https://docs.yescaptcha.com/ru/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/ Чтобы распознавание оставалось быстрым для всех пользователей, в YesCaptcha действуют три защитных правила: **число одновременно обрабатываемых задач** ограничено для каждого аккаунта (лимит параллельных задач); `clientKey`, который за короткое время дал **слишком много ошибок, приостанавливается** на несколько минут (автоматическая приостановка); **параметры, уже признанные неверными**, в течение некоторого времени сразу возвращают прежнюю ошибку (кэш неверных параметров). Во всех трёх случаях баллы не списываются. ## Лимит параллельных задач Мы ограничиваем число задач, которые аккаунт обрабатывает одновременно, отдельно для каждого типа задачи. Ограничивается число параллельных задач, а не число запросов в минуту. - Задача считается «в обработке» с момента вызова `createTask` до возврата ответа на этот вызов. Типы распознавания изображений возвращают результат прямо в `createTask`, поэтому **число параллельных задач ≈ число задач в секунду × время на одну задачу**. Например, при 0.5 секунды на задачу и 40 задачах в секунду получается примерно 20 параллельных задач. - Запросы одного аккаунта суммируются; каждый тип задачи считается отдельно. - Запросы сверх лимита сразу получают `ERROR_THREADS_MAXIMUM`, а в поле `limit` указан ваш текущий лимит. **Баллы не списываются, и такие запросы не засчитываются в автоматическую приостановку.** - Если серверы распознавания перегружены, у аккаунта, который занимает больше всего времени распознавания, лимит для этого типа задачи **временно уменьшается вдвое и автоматически восстанавливается через 10 минут**. Это только ограничение скорости, аккаунт не приостанавливается. - Если нужен более высокий лимит, [свяжитесь с поддержкой](https://docs.yescaptcha.com/ru/help/contact.md). Лимиты по умолчанию для каждого типа будут опубликованы на этой странице и в [журнале обновлений сервиса](https://docs.yescaptcha.com/ru/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 } ``` (Числа в примере приведены только для иллюстрации.) ### Рекомендации 1. Ограничивайте в программе число запросов, которые одновременно ждут результата, например с помощью семафора (Semaphore) или пула потоков фиксированного размера, а не только число запросов в секунду. 2. Получив `ERROR_THREADS_MAXIMUM`, дождитесь возврата уже отправленных запросов и только потом отправляйте новые либо подождите 1–2 секунды и повторите. Не повторяйте запрос сразу в цикле. 3. Отправляйте пакеты задач равномерно, не запускайте десятки тысяч задач одновременно. Пример на 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 ``` ## Автоматическая приостановка Если `clientKey` за короткое время отправляет много запросов с ошибками, создание задач для него автоматически приостанавливается: | Условие срабатывания | Длительность приостановки | | --- | --- | | 100 перечисленных ниже ошибок в течение одной календарной минуты | 5 минут | | Одна ошибка `ERROR_IMAGE_TYPE_NOT_SUPPORTED` | 30 минут | | 1,000 попаданий в «кэш неверных параметров» в течение одной календарной минуты | 5 минут | Ошибки, которые засчитываются в приостановку: - [`ERROR_REQUEST_FORMATS`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_REQUEST_FORMATS) - [`ERROR_TASK_ABSENT`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_TASK_ABSENT) - [`ERROR_TASK_NOT_SUPPORTED`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_TASK_NOT_SUPPORTED) - [`ERROR_KEY_DOES_NOT_EXIST`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_KEY_DOES_NOT_EXIST) - [`ERROR_KEY_EXPIRED`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_KEY_EXPIRED) - [`ERROR_TASKID_INVALID`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_TASKID_INVALID) - [`ERROR_SETTLEMENT_FAILED`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_SETTLEMENT_FAILED) - [`ERROR_HIGH_DEMAND_DOMAIN`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_HIGH_DEMAND_DOMAIN) - [`ERROR_ZERO_CAPTCHA_FILESIZE`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_ZERO_CAPTCHA_FILESIZE) - [`ERROR_TOO_BIG_CAPTCHA_FILESIZE`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_TOO_BIG_CAPTCHA_FILESIZE) - [`ERROR_IMAGE_TYPE_NOT_SUPPORTED`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_IMAGE_TYPE_NOT_SUPPORTED) - [`ERROR_ILLEGAL_IMAGE`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_ILLEGAL_IMAGE) `ERROR_THREADS_MAXIMUM`, возвращаемая при превышении лимита параллельных задач аккаунта (с полем `limit`), не засчитывается; одноимённая ошибка, возвращаемая при перегрузке сервиса распознавания (без `limit`), засчитывается. Не засчитываются ошибки распознавания (`ERROR_CAPTCHA_UNSOLVABLE`), нехватка баланса (`ERROR_ZERO_BALANCE`), отсутствие обязательных полей (`ERROR_REQUIRED_FIELDS`), неподдерживаемый вопрос (`ERROR_UNKNOWN_QUESTION`) и подобные. Во время приостановки: - Затрагиваются только `createTask` и `getBalance`, они возвращают `ERROR_IP_BLOCKED_5MIN`. `getTaskResult` работает как обычно: результаты задач, созданных до приостановки, можно получить. - В ответе есть `retryAfter` (сколько секунд осталось), `blockReason` (код ошибки, вызвавшей приостановку) и `blockDetail` (тип, URL и sitekey таких запросов); по ним можно исправить программу. - Дальнейшая отправка запросов не продлевает приостановку. Она снимается автоматически по истечении срока, обращаться в поддержку не нужно. - В Панели на [yescaptcha.com](https://yescaptcha.com/) на странице «Обзор» можно увидеть записи о приостановках за последние 24 часа. ```json { "errorId": 1, "errorCode": "ERROR_IP_BLOCKED_5MIN", "errorDescription": "...", "retryAfter": 182, "blockReason": "ERROR_TASK_NOT_SUPPORTED" } ``` ## Кэш неверных параметров Некоторые ошибки определяются параметрами запроса, поэтому при повторной отправке тех же параметров результат не изменится: - [`ERROR_RECAPTCHA_INVALID_SITEKEY`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_RECAPTCHA_INVALID_SITEKEY) - [`ERROR_RECAPTCHA_INVALID_DOMAIN`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_RECAPTCHA_INVALID_DOMAIN) - [`ERROR_INVALID_KEY_TYPE`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_INVALID_KEY_TYPE) - [`ERROR_DOMAIN_NOT_ALLOWED`](https://docs.yescaptcha.com/ru/api/errors.md#ERROR_DOMAIN_NOT_ALLOWED) Эти ошибки не засчитываются в автоматическую приостановку, а кэшируются на уровне всего сервиса: после первого определения — на 2 минуты, а если в течение часа ошибка подтверждается повторно — на 10 минут. Пока кэш действует, такой же запрос (с тем же типом задачи и `websiteKey` или с тем же доменом сайта) сразу возвращает прежнюю ошибку, баллы не списываются, а в ответе есть `"cached": true`, `retryAfter` (сколько секунд осталось до конца кэширования) и `badRequest` (параметры, попавшие в кэш). Если исправить `websiteKey` или сменить тип задачи, изменения вступают в силу сразу. ## Чем отличаются лимит параллельных задач и автоматическая приостановка | | Лимит параллельных задач | Автоматическая приостановка | | --- | --- | --- | | Причина | Слишком много одновременно обрабатываемых задач | Слишком много запросов с ошибками за короткое время | | Проявление | Отклоняются только запросы сверх лимита, `ERROR_THREADS_MAXIMUM` | Для этого `clientKey` приостанавливается создание задач, `ERROR_IP_BLOCKED_5MIN` | | Восстановление | Новые запросы можно отправлять, как только предыдущие обработаны; вдвое уменьшенный лимит восстанавливается через 10 минут | Снимается автоматически по истечении срока | | Списание баллов | Нет | Нет | --- # Типы задач и цены > Цены (в баллах, 1,000 баллов = ¥1) и способ возврата результата для всех публичных типов задач YesCaptcha: токены для reCAPTCHA, hCaptcha и Turnstile, Cookie для страницы проверки Cloudflare, результат распознавания для текстовых капч на изображениях и для распознавания изображений. Source: https://docs.yescaptcha.com/ru/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/ За каждую задачу списывается фиксированное количество баллов в зависимости от типа (1,000 баллов = ¥1). Если распознавание не удалось или истекло время ожидания, баллы автоматически возвращаются. В таблице ниже — все публичные типы задач, по названию можно искать. Машиночитаемая версия: [/data/task-types.json](https://docs.yescaptcha.com/data/task-types.json). | Капча | Тип задачи | Цена | Режим | | --- | --- | --- | --- | | [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) | `NoCaptchaTaskProxyless` | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | | [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) | `RecaptchaV2TaskProxyless` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) | `NoCaptchaTask` Свой прокси | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | | [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) | `RecaptchaV2EnterpriseTaskProxyless` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) | `RecaptchaV2EnterpriseTask` Свой прокси | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxyless` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxylessM1` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxylessM1S7` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | | [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) | `RecaptchaV3TaskProxylessM1S9` | $5.25 / 1k; 35 pts/задача · ¥35 / 1k | Асинхронный | | [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) | `RecaptchaV3EnterpriseTask` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) | `RecaptchaV3EnterpriseTaskM1` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md) | `HCaptchaTaskProxyless` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | | [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md) | `HCaptchaTaskProxylessM1` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | | [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md) | `HCaptchaTask` Свой прокси | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | | [Cloudflare Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md) | `TurnstileTaskProxyless` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | [Cloudflare Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md) | `TurnstileTaskProxylessM1` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | | [Cloudflare Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md) | `TurnstileTask` Свой прокси | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | [Страница проверки Cloudflare](https://docs.yescaptcha.com/ru/tasks/cloudflare-challenge.md) | `CloudFlareTaskS2` Свой прокси | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | [Страница проверки Cloudflare](https://docs.yescaptcha.com/ru/tasks/cloudflare-challenge.md) | `CloudFlareTaskS3` Свой прокси | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | [Распознавание текста на изображении](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) | `ImageToTextTaskOcrBase` | $0.30 / 1k; 2 pts/задача · ¥2 / 1k | Синхронный | | [Распознавание текста на изображении](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) | `ImageToTextTaskMuggle` | $0.30 / 1k; 2 pts/задача · ¥2 / 1k | Синхронный | | [Распознавание текста на изображении](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) | `ImageToTextTask` | $0.60 / 1k; 4 pts/задача · ¥4 / 1k | Асинхронный | | [Распознавание текста на изображении](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) | `ImageToTextTaskM1` | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | | [Распознавание изображений reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md) | `ReCaptchaV2Classification` | $0.90 / 1k; 6 pts/задача · ¥6 / 1k | Синхронный | | [Распознавание изображений hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha-classification.md) | `HCaptchaClassification` | $1.20 / 1k; 8 pts/задача · ¥8 / 1k | Синхронный | | [Распознавание изображений FunCaptcha](https://docs.yescaptcha.com/ru/tasks/funcaptcha-classification.md) | `FunCaptchaClassification` | $0.45 / 1k; 3 pts/задача · ¥3 / 1k | Синхронный | | [Распознавание изображений AWS WAF / bCaptcha](https://docs.yescaptcha.com/ru/tasks/aws-bcaptcha-classification.md) | `AwsClassification` | $1.20 / 1k; 8 pts/задача · ¥8 / 1k | Синхронный | | [Распознавание изображений AWS WAF / bCaptcha](https://docs.yescaptcha.com/ru/tasks/aws-bcaptcha-classification.md) | `bCaptchaClassification` | $1.20 / 1k; 8 pts/задача · ¥8 / 1k | Синхронный | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67 (2026-10-27). Списание за задачи производится в баллах: 1,000 баллов = ¥1 при пополнении в CNY; пополнения в долларах США (PayPal, криптовалюта) конвертируются в CNY по курсу на момент платежа, а затем в баллы. ## Как выбрать | Что вам нужно | Какой тип использовать | Что возвращается | | --- | --- | --- | | Получить токен и сразу отправить его, не кликая по изображениям | [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md), [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md), [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md), [Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md) | Токен, асинхронно | | Пройти страницу проверки Cloudflare «Подождите…» | [Страница проверки Cloudflare](https://docs.yescaptcha.com/ru/tasks/cloudflare-challenge.md) | Cookie, User-Agent и содержимое страницы, асинхронно | | Самостоятельно кликать по изображениям в браузере | [Распознавание изображений reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md), [распознавание изображений hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha-classification.md), [распознавание изображений FunCaptcha](https://docs.yescaptcha.com/ru/tasks/funcaptcha-classification.md), [распознавание изображений AWS WAF / bCaptcha](https://docs.yescaptcha.com/ru/tasks/aws-bcaptcha-classification.md) | На какие изображения или в какое место нужно кликнуть, синхронно | | Распознать символы на изображении | [Распознавание текста на изображении](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) | Текст, в большинстве случаев синхронно | Не знаете, какая у вас капча? См. [Как определить тип капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md). ## Как устроены названия - **`Proxyless`**: капча загружается через нашу сеть, прокси не нужен. Типы без `Proxyless` в названии (например, `NoCaptchaTask`, `HCaptchaTask`) работают через ваш собственный прокси, поэтому нужно передавать поля прокси; подходят, когда целевой сайт проверяет IP посетителя. - **Суффиксы вроде `M1`**: другой маршрут для той же капчи, параметры те же, цена другая. Если один маршрут проходит недостаточно часто, попробуйте другой; они также могут служить резервом друг для друга. - **`Classification`**: распознавание изображений; возвращает, куда кликнуть, а не токен. - **`Enterprise`**: reCAPTCHA Enterprise. ## Примечания - Распознавание изображений reCAPTCHA v2 оплачивается по размеру изображения, а распознавание изображений hCaptcha не списывает баллы, если цель не найдена; подробнее на соответствующих страницах. - Цены указаны на этой странице. Баллы списываются только за создание задач, запросы результата не тарифицируются. Правила тарификации: [Тарификация и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md). --- # 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) --- # reCAPTCHA v3 > Получение токенов reCAPTCHA v3 (включая Enterprise) через YesCaptcha: как заполнять pageAction, типы с фиксированной оценкой 0.7 и 0.9, типы задач и цены, параметры, примеры и формат результата. Source: https://docs.yescaptcha.com/ru/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 нет ни флажка, ни изображений: страница оценивает посетителя в фоновом режиме. YesCaptcha возвращает токен (`gRecaptchaResponse`), который нужно отправить на целевой сайт. `RecaptchaV3TaskProxyless` стоит 20 pts (≈ $3.00 / 1k) за задачу и работает асинхронно: сначала `createTask`, затем `getTaskResult` каждые 5 секунд. При ошибке распознавания или тайм-ауте баллы возвращаются автоматически. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) Тело запроса — JSON, авторизация через `clientKey`. Результат запрашивайте на том же endpoint, где была создана задача. ## Когда использовать - В исходном коде страницы есть `grecaptcha.execute(...)` или загружается `recaptcha/api.js?render=КЛЮЧ_САЙТА`: обычная версия v3. - Вызывается `grecaptcha.enterprise.execute(...)` или загружается `recaptcha/enterprise.js`: Enterprise-версия v3, используйте `RecaptchaV3EnterpriseTask` или `RecaptchaV3EnterpriseTaskM1`. Как определить тип: [Определение типа капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md). ## Типы и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `RecaptchaV3TaskProxyless` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | | `RecaptchaV3TaskProxylessM1` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | | `RecaptchaV3TaskProxylessM1S7` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | Запрашивает оценку 0.7; дополнительные параметры не нужны | | `RecaptchaV3TaskProxylessM1S9` | $5.25 / 1k; 35 pts/задача · ¥35 / 1k | Асинхронный | Запрашивает оценку 0.9; дополнительные параметры не нужны | | `RecaptchaV3EnterpriseTask` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | | | `RecaptchaV3EnterpriseTaskM1` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. - У `RecaptchaV3TaskProxyless` и `RecaptchaV3TaskProxylessM1` одинаковые параметры, но разные маршруты, поэтому они могут служить резервом друг для друга. - Если целевой сайт требует высокую оценку, используйте `RecaptchaV3TaskProxylessM1S7` (0.7) или `RecaptchaV3TaskProxylessM1S9` (0.9): дополнительные параметры не нужны. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `websiteURL` | string | Да | Полный URL страницы, на которой показывается капча. Укажите сайт, на котором вы видите капчу, а не домен поставщика капчи | | `websiteKey` | string | Да | Ключ сайта (sitekey), его можно найти в исходном коде страницы или в сетевых запросах; обычно не меняется | | `pageAction` | string | Нет | Значение action для reCAPTCHA v3; оно должно совпадать со значением, которое страница передаёт в `grecaptcha.execute`, иначе токен может быть отклонён | `pageAction` должен совпадать со значением `action`, которое страница передаёт в `grecaptcha.execute(КЛЮЧ_САЙТА, {action: '...'})`. Если указать неверное значение, сайт может отклонить токен. Как его найти: [Поиск параметров reCAPTCHA](https://docs.yescaptcha.com/ru/guides/find-recaptcha-parameters.md). ## Пример запроса 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); ``` Замените `websiteURL`, `websiteKey` и `pageAction` значениями целевого сайта. ## Результат ```json { "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." } } ``` | Поле | Тип | Описание | | --- | --- | --- | | `gRecaptchaResponse` | string | Токен, который нужно отправить на целевой сайт. Одноразовый, действителен около 120 секунд; используйте его в течение 60 секунд | Пока задача выполняется, возвращается `{"errorId": 0, "status": "processing"}`: повторите запрос через 5 секунд. При ошибке действуйте по `errorCode`, см. [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md). Как отправить полученный токен, см. [Прохождение reCAPTCHA с помощью токена](https://docs.yescaptcha.com/ru/guides/submit-recaptcha-token.md). ## Частые вопросы ### Почему сайт иногда не принимает токен? В v3 решение принимает целевой сайт на основе оценки, а порог он может менять в любой момент, поэтому проходит не каждый токен. Убедитесь, что `pageAction` указан верно; если сайт требует высокую оценку, попробуйте `M1S7` или `M1S9`; можно также сравнить другие типы из этого семейства. ### Как заполнять Enterprise-версию v3? Так же, как обычную: `websiteURL`, `websiteKey`, `pageAction`, только тип нужно заменить на `RecaptchaV3EnterpriseTask` или `RecaptchaV3EnterpriseTaskM1`. ### Как долго токен действителен? Токен одноразовый и действует около 120 секунд; отправляйте его в течение 60 секунд. ## Связанные руководства - [Определение типа капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md) - [Поиск параметров reCAPTCHA](https://docs.yescaptcha.com/ru/guides/find-recaptcha-parameters.md) (в том числе как найти `pageAction`) - [Прохождение reCAPTCHA с помощью токена](https://docs.yescaptcha.com/ru/guides/submit-recaptcha-token.md) --- # hCaptcha > Получение токена hCaptcha через YesCaptcha: HCaptchaTaskProxyless, HCaptchaTaskProxylessM1 и HCaptchaTask с собственным прокси, как заполнять userAgent и rqdata и как использовать возвращаемый respKey. Source: https://docs.yescaptcha.com/ru/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/ Задача hCaptcha возвращает токен (`gRecaptchaResponse`). Отправьте его на целевой сайт вместе с возвращённым `userAgent` (а иногда и `respKey`), и проверка будет пройдена. `HCaptchaTaskProxyless` стоит 30 pts (≈ $4.50 / 1k) за задачу, `HCaptchaTask` с собственным прокси — 15 pts (≈ $2.25 / 1k) за задачу. Обе асинхронные: сначала `createTask`, затем `getTaskResult` каждые 5 секунд. При ошибке распознавания или таймауте баллы возвращаются автоматически. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) Тело запроса — JSON, авторизация через `clientKey`. Результат запрашивайте на том же endpoint, где создали задачу. ## Когда использовать На странице есть флажок hCaptcha «Я человек» или появляется задание с картинками hCaptcha. Если нужно получить токен и сразу отправить его, используйте типы с этой страницы. Если хотите сами кликать по картинкам в браузере, см. [распознавание изображений hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha-classification.md). > **Заметка:** Процент прохождения hCaptcha сильно зависит от сайта, поэтому сначала протестируйте на небольшой партии. ## Типы и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `HCaptchaTaskProxyless` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | | | `HCaptchaTaskProxylessM1` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | Те же параметры, что у HCaptchaTaskProxyless, но другой маршрут; можно использовать любой из них как резервный | | `HCaptchaTask` | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | Свой прокси | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. - У `HCaptchaTaskProxyless` и `HCaptchaTaskProxylessM1` одинаковые параметры, но разные линии, поэтому их можно использовать как резерв друг для друга. - `HCaptchaTask` загружает капчу через ваш собственный прокси, поэтому нужно передать поля прокси. Используйте его, когда целевой сайт проверяет IP посетителя. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `websiteURL` | string | Да | Полный URL страницы, на которой показывается капча. Укажите сайт, на котором вы видите капчу, а не домен поставщика капчи | | `websiteKey` | string | Да | Ключ сайта hCaptcha (sitekey), обычно в формате UUID | | `userAgent` | string | Нет | User-Agent браузера. Рекомендуется указывать, но принимается только значение, возвращаемое `GET https://api.yescaptcha.com/useragent`; отправляйте токен с `userAgent` из результата | | `isInvisible` | boolean | Нет | Передайте true для невидимого варианта; в остальных случаях не передавайте | | `rqdata` | string | Нет | rqdata для Enterprise-версии hCaptcha; требуется некоторым сайтам, обычно находится в запросе, который загружает капчу | | `proxyType` | string | Некоторые типы | Протокол прокси: `http`, `https`, `socks4` или `socks5` (Обязательно для HCaptchaTask) | | `proxyAddress` | string | Некоторые типы | IP-адрес или имя хоста прокси. Локальные или частные адреса, например 127.0.0.1 или 192.168.x.x, не подойдут, так как наши серверы не могут до них достучаться (Обязательно для HCaptchaTask) | | `proxyPort` | integer | Некоторые типы | Порт прокси (Обязательно для HCaptchaTask) | | `proxyLogin` | string | Нет | Имя пользователя прокси, если прокси требует аутентификации (только HCaptchaTask) | | `proxyPassword` | string | Нет | Пароль прокси, если прокси требует аутентификации (только HCaptchaTask) | - В `websiteURL` укажите страницу, на которой появляется капча, **а не** hcaptcha.com. - `userAgent` рекомендуется указывать, причём только значение, которое возвращает [/useragent](https://docs.yescaptcha.com/ru/api/useragent.md). - `rqdata`: требуется для корпоративной версии hCaptcha (например, на некоторых социальных сетях и чат-сайтах); обычно его можно найти в запросе, который загружает капчу. Для обычных сайтов не передавайте. Как найти параметры, см. [Поиск параметров hCaptcha](https://docs.yescaptcha.com/ru/guides/find-hcaptcha-parameters.md). ## Пример запроса 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); ``` С собственным прокси: 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" } } ``` ## Результат ```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..." } } ``` | Поле | Тип | Описание | | --- | --- | --- | | `gRecaptchaResponse` | string | Токен, который нужно отправить на целевой сайт. Одноразовый, действителен около 120 секунд; используйте его в течение 60 секунд | | `userAgent` | string | User-Agent, использованный при получении токена. Используйте это значение при отправке токена, даже если оно отличается от переданного вами | | `respKey` | string | Значение, которое некоторые сайты требуют отправлять вместе с токеном; если оно есть, отправьте его | При отправке: 1. Подставьте токен в поле `h-captcha-response` на странице (и в `g-recaptcha-response`, если оно есть) или в поле, которое требует API целевого сайта. 2. При отправке запроса используйте в качестве User-Agent возвращённый `userAgent`. 3. Если вернулся `respKey`, отправьте его вместе с токеном так, как требует сайт. Пока задача выполняется, возвращается `{"errorId": 0, "status": "processing"}`; повторите запрос через 5 секунд. Ошибки обрабатывайте по `errorCode`, см. [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md). ## Частые вопросы ### Почему процент прохождения нестабильный? hCaptcha оценивает настройки сайта, IP посетителя и окружение браузера, поэтому процент прохождения зависит от сайта. Убедитесь, что используете возвращённый `userAgent`. Для сайтов, чувствительных к IP, берите `HCaptchaTask` с собственным прокси и отправляйте токен через тот же прокси. Также можно сравнить результаты с `HCaptchaTaskProxylessM1`. ### Как долго действует токен? Токен одноразовый и действует около 120 секунд, поэтому отправьте его сразу после получения. ## Связанные руководства - [Поиск параметров hCaptcha](https://docs.yescaptcha.com/ru/guides/find-hcaptcha-parameters.md) - [hCaptcha: имитация кликов по изображениям (Selenium)](https://docs.yescaptcha.com/ru/guides/hcaptcha-click-selenium.md) --- # Cloudflare Turnstile > Получение токена Cloudflare Turnstile через YesCaptcha: TurnstileTaskProxyless, TurnstileTaskProxylessM1 и TurnstileTask со своим прокси, параметры, примеры и результат; чем Turnstile отличается от страницы проверки Cloudflare. Source: https://docs.yescaptcha.com/ru/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/ Задача Cloudflare Turnstile возвращает токен (`token`), который нужно отправить на целевой сайт для прохождения проверки. `TurnstileTaskProxyless` стоит 25 pts (≈ $3.75 / 1k) за задачу и работает асинхронно: сначала `createTask`, затем `getTaskResult` каждые 5 секунд. При неудачном распознавании и по тайм-ауту баллы возвращаются автоматически. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) Тело запроса — JSON, авторизация по `clientKey`. Результат нужно запрашивать на том же endpoint, где создана задача. ## Когда использовать В форме на странице встроено окно проверки Cloudflare («Подтвердите, что вы человек»), а страница загружает скрипт `challenges.cloudflare.com/turnstile`. Если Cloudflare закрывает всю страницу и показывает «Подождите…» или «Проверяем ваш браузер», это страница проверки Cloudflare, а не Turnstile. Используйте [Страница проверки Cloudflare](https://docs.yescaptcha.com/ru/tasks/cloudflare-challenge.md). Различия описаны в разделе [Как определить тип капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md). ## Типы задач и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `TurnstileTaskProxyless` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | | | `TurnstileTaskProxylessM1` | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | | | `TurnstileTask` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | Свой прокси | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. - `TurnstileTaskProxyless` и `TurnstileTaskProxylessM1` имеют одинаковые параметры, но разные маршруты; их можно использовать как резервные друг для друга. - `TurnstileTask` загружает капчу через ваш собственный прокси, поэтому нужно передать поля прокси. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `websiteURL` | string | Да | Полный URL страницы, на которой показывается капча. Укажите сайт, на котором вы видите капчу, а не домен поставщика капчи | | `websiteKey` | string | Да | Ключ сайта Turnstile (sitekey), обычно начинается с 0x | | `pageAction` | string | Нет | Значение `action`, которое страница передаёт в Turnstile (параметр `turnstile.render` или `data-action` на элементе виджета), например `login`. В большинстве случаев не требуется; добавляйте его, только если задачи продолжают завершаться неудачей | | `data` | string | Нет | Значение `cData`, которое страница передаёт в Turnstile (параметр `turnstile.render` или `data-cdata` на элементе виджета), например `c0bd4b36-7419-4e18-83c6-378699f2a9a2`. В большинстве случаев не требуется; добавляйте его, только если задачи продолжают завершаться неудачей | | `proxyType` | string | Некоторые типы | Протокол прокси: `http`, `https`, `socks4` или `socks5` (Обязательно для TurnstileTask) | | `proxyAddress` | string | Некоторые типы | IP-адрес или имя хоста прокси. Локальные или частные адреса, например 127.0.0.1 или 192.168.x.x, не подойдут, так как наши серверы не могут до них достучаться (Обязательно для TurnstileTask) | | `proxyPort` | integer | Некоторые типы | Порт прокси (Обязательно для TurnstileTask) | | `proxyLogin` | string | Нет | Имя пользователя прокси, если прокси требует аутентификации (только TurnstileTask) | | `proxyPassword` | string | Нет | Пароль прокси, если прокси требует аутентификации (только TurnstileTask) | | `userAgent` | string | Нет | User-Agent браузера. Если в результате есть `userAgent`, используйте это значение при отправке токена (только TurnstileTask) | `websiteKey` обычно начинается с `0x`. Как его найти, см. [Поиск параметров Turnstile](https://docs.yescaptcha.com/ru/guides/find-turnstile-parameters.md). ### Если задача не проходит: pageAction и data В большинстве случаев достаточно `websiteURL` и `websiteKey`, эти два параметра не нужны. Если вы уверены, что `websiteURL` и `websiteKey` верны, а задача всё равно не проходит, проверьте, передаёт ли страница в Turnstile `action` и `cData` (параметры `turnstile.render` или атрибуты `data-action` и `data-cdata` на элементе окна проверки). Если передаёт, укажите их без изменений: - `pageAction`: `action` со страницы, например `login` - `data`: `cData` со страницы, например `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" } } ``` ## Пример запроса 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); ``` Замените `websiteURL` и `websiteKey` значениями целевого сайта. ## Результат ```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" } } ``` | Поле | Тип | Описание | | --- | --- | --- | | `token` | string | Токен, который нужно отправить на целевой сайт. Одноразовый; отправьте его как можно скорее | | `userAgent` | string | User-Agent, использованный при получении токена. Используйте это значение при отправке токена, даже если оно отличается от переданного вами | Подставьте `token` в поле `cf-turnstile-response` на странице (или в поле, которое требует API сайта) и отправьте запрос, используя возвращённый `userAgent` в качестве User-Agent. Пока задача выполняется, возвращается `{"errorId": 0, "status": "processing"}`; повторите запрос через 5 секунд. Ошибки обрабатывайте по `errorCode`, см. [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md). ## Частые вопросы ### Как долго действует токен? Токен одноразовый, отправляйте его как можно скорее после получения (токены Turnstile обычно истекают через несколько минут, это определяет Cloudflare). ### После отправки сайт всё равно не принимает токен Убедитесь, что `websiteURL` — это страница с окном проверки, `websiteKey` указан верно, а при отправке используется возвращённый `userAgent`. Если страница передаёт `action` и `cData`, добавьте их как `pageAction` и `data`, см. выше раздел «Если задача не проходит: pageAction и data». Если сайт дополнительно проверяет IP, используйте `TurnstileTask` и отправляйте токен через тот же прокси. ## Связанные руководства - [Как определить тип капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md) - [Поиск параметров Turnstile](https://docs.yescaptcha.com/ru/guides/find-turnstile-parameters.md) --- # Страница проверки Cloudflare > Как пройти страницу проверки Cloudflare («Just a moment...») через YesCaptcha и получить cf_clearance и другие cookie, User-Agent и содержимое страницы. Параметры CloudFlareTaskS2 и CloudFlareTaskS3, требования к прокси, результат, как его использовать и частые ошибки. Source: https://docs.yescaptcha.com/ru/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/ Страница проверки Cloudflare — это страница, которой Cloudflare закрывает весь сайт и показывает «Just a moment…» или «Checking your browser». YesCaptcha открывает страницу через ваш прокси, проходит проверку и возвращает cookie (например, `cf_clearance`), использованный User-Agent, заголовки запроса и ответа, а также HTML страницы после проверки. `CloudFlareTaskS2` стоит 25 pts (≈ $3.75 / 1k) за задачу, `CloudFlareTaskS3` — 20 pts (≈ $3.00 / 1k) за задачу. Параметры, результат и эффективность у обоих типов одинаковые, отличается только цена. Результат асинхронный: одна задача обычно занимает от 6 до 35 секунд, в зависимости от сайта время сильно различается. При неудаче или таймауте баллы возвращаются автоматически. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) ## Когда использовать - В исходном коде страницы есть `__cf_chl_rt_tk` или `cdn-cgi/challenge-platform`, а заголовок — `Just a moment...`: это страница проверки. Если на ней нужно поставить галочку «Verify you are human», подходит эта же страница документации. - Если проверка Cloudflare — это только виджет внутри формы, то это [Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md), и эта страница не нужна. - Если при запросе через requests или подобную библиотеку приходит 403 и «Just a moment…», а в браузере страница открывается, скорее всего вас блокирует только TLS-отпечаток. Достаточно библиотеки, имитирующей TLS-отпечаток браузера (например, curl\_cffi): проходить проверку не нужно. ## Типы и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `CloudFlareTaskS2` | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | Свой прокси | | `CloudFlareTaskS3` | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | Свой прокси | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `websiteURL` | string | Да | Полный URL страницы за проверкой. Должен быть публичным URL, начинающимся с `http://` или `https://`; частные IP-адреса и локальные или внутренние имена хостов, например `localhost`, отклоняются | | `proxy` | string | Да | Прокси одной строкой: `http://user:pass@proxy.example.com:8080` (HTTP-прокси, учётные данные необязательны) или `socks5://proxy.example.com:1080` (без учётных данных). Прокси `https://` и SOCKS5 с учётными данными не поддерживаются, локальные и частные адреса отклоняются. Все запросы к целевой странице идут через этот прокси | | `userAgent` | string | Нет | Обычно не указывайте. Используется только User-Agent настольного Chrome на Linux; все остальные (Windows, macOS, мобильные, другие браузеры) игнорируются. Для последующих запросов всегда используйте `user_agent` из результата | | `waitLoad` | boolean | Нет | По умолчанию false. Если true, после прохождения проверки задача ждёт, пока сетевая активность страницы утихнет, и только потом возвращает результат, поэтому в `content` попадает больше динамически загруженного содержимого; это занимает на несколько секунд больше | | `requiredCookies` | array | Нет | Имена cookie, которые обязательно нужно получить, в виде массива строк, например `["cf_clearance"]`. Если параметр задан, задача считается успешной, только когда получены все они; иначе возвращается `ERROR_CAPTCHA_UNSOLVABLE` и выполняется возврат баллов. Если параметр не задан, задача всё равно пытается получить `cf_clearance`, но считается успешной (и баллы списываются) с любыми другими полученными cookie, поэтому передайте его явно, если вам нужен `cf_clearance` | | `blockImage` | boolean | Нет | Если true, изображения на целевой странице не загружаются (кроме тех, которые нужны самой проверке Cloudflare), что экономит трафик прокси | | `postData` | object | Нет | Если параметр задан, он отправляется на `websiteURL` как обычная HTML-форма методом POST (`application/x-www-form-urlencoded`): каждый ключ — поле формы, значения отправляются как строки, например `{"name": "hi"}`. Должен быть объектом | ### Требования к прокси `proxy` обязателен, все запросы к целевой странице идут через этот прокси. `cf_clearance` привязан к выходному IP, поэтому и при последующих обращениях к сайту нужно использовать тот же прокси. | Формат | Поддержка | | --- | --- | | `http://user:pass@proxy.example.com:8080` | Поддерживается: http-прокси с логином и паролем | | `http://proxy.example.com:8080` | Поддерживается: http-прокси без логина и пароля | | `socks5://proxy.example.com:1080` | Поддерживается: socks5-прокси без логина и пароля; `socks5h://` обрабатывается как `socks5://` | | `socks5://user:pass@proxy.example.com:1080` | Не поддерживается, возвращается `ERROR_PROXY_INCORRECT`; если нужны логин и пароль, используйте http-прокси | | `https://proxy.example.com:443` и другие протоколы, а также адрес без порта | Не поддерживается, возвращается `ERROR_PROXY_INCORRECT` | | Локальные, внутренние и зарезервированные адреса вроде `127.0.0.1`, `192.168.x.x`, `10.x.x.x` или домены, которые разрешаются в такие адреса | Отклоняется, возвращается `ERROR_PROXY_BANNED` | > **Проверяется при создании задачи:** Если URL или прокси не проходят проверку, `createTask` сразу возвращает ошибку, баллы не списываются. Если к одному и тому же прокси не удаётся подключиться несколько раз за короткое время, то некоторое время создание задач с ним тоже будет сразу возвращать `ERROR_PROXY_BANNED`: смените прокси или повторите позже. ### User-Agent Обычно `userAgent` передавать не нужно. Проверку мы проходим десктопным Chrome под Linux, поэтому используется только User-Agent десктопного Chrome под Linux; остальные (Windows, macOS, мобильные устройства и другие браузеры) игнорируются: по результатам тестов, если реальное окружение браузера не совпадает с User-Agent, проверка Cloudflare не проходит. В последующих запросах всегда используйте `user_agent` из результата. ## Пример запроса 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"] } } ``` - Чтобы использовать `CloudFlareTaskS2`, измените только `type`, остальное оставьте как есть. - Если передан `requiredCookies` со значением `["cf_clearance"]`, то при отсутствии `cf_clearance` задача завершается ошибкой и баллы возвращаются. Если не передавать, задача считается успешной и баллы списываются, даже когда получены только другие cookie, но не `cf_clearance`. - Чтобы отправить форму, добавьте `postData`, например `{"name": "hi"}`: данные будут отправлены на `websiteURL` как POST-форма. После создания задачи вызывайте `getTaskResult` каждые 5 секунд; порядок такой же, как и у других асинхронных задач, см. [getTaskResult](https://docs.yescaptcha.com/ru/api/get-task-result.md). ## Результат ```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": "..." } } ``` Значения cookie и заголовки выше приведены для примера; ориентируйтесь на то, что вернёт API. | Поле | Тип | Описание | | --- | --- | --- | | `cookies` | object | Все cookie в браузере после прохождения проверки (объект «имя — значение»), обычно включают `cf_clearance`; если вы передали `requiredCookies`, в ответ входит каждый из них. Используйте их вместе с возвращённым `user_agent` и прокси, который вы указали | | `user_agent` | string | User-Agent, который браузер фактически использовал при прохождении проверки (десктопный Chrome на Linux). `cf_clearance` привязан к нему, поэтому используйте его во всех последующих запросах | | `request_headers` | object | Заголовки запроса, которые браузер отправил при последнем запросе целевой страницы; используйте их в последующих запросах | | `headers` | object | Заголовки ответа целевой страницы после прохождения проверки | | `content` | string | HTML-код целевой страницы после прохождения проверки | ## Как использовать результат 1. В последующих запросах используйте **одновременно** возвращённые `cookies`, возвращённый `user_agent` и тот же прокси, что был в задаче. `cf_clearance` привязан к User-Agent и выходному IP: если не совпадает хотя бы одно из трёх, страница проверки появится снова. 2. По возможности передавайте заголовки из `request_headers` и используйте TLS-отпечаток, совпадающий с браузерным (например, параметр `impersonate` в curl\_cffi). 3. У `cf_clearance` есть срок действия (его задаёт целевой сайт, на некоторых сайтах он достигает 1 часа). В течение этого срока проходить проверку повторно не нужно, но слишком частые запросы могут привести к блокировке IP со стороны Cloudflare. 4. Если нужно только содержимое страницы, используйте `content` напрямую, повторно запрашивать страницу не нужно. ## Частые ошибки За ошибки, возвращённые при создании задачи, баллы не списываются; если задача после создания завершилась неудачей или таймаутом, баллы возвращаются автоматически. API возвращает только код ошибки и общее описание, а конкретную причину можно найти в таблице ниже. | Код ошибки | Когда возвращается | Что делать | | --- | --- | --- | | `ERROR_REQUIRED_FIELDS` | При создании задачи: нет `websiteURL` или `proxy` | Добавьте оба обязательных поля | | `ERROR_ILLEGAL_PARAMETERS` | При создании задачи: `websiteURL` не является публичным адресом, начинающимся с `http://` / `https://`, `postData` не объект, `requiredCookies` не массив строк. При запросе результата: через прокси не удаётся разрешить домен целевого адреса | Исправьте параметры; проверьте написание URL и то, что прокси имеет доступ к этому сайту | | `ERROR_PROXY_INCORRECT` | При создании задачи: неверный формат прокси, нет порта, используется `https://`\-прокси или socks5 с логином и паролем | Исправьте запись по разделу «Требования к прокси» выше; если нужны логин и пароль, используйте http-прокси | | `ERROR_PROXY_BANNED` | При создании задачи: прокси — локальный, внутренний или зарезервированный адрес, либо к нему не удавалось подключиться несколько раз за короткое время. При запросе результата: Cloudflare целевого сайта сразу заблокировал IP этого прокси (страницы «Sorry, you have been blocked», «Access denied») | Смените прокси; чем качественнее IP, тем легче пройти проверку | | `ERROR_PROXY_CONNECT_REFUSED` | Не удаётся подключиться к прокси (отказ в соединении, домен прокси не разрешается) либо при открытии страницы через прокси соединение отклонено или сброшено | Проверьте адрес и порт прокси, убедитесь, что он работает и разрешает внешние подключения; если ошибка остаётся, смените прокси | | `ERROR_PROXY_CONNECT_TIMEOUT` | Таймаут при подключении к прокси или при открытии страницы через прокси | Используйте более быстрый и стабильный прокси | | `ERROR_PROXY_NOT_AUTHORISED` | Неверный логин или пароль прокси | Проверьте логин и пароль в `proxy`; специальные символы нужно закодировать (URL-кодирование) | | `ERROR_PROXY_TLS_ERROR` | Ошибка TLS-рукопожатия при открытии страницы через прокси | Убедитесь, что адрес, порт и протокол прокси указаны верно; если ошибка остаётся, смените прокси | | `ERROR_CAPTCHA_UNSOLVABLE` | Проверка не пройдена за отведённое время, после прохождения страница всё ещё остаётся страницей проверки, либо не получен cookie, указанный в `requiredCookies` | Сначала смените прокси и повторите; по отдельным сайтам можно обратиться в поддержку | | `ERROR_NO_SLOT_AVAILABLE` | При создании задачи: очередь заполнена. При запросе результата: задача слишком долго ждала в очереди и не началась, баллы возвращены | Подождите несколько секунд и создайте задачу заново | | `ERROR_TASK_TIMEOUT` | Задача не завершилась за отведённое время | Создайте задачу заново; постоянные таймауты обычно означают, что прокси слишком медленный | Полный список кодов ошибок: [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md). ## См. также - [Как определить тип капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md): чем страница проверки Cloudflare отличается от Turnstile - [Cloudflare Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md) --- # Распознавание текста на изображении > Распознавайте английские буквы и цифры на изображении с помощью YesCaptcha. ImageToTextTaskOcrBase и ImageToTextTaskMuggle возвращают результат синхронно; ImageToTextTask и ImageToTextTaskM1 работают асинхронно и поддерживают регистр, только цифры, арифметические выражения и ограничения длины. Доступны индивидуальные модели. Source: https://docs.yescaptcha.com/ru/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/ Отправьте изображение с символьной капчей в формате Base64 и получите английские буквы и цифры с изображения (`solution.text`). `ImageToTextTaskOcrBase` стоит 2 pts (≈ $0.30 / 1k) за изображение и работает синхронно: результат приходит в ответ на один запрос `createTask`. Если нужны требования к регистру, только цифры, арифметические выражения и т. п., используйте асинхронный `ImageToTextTask`. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) Тело запроса — JSON, авторизация через `clientKey`. ## Типы и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `ImageToTextTaskOcrBase` | $0.30 / 1k; 2 pts/задача · ¥2 / 1k | Синхронный | | | `ImageToTextTaskMuggle` | $0.30 / 1k; 2 pts/задача · ¥2 / 1k | Синхронный | Не поддерживает параметры case/numeric; чтобы выбрать пользовательскую модель, используйте project\_name | | `ImageToTextTask` | $0.60 / 1k; 4 pts/задача · ¥4 / 1k | Асинхронный | | | `ImageToTextTaskM1` | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. | Что нужно | Что использовать | | --- | --- | | Обычные капчи из букв и цифр, самый дешёвый и быстрый вариант | `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle` (синхронные) | | Распознавание моделью, обученной специально для вас | `ImageToTextTaskMuggle` с `project_name` | | Учёт регистра, только цифры, вычисление выражения, ограничение длины | `ImageToTextTask`, `ImageToTextTaskM1` (асинхронные) | У разных типов разные модели и линии, поэтому результат на одинаковых изображениях может отличаться. Протестируйте несколько типов и выберите лучший. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `body` | string | Да | Изображение в кодировке Base64 без префикса `data:image/...;base64,` и без переносов строк | | `project_name` | string | Нет | Название пользовательской модели, поддерживается только в `ImageToTextTaskMuggle`. Не передавайте, чтобы использовать общую модель для букв и цифр. Для пользовательской модели обратитесь в поддержку (только ImageToTextTaskMuggle) | | `phrase` | boolean | Нет | true означает, что ответ содержит хотя бы один пробел (только ImageToTextTask, ImageToTextTaskM1) | | `case` | boolean | Нет | true означает, что ответ чувствителен к регистру (только ImageToTextTask, ImageToTextTaskM1) | | `numeric` | integer | Нет | 0 — без требований; 1 — только цифры; 2 — без цифр (только ImageToTextTask, ImageToTextTaskM1) | | `math` | boolean | Нет | true означает, что на изображении математическое выражение, а ответом будет его результат (только ImageToTextTask, ImageToTextTaskM1) | | `minLength` | integer | Нет | Минимальная длина ответа; 0 означает без ограничения (только ImageToTextTask, ImageToTextTaskM1) | | `maxLength` | integer | Нет | Максимальная длина ответа; 0 означает без ограничения (только ImageToTextTask, ImageToTextTaskM1) | `body` — это Base64-кодировка файла изображения. Изображения WebP конвертируются автоматически. > **Осторожно:** Не добавляйте в Base64 префикс `data:image/...;base64,` и переводы строк. ## Пример запроса POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ImageToTextTaskOcrBase", "body": "BASE64_IMAGE" } } ``` Полный код (читает `captcha.png` из текущей директории): **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); ``` Асинхронная задача с требованиями: 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 } } ``` ## Результат Синхронные типы возвращают результат сразу в ответе на `createTask`: ```json { "errorId": 0, "status": "ready", "solution": { "text": "LMResm" }, "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b" } ``` Асинхронные типы (`ImageToTextTask`, `ImageToTextTaskM1`) сначала возвращают `taskId`, после чего каждые 5 секунд опрашивайте `getTaskResult`. Когда задача выполнена, `solution` имеет тот же формат. | Поле | Тип | Описание | | --- | --- | --- | | `text` | string | Распознанный текст | ## Индивидуальная модель Универсальная модель подходит для любых капч из букв и цифр, но её точность немного ниже, чем у модели, обученной специально. Если нужно распознавать изображения одного и того же вида, [свяжитесь с поддержкой](https://docs.yescaptcha.com/ru/help/contact.md), чтобы заказать индивидуальную модель, а затем указывайте её через `ImageToTextTaskMuggle` и `project_name`. ## Частые вопросы ### Списываются ли баллы, если распознано неверно? Для синхронных типов баллы списываются, как только результат получен, даже если он неверный. Попробуйте другой тип для сравнения или закажите индивидуальную модель. ### Получаю `ERROR_ZERO_CAPTCHA_FILESIZE` или `ERROR_PARSE_IMAGE_FAIL` Base64 изображения неполный, либо содержит префикс `data:` или переводы строк. Проверьте кодировку, см. [Коды ошибок](https://docs.yescaptcha.com/ru/api/errors.md). ## Связанные примеры - [Быстрый старт](https://docs.yescaptcha.com/ru/getting-started/quickstart.md): первый запрос с `ImageToTextTaskOcrBase` - [Примеры на Python](https://docs.yescaptcha.com/ru/samples/python.md) --- # Распознавание изображений reCAPTCHA v2 > Распознавание картиночных заданий reCAPTCHA v2 через YesCaptcha (ReCaptchaV2Classification): отправьте изображение 3x3, 4x4 или 1x1 и ID вопроса — синхронно получите ячейки, на которые нужно нажать; цена зависит от размера изображения; таблица ID вопросов. Source: https://docs.yescaptcha.com/ru/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` распознаёт картиночные задания reCAPTCHA v2: вы отправляете изображение и ID вопроса, в ответ получаете ячейки, на которые нужно нажать, а сами клики выполняет ваша программа в браузере. Токен он **не возвращает**. Ответ синхронный: результат приходит в одном запросе `createTask`. Изображение 3x3 или 4x4 стоит 6 pts (≈ $0.90 / 1k), маленькое изображение 1x1 дешевле (см. таблицу ниже). > **Совет:** Если не хотите писать логику кликов, используйте [расширение браузера](https://docs.yescaptcha.com/ru/extension.md) — оно автоматически кликает на основе этого же интерфейса. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) ## Типы и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `ReCaptchaV2Classification` | $0.90 / 1k; 6 pts/задача · ¥6 / 1k | Синхронный | 2 балла за плитку 1x1 (100x100); 6 баллов за 3x3 (300x300) и 4x4 (450x450) | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `image` | string | Да | Изображение задания в кодировке Base64 без префикса `data:` | | `question` | string | Да | ID вопроса, например `/m/0k4j`; см. «ID вопросов» на этой странице | | `confidence` | number | Нет | Порог уверенности от 0 до 1, используется только для изображений 3x3. Если задан (для начала подойдёт 0.5), возвращаются все ячейки выше этого порога; если не задан, возвращаются 3 наиболее вероятные ячейки | > **Осторожно:** Изображение нужно привести к одному из стандартных размеров из таблицы ниже: сервер определяет тип задания по размеру. | Тип задания | Размер изображения | Что возвращается | | --- | --- | --- | | Сетка 3x3 («Выберите все изображения») | 300 × 300 | `objects`: ячейки, на которые нужно нажать | | Сетка 4x4 («Выберите все квадраты») | 450 × 450 | `objects`: ячейки, на которые нужно нажать | | Маленькое изображение 1x1 (отдельная картинка, появляющаяся после клика в сетке 3x3) | 100 × 100 | `hasObject`: нужно ли нажимать на это изображение | Если у вас скриншот, определите тип по тексту вопроса: у 3x3 это «Выберите все изображения» (Select all images with …), у 4x4 — «Выберите все квадраты» (Select all squares with …). ## Пример запроса POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "ReCaptchaV2Classification", "image": "BASE64_IMAGE", "question": "/m/0k4j" } } ``` ## Результат 3x3 и 4x4: ```json { "errorId": 0, "status": "ready", "solution": { "objects": [1, 5, 8], "type": "multi" }, "taskId": "3a9e8cb8-3871-11ec-9794-94e6f7355a0b" } ``` Маленькое изображение 1x1: ```json { "errorId": 0, "status": "ready", "solution": { "hasObject": true, "type": "single" } } ``` | Поле | Тип | Описание | | --- | --- | --- | | `objects` | array | Индексы ячеек, по которым нужно кликнуть, начиная с 0, слева направо и сверху вниз | | `hasObject` | boolean | Возвращается для фрагмента 1x1: есть ли на нём целевой объект | | `type` | string | Тип задания: `multi` (изображение 3x3 или 4x4, смотрите `objects`), `single` (фрагмент 1x1, смотрите `hasObject`); `drag` для заданий hCaptcha с перетаскиванием | Ячейки нумеруются с 0, слева направо и сверху вниз:   ## confidence: получить все подходящие ячейки за один раз После клика в сетке 3x3 обычно появляются маленькие изображения 1x1, которые тоже нужно проверить. Если получить их неудобно (например, при разработке для мобильных устройств), передайте `confidence`: - Без него для изображения 3x3 возвращаются 3 ячейки с наивысшей оценкой (reCAPTCHA требует нажать минимум 3). - С ним (рекомендуем `0.5`) возвращаются все ячейки с оценкой выше этого значения — их может быть больше или меньше 3; если подходящих нет, возвращается пустой массив. Так не нужно снимать скриншоты изображений 1x1. - Для изображений 4x4 и 1x1 параметр не действует. ## ID вопросов В `question` указывается ID вопроса (начинается с `/m/`), а не текст вопроса. ID приходит вместе с изображением в ответе на запрос, которым reCAPTCHA загружает задание (`reload` или `userverify`). Ниже — распространённые вопросы; китайский текст приведён только для справки: Всего: 16 | ID вопроса | Вопрос (английский) | | --- | --- | | `/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` | Подходящих вопросов нет `ERROR_UNKNOWN_QUESTION` означает, что ID указан неверно или этот вопрос пока не поддерживается. `ERROR_UNKNOW_450x450_QUESTION` означает, что этот вопрос пока не поддерживается для изображений 4x4 — обновите задание на странице, чтобы получить другое. ## Жалобы и возврат баллов Если проверка после кликов не пройдена, сообщите об этом через [report](https://docs.yescaptcha.com/ru/api/report.md) в течение 1 часа; возврат баллов после жалобы рассчитывается примерно через 24 часа, правила — в разделе [Тарификация и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md). Если проверка пройдена, тоже сообщите об этом через report с `isSuccess: true`. ## Связанные руководства - [Имитация кликов для распознавания изображений reCAPTCHA v2 (Selenium)](https://docs.yescaptcha.com/ru/guides/recaptcha-click-selenium.md) - [reCAPTCHA v2 (возвращает токен)](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) --- # Распознавание изображений hCaptcha > Распознавание изображений hCaptcha через YesCaptcha (HCaptchaClassification): выбор в сетке 3×3, клик в нужной точке, перетаскивание в нужное место, анимированные задания. Ответ синхронный, баллы не списываются, если цель не найдена. Source: https://docs.yescaptcha.com/ru/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` распознаёт графические задания hCaptcha: вы отправляете вопрос и изображения, а в ответ получаете, какие картинки выбрать, куда кликнуть или откуда и куда перетащить. Действие в браузере выполняет ваша программа. Токен **не возвращается**. Ответ синхронный, каждый запрос стоит 8 pts (≈ $1.20 / 1k); если цель не найдена (пустой результат), баллы не списываются. > **Совет:** Если не хотите писать логику кликов, используйте [расширение браузера](https://docs.yescaptcha.com/ru/extension.md): оно поддерживает все эти типы заданий. Если нужен токен, а не позиция клика, используйте [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md). - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) ## Типы и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `HCaptchaClassification` | $1.20 / 1k; 8 pts/задача · ¥8 / 1k | Синхронный | Баллы не списываются, если цель не найдена | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `queries` | array | Да | Список изображений капчи в кодировке Base64 в порядке их расположения на странице (9 фрагментов для сетки 3×3) | | `question` | string | Нет | Полный текст вопроса так, как он показан на странице (рекомендуются упрощённый китайский или английский), например `Please click each image containing a bicycle`. Передайте хотя бы одно из полей `question` и `anchors`; рекомендуется передавать оба | | `anchors` | array | Нет | Список примеров изображений в кодировке Base64, показанных рядом с вопросом; обязателен для вопросов, в которых они есть | - В `question` передавайте вопрос целиком в том виде, как он показан на странице; переводить его не нужно, но рекомендуется переключить hCaptcha на английский или упрощённый китайский. Новые формулировки обычно поддерживаются быстро, совершенно новые категории — в течение 3 рабочих дней. > **Осторожно:** Если в правом верхнем углу вопроса есть маленькое изображение-подсказка, передайте его в `anchors`. Вопросы, на которые нельзя ответить без примера изображения, без `anchors` не распознаются. ## Выбор в сетке 3×3 Вопрос выглядит как «Please click each image containing …», ниже расположены 9 маленьких изображений. В `queries` передайте 9 изображений в Base64 по порядку: 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"] } } ``` Ответ: ```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` и `top_k` содержат одну и ту же информацию: `objects` показывает для каждого изображения, является ли оно целью, а `top_k` — номера изображений-целей (с 0). Кликните по этим изображениям. ## Клик в указанной позиции Вопрос выглядит как «Please click on …», ниже одно большое изображение, на котором нужно кликнуть в одной или нескольких позициях. 1. В `question` передайте вопрос со страницы; если есть примеры изображений, передайте их в `anchors`. 2. В `queries` передайте одно изображение: лучше всего исходное изображение, экспортированное напрямую из canvas (рекомендуется преобразовать в JPG). Если возможен только скриншот, захватите область большого изображения (внутри красной рамки на рисунке ниже) — без лишнего и без недостающего. 3. `box` в ответе — координаты для клика: x1, y1, x2, y2 и так далее, начало координат — левый верхний угол загруженного изображения. 4. Если размер загруженного изображения отличается от размера на странице, пересчитайте координаты: x на странице = возвращённый x × отображаемая ширина ÷ ширина загруженного изображения (для y аналогично). Например, если вернулся x = 769, ширина canvas на странице 350, а ширина загруженного изображения 1000, то на странице нужно кликнуть в 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"] } } ``` Ответ: ```json { "errorId": 0, "status": "ready", "solution": { "box": ["221", "213"] } } ``` Если нужно кликнуть по нескольким целям, в `box` по порядку идут несколько пар координат: `["221", "213", "340", "118", ...]`. ## Перетаскивание в указанное место Вопрос выглядит как «Drag … to …»: нужно перетащить фрагменты справа на соответствующие места на изображении. 1. В `question` передайте вопрос со страницы. 2. Сделайте скриншот и передайте его в `queries`. На изображении должны быть **одновременно** и перетаскиваемые фрагменты, и целевые места; каждая сторона изображения — не менее 260 пикселей. 3. Каждый элемент `box` в ответе — одно перетаскивание: `start` — позиция фрагмента, `end` — место, куда его нужно перетащить. Если фрагментов несколько, перетаскивайте их по одному. ```json { "errorId": 0, "status": "ready", "solution": { "type": "drag", "box": [ { "start": [644, 218], "end": [239, 315] } ] } } ```  Если вместо скриншота у вас протокольные данные (изображения фрагментов, их координаты и большое фоновое изображение), сначала по координатам наложите фрагменты на фон, чтобы получилось изображение, как на скриншоте страницы, и только потом отправляйте его. ## Анимированные задания Если изображение задания анимированное, передайте в `queries` анимацию (GIF и т. п.) в Base64. Рекомендуемая длительность анимации — не менее 3 секунд, лучше 5–6 секунд, частота кадров около 12 FPS. ## Жалобы и возврат баллов Если после клика проверка не пройдена, сообщите о неверном результате через [report](https://docs.yescaptcha.com/ru/api/report.md) в течение 1 часа; возврат баллов после жалобы рассчитывается примерно через 24 часа. Правила — в разделе [Тарификация и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md). ## Связанные руководства - [Имитация кликов для распознавания изображений hCaptcha (Selenium)](https://docs.yescaptcha.com/ru/guides/hcaptcha-click-selenium.md) --- # Распознавание изображений FunCaptcha > Распознавание картинок-заданий FunCaptcha (Arkose Labs) через YesCaptcha (FunCaptchaClassification). Загрузите изображение задания (сетка из 6 ячеек или задание со стрелками, где изображения расположены слева и справа) и вопрос на английском, и синхронно получите номер нужного изображения. Поддерживаются все типы заданий. Source: https://docs.yescaptcha.com/ru/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` распознаёт картинки-задания FunCaptcha (Arkose Labs): вы отправляете изображение задания и вопрос на английском, а в ответ получаете номер изображения, которое нужно выбрать. Клик в браузере выполняет ваша программа. Токен **не возвращается**. Ответ синхронный, каждый запрос стоит 3 pts (≈ $0.45 / 1k). > **Совет:** Если не хотите писать код, используйте [расширение браузера](https://docs.yescaptcha.com/ru/extension.md): оно решает капчу на странице автоматически. - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) ## Тип задачи и цена | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `FunCaptchaClassification` | $0.45 / 1k; 3 pts/задача · ¥3 / 1k | Синхронный | | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `image` | string | Да | Изображение задания в кодировке Base64 без префикса `data:` | | `question` | string | Да | Текст вопроса на английском (например, `Pick the image that is the correct way up`); поддерживаемые вопросы перечислены на этой странице | - В `image` передавайте только часть с изображениями задания (сетку из 6 ячеек или изображение задания со стрелками, левую и правую части вместе). Заголовок и кнопки в кадр не включайте. Снимок должен быть целым: если не хватает фрагмента, точность распознавания падает. Сетку из 6 ячеек, расположенных вертикально, можно загружать как есть. - В `question` передавайте полный текст вопроса на английском ровно так, как он показан на странице, с правильным регистром. Не переводите его сами. Если страница открыта на другом языке, сначала переключите капчу на английский. Сервер определяет тип задания по вопросу, поэтому вопрос должен быть точным. ## Пример запроса POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "FunCaptchaClassification", "image": "BASE64_IMAGE", "question": "Pick the bread" } } ``` ## Результат ```json { "errorId": 0, "status": "ready", "solution": { "objects": [4], "labels": ["parrot", "panda", "octopus", "owl", "bread", "dog"] }, "taskId": "04a3fa76-11a0-11ed-a58c-0ef20f419382" } ``` | Поле | Тип | Описание | | --- | --- | --- | | `objects` | array | Индекс изображения, которое нужно выбрать, начиная с 0, слева направо и сверху вниз | | `labels` | array | Распознанные метки | `objects: [4]` означает, что нужно выбрать 5-е изображение (нумерация с 0, слева направо и сверху вниз). Одно задание часто состоит из нескольких раундов подряд: в каждом раунде заново делайте снимок и заново вызывайте API. ## Поддерживаемые вопросы **Поддерживаются все типы заданий**, сверяться со списком вопросов не нужно: отправляйте вопрос на английском и изображение задания прямо со страницы. Если вернулся `ERROR_UNKNOWN_QUESTION`, [обратитесь в поддержку](https://docs.yescaptcha.com/ru/help/contact.md). Сейчас чаще всего встречается задание со стрелками, где изображения расположены слева и справа: слева находится образец для сравнения, справа текущее изображение. Стрелками на странице его переключают, пока не найдётся то, которое подходит под вопрос. Загружайте всё изображение целиком (обе части) в том виде, в каком оно показано на странице. Например:  `Use the arrows to change the number of objects until it matches the left image`Количество совпадает с левым изображением  `use the arrows to choose the image where all the darts add up to the number in the left image`Сумма чисел на дротиках равна числу на левом изображении  `use the arrows to find the jigsaw puzzle that is missing the puzzle piece shown on the left`Не хватает именно того фрагмента пазла, что слева  `find the image that has the prize on the left held by the claw in the machine on the right`Захват держит приз, показанный слева Другой тип — выбор изображения в сетке из 6 ячеек (например, `Pick the bread`): загрузите часть с сеткой из 6 ячеек, как в примере запроса выше. ## Жалоба на неверный результат и возврат баллов после жалобы Если итоговая отправка не прошла, а неизвестно, в каком раунде была ошибка, сообщите о неверном результате через [report](https://docs.yescaptcha.com/ru/api/report.md): передайте ID задач всей группы в течение 1 часа. Возврат баллов после жалобы рассчитывается примерно через 24 часа. Правила описаны в разделе [Оплата и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md). --- # Распознавание изображений AWS WAF / bCaptcha > Распознавайте капчи AWS WAF CAPTCHA и bCaptcha с сеткой 3×3 через YesCaptcha (AwsClassification, bCaptchaClassification). Загрузите целое изображение и вопрос — синхронно получите ячейки, на которые нужно нажать. Source: https://docs.yescaptcha.com/ru/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` распознаёт задания AWS WAF CAPTCHA с сеткой 3×3, `bCaptchaClassification` — задания bCaptcha с сеткой 3×3: отправьте целое изображение и вопрос, а в ответ получите, на какие ячейки нужно нажать; сами нажатия выполняет ваша программа в браузере. Они **не возвращают токен**. Ответ синхронный, каждый запрос стоит 8 pts (≈ $1.20 / 1k). Если не хотите писать код, используйте [расширение браузера](https://docs.yescaptcha.com/ru/extension.md). - POST `https://api.yescaptcha.com/createTask` (Глобальный endpoint) - POST `https://cn.yescaptcha.com/createTask` (Endpoint для Китая) ## Типы и цены | Тип задачи | Цена | Режим | Примечания | | --- | --- | --- | --- | | `AwsClassification` | $1.20 / 1k; 8 pts/задача · ¥8 / 1k | Синхронный | | | `bCaptchaClassification` | $1.20 / 1k; 8 pts/задача · ¥8 / 1k | Синхронный | | Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах. Параметры и формат ответа у обоих типов одинаковые; выбирайте по источнику капчи: для AWS WAF — `AwsClassification`, для bCaptcha — `bCaptchaClassification`. ## Параметры запроса | Поле | Тип | Обязательное | Описание | | --- | --- | --- | --- | | `type` | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице | | `queries` | string | Да | Base64 всего изображения с сеткой 3×3 (одно изображение) | | `question` | string | Нет | Полный текст вопроса так, как он показан на странице, например `Select all hats`; другие языки переводятся автоматически | В `queries` передайте **целое** изображение с сеткой (одну картинку, а не 9 маленьких). В `question` вставьте вопрос со страницы целиком: подойдут китайский и английский, другие языки переводятся автоматически. ## Пример запроса POST https://api.yescaptcha.com/createTask ```json { "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "AwsClassification", "queries": "BASE64_IMAGE", "question": "Select all hats" } } ``` ## Результат ```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" } ``` | Поле | Тип | Описание | | --- | --- | --- | | `label` | string | Распознанный целевой объект вопроса | | `objects` | array | Является ли каждая из 9 ячеек целевой (true / false), слева направо и сверху вниз | | `top_k` | array | Индексы (с 0) изображений, которые являются целевыми; значение то же, что у `objects`, используйте любое из них | | `confidences` | array | Уверенность для каждого результата | 9 ячеек нумеруются от 0 до 8 слева направо и сверху вниз (сетка 3×3). `objects` и `top_k` содержат одно и то же, используйте любое из них: нажмите на ячейки, для которых `objects` равно `true`, или на номера из `top_k`. ## Жалобы и возврат баллов Если проверка после нажатий не пройдена, сообщите об этом через [report](https://docs.yescaptcha.com/ru/api/report.md) в течение 1 часа; возврат баллов после жалобы начисляется примерно через 24 часа. Правила — в разделе [Тарификация и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md). --- # YesCaptcha Assistant — расширение браузера > YesCaptcha Assistant (расширение браузера) для Chrome и Firefox автоматически распознаёт и кликает капчи reCAPTCHA, hCaptcha, FunCaptcha, AWS WAF и другие. Расширение бесплатное, баллы списываются за API, которые оно использует. Ссылки на магазины, загрузка пакетов и видео установки для Chrome, BitBrowser и Kiwi Browser. Source: https://docs.yescaptcha.com/ru/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 — расширение браузера для Chrome и Firefox. Когда на странице появляется капча, оно отправляет её в YesCaptcha на распознавание и автоматически кликает, без написания кода. Само расширение бесплатное; распознавание списывает баллы по цене используемых API, с того же аккаунта и баланса, что и API. ## Что умеет - Автоматически распознаёт и кликает графические задания reCAPTCHA v2, hCaptcha, FunCaptcha, AWS WAF и bCaptcha. - Обычные текстовые капчи: щёлкните правой кнопкой по картинке и выберите «Отметить как капчу», затем щёлкните правой кнопкой по полю ввода и выберите «Ввести ответ на капчу»; расширение распознает картинку и подставит ответ. - В настройках можно отдельно включать и отключать каждый вид капчи, менять скорость кликов, число повторных попыток и другое. > **Заметка:** Пройти удаётся не на всех сайтах, поэтому сначала попробуйте. ## Установка **Из магазина (рекомендуется, обновляется автоматически):** - Chrome (и браузеры на Chromium, например Edge): [Chrome Web Store](https://chromewebstore.google.com/detail/yescaptcha-assistant/jiofmdifioeejeilfkpegipdjiopiekl) - Firefox: [Firefox Add-ons](https://addons.mozilla.org/firefox/addon/yescaptcha-assistant/) Откройте страницу расширения в Chrome Web Store, нажмите «Установить», затем нажмите значок расширения на панели инструментов и введите `clientKey`: Ваш браузер не воспроизводит это видео. Скачайте его: [Видео: установка из Chrome Web Store (34 с)](https://docs.yescaptcha.com/videos/extension-chrome-store.mp4) Видео: установка из Chrome Web Store (34 с) **Если магазин недоступен, скачайте пакет:** Версия для Chrome Версия 1.4.12 Размер 1.1 MB Обновлено 2026-11-10 [Скачать](https://api.yescaptcha.com/extension/chrome/latest)[Chrome Web Store](https://chromewebstore.google.com/detail/yescaptcha-assistant/jiofmdifioeejeilfkpegipdjiopiekl) Версия для Firefox Версия 0.4.6 Размер 0.9 MB Обновлено 2026-10-31 [Скачать](https://api.yescaptcha.com/extension/firefox/latest)[Firefox Add-ons](https://addons.mozilla.org/firefox/addon/yescaptcha-assistant/) Версия в магазине Firefox может быть старше пакета здесь; если нужна самая свежая, используйте пакет. ### Установка пакета в Chrome 1. Скачайте zip-файл и распакуйте его в постоянную папку. 2. Откройте в адресной строке `chrome://extensions` и включите «Режим разработчика» в правом верхнем углу. 3. Нажмите «Загрузить распакованное расширение» и выберите только что распакованную папку. 4. Нажмите значок расширения на панели инструментов и введите свой `clientKey`. Перед загрузкой можно открыть распакованный `config.js` в текстовом редакторе, вписать свой `clientKey` между кавычками в `clientKey: ''` и сохранить файл — после установки вводить его не придётся. Когда расширение ставится в несколько браузерных профилей, так удобнее. Ваш браузер не воспроизводит это видео. Скачайте его: [Видео: установка пакета в Chrome с предварительным вводом clientKey в config.js (44 с; в видео старая версия, шаги те же)](https://docs.yescaptcha.com/videos/extension-chrome-zip.mp4) Видео: установка пакета в Chrome с предварительным вводом clientKey в config.js (44 с; в видео старая версия, шаги те же) > **Осторожно:** Не удаляйте и не перемещайте распакованную папку: иначе браузер не сможет загрузить расширение. Расширение, установленное из пакета, не обновляется автоматически; при выходе новой версии скачайте её заново. ### Установка пакета в Firefox 1. Скачайте файл `.xpi`. 2. Откройте в адресной строке `about:addons`, нажмите значок шестерёнки, выберите «Установить дополнение из файла…» и укажите скачанный файл. 3. Нажмите значок расширения на панели инструментов и введите свой `clientKey`. ## Установка в BitBrowser BitBrowser и другие антидетект-браузеры построены на Chrome. Расширение добавляется в «Центре расширений» (Extension Center), после чего его можно включить для всех окон или только для выбранных. Шаги и видео ниже записаны в BitBrowser 6.0; в новых версиях интерфейс может немного отличаться. ### Из магазина Chrome 1. В BitBrowser нажмите «Центр расширений» в левой панели, затем «Добавить пользовательское расширение» и выберите «Добавить расширение из магазина Chrome». 2. Вставьте в поле «URL страницы расширения» адрес расширения в Chrome Web Store `https://chromewebstore.google.com/detail/yescaptcha-assistant/jiofmdifioeejeilfkpegipdjiopiekl` и нажмите кнопку справа от поля. Когда будет распознано YesCaptcha Assistant, нажмите «ОК». 3. После добавления нажмите «Настройки» на карточке YesCaptcha Assistant, в разделе способа включения выберите «Все окна» или «Выбранные окна» (и отметьте нужные окна), затем нажмите «ОК». 4. Откройте окно браузера, нажмите значок расширений на панели инструментов, найдите YesCaptcha Assistant и введите свой `clientKey`. Если виден баланс, всё настроено. Ваш браузер не воспроизводит это видео. Скачайте его: [Видео: добавление расширения из магазина Chrome в BitBrowser (30 с)](https://docs.yescaptcha.com/videos/extension-bit-store.mp4) Видео: добавление расширения из магазина Chrome в BitBrowser (30 с) ### Из пакета 1. Скачайте пакет для Chrome (выше) и распакуйте его в постоянную папку. 2. (Необязательно) Откройте `config.js` из этой папки в текстовом редакторе, впишите свой `clientKey` между кавычками в `clientKey: ''` и сохраните. Так его не придётся вводить в каждом окне. 3. В «Центре расширений» нажмите «Добавить пользовательское расширение», выберите «Добавить локальное расширение», в поле загрузки укажите распакованную папку (ту, где лежит `manifest.json`) и нажмите «ОК». 4. После успешной загрузки нажмите «Настройки» на карточке YesCaptcha Assistant, выберите способ включения (все окна или выбранные) и нажмите «ОК». 5. Откройте окно браузера и нажмите YesCaptcha Assistant в значке расширений. Если видны ключ и баланс, всё настроено. Ваш браузер не воспроизводит это видео. Скачайте его: [Видео: добавление пакета в BitBrowser (46 с; в видео старая версия, шаги те же)](https://docs.yescaptcha.com/videos/extension-bit-zip.mp4) Видео: добавление пакета в BitBrowser (46 с; в видео старая версия, шаги те же) ## На Android (Kiwi Browser) > **Осторожно:** Поддержка Kiwi Browser прекращена в январе 2025 года, он удалён из Google Play, обновлений и исправлений безопасности больше не будет. Шаги и видео ниже взяты из старой документации для тех, кто всё ещё пользуется Kiwi Browser; текущая версия расширения в Kiwi Browser заново не тестировалась. 1. Скачайте пакет для Chrome (`.zip`) на телефон, не распаковывая. Если нужно заранее вписать ключ, сначала распакуйте архив на компьютере, измените `config.js` и снова упакуйте в zip (`manifest.json` должен лежать в корне архива). 2. В Kiwi Browser нажмите меню в правом верхнем углу и выберите «Extensions» (расширения). 3. Включите «Developer mode» (режим разработчика), нажмите «+ (from .zip/.crx/.user.js)» и выберите скачанный пакет. 4. Снова откройте меню: внизу появится YesCaptcha Assistant. Нажмите его и введите свой `clientKey`. Если виден баланс, всё настроено. Ваш браузер не воспроизводит это видео. Скачайте его: [Видео: установка в Kiwi Browser (16 с; в видео старая версия, шаги те же)](https://docs.yescaptcha.com/videos/extension-kiwi.mp4) Видео: установка в Kiwi Browser (16 с; в видео старая версия, шаги те же) ## Настройка 1. Зарегистрируйтесь на [yescaptcha.com](https://yescaptcha.com/), пополните баланс и скопируйте `clientKey` в Панели; см. [Быстрый старт](https://docs.yescaptcha.com/ru/getting-started/quickstart.md). 2. Нажмите значок расширения и введите ключ в панели настроек. Если виден баланс, всё настроено. 3. Откройте страницу с капчей — расширение начнёт распознавание автоматически. ## Стоимость Расширение бесплатное. Распознавание списывает баллы по используемым типам задач: графические задания reCAPTCHA тарифицируются как [распознавание изображений reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md), hCaptcha — как [распознавание изображений hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha-classification.md). Если результат неверный, можно сообщить об этом и получить возврат баллов после жалобы; см. [Тарификация и возврат баллов](https://docs.yescaptcha.com/ru/getting-started/billing.md). --- # Как определить тип капчи > Как понять, какая капча на странице: reCAPTCHA v2, невидимая v2, v3, Enterprise, hCaptcha, чем Cloudflare Turnstile отличается от страницы проверки Cloudflare и какой тип задачи YesCaptcha использовать. Source: https://docs.yescaptcha.com/ru/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/ Выбор правильного типа задачи начинается с того, чтобы распознать капчу. Самый надёжный способ — открыть инструменты разработчика в браузере (F12) и посмотреть на вкладке Network, скрипт какой капчи загружает страница. Можно также ориентироваться по внешнему виду. ## Определить по внешнему виду Как каждая капча выглядит на веб-странице (анимированные иллюстрации, а не скриншоты); нажмите на карточку, чтобы открыть страницу типа задачи. Если по внешнему виду определить трудно, проверьте по краткой таблице и панели Network ниже. - [reCAPTCHA v2: Флажок · Невидимая](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) - [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) - [Распознавание изображений reCAPTCHA v2: Сетка 3×3 · Сетка 4×4 · Одно изображение 1×1](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md) - [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md) - [Распознавание изображений hCaptcha: Сетка изображений · Клик по точке · Перетаскивание · Анимированная](https://docs.yescaptcha.com/ru/tasks/hcaptcha-classification.md) - [Cloudflare Turnstile: Автоматическая · Флажок](https://docs.yescaptcha.com/ru/tasks/turnstile.md) - [Страница проверки Cloudflare: Автоматическая · Флажок](https://docs.yescaptcha.com/ru/tasks/cloudflare-challenge.md) - [Распознавание изображений FunCaptcha: Стрелки · Сетка из 6 изображений](https://docs.yescaptcha.com/ru/tasks/funcaptcha-classification.md) - [Распознавание изображений AWS WAF / bCaptcha: AWS WAF · bCaptcha](https://docs.yescaptcha.com/ru/tasks/aws-bcaptcha-classification.md) - [Распознавание текста на изображении: С шумом · Линии-помехи · Математическая](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) ## Краткая таблица | Что вы видите | Что это | Какой тип задачи | | --- | --- | --- | | Флажок «Я не робот» / «I’m not a robot» | reCAPTCHA v2 | [reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-v2.md) | | Флажка нет, задание с картинками появляется только после нажатия кнопки отправки; в правом нижнем углу небольшой значок reCAPTCHA | Невидимая reCAPTCHA v2 (или v3) | См. ниже «Версии reCAPTCHA» | | Никакого взаимодействия, в правом нижнем углу только значок reCAPTCHA | reCAPTCHA v3 | [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md) | | Флажок «Я человек», задания с картинками с пометкой hCaptcha | hCaptcha | [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md) | | В форму встроено окно проверки Cloudflare, после установки флажка страница не перезагружается | Cloudflare Turnstile | [Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md) | | Вся страница показывает «Подождите…» / «Проверка подключения» и автоматически перенаправляет | Страница проверки Cloudflare | [Страница проверки Cloudflare](https://docs.yescaptcha.com/ru/tasks/cloudflare-challenge.md) | | Пазлы и задания с выбором картинок от Arkose Labs (например, «Выберите изображение, расположенное правильно») | FunCaptcha | [Распознавание изображений FunCaptcha](https://docs.yescaptcha.com/ru/tasks/funcaptcha-classification.md) | | Картинка с искажёнными буквами и цифрами | Символьная капча | [Распознавание текста на изображении](https://docs.yescaptcha.com/ru/tasks/image-to-text.md) | ## Версии reCAPTCHA В панели Network найдите `api.js` или `enterprise.js`: | Загружаемый скрипт | Версия | | --- | --- | | `recaptcha/api.js` без параметра `render` или с `render=explicit` | v2 обычная версия | | То же, и в адресе запроса `anchor` есть `size=invisible` | v2 невидимая версия, добавьте в задачу `"isInvisible": true` | | `recaptcha/api.js?render=SITE_KEY` (`render` не равен `explicit`) | v3 обычная версия | | `recaptcha/enterprise.js` без параметра `render` или с `render=explicit` | v2 Enterprise | | `recaptcha/enterprise.js?render=SITE_KEY` | v3 Enterprise | Примеры: ```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 иногда проходит только с типом задачи для v3, поэтому попробуйте оба варианта. Также можно выполнить в консоли (Console) следующий код: он выведет все reCAPTCHA на странице с версией, ключом сайта, адресом страницы и функцией обратного вызова: 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(); ``` Пример результата: ```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" } ] ``` Для сравнения можно использовать официальные демо-страницы Google: v2 обычная версия — `https://www.google.com/recaptcha/api2/demo`, v2 невидимая версия — `https://www.google.com/recaptcha/api2/demo?invisible=true`. ## Turnstile и страница проверки Cloudflare Обе технологии принадлежат Cloudflare, но это разные вещи: - **Turnstile** — окно проверки, встроенное в форму на странице. После прохождения проверки появляется галочка, а сама страница не перезагружается. Страница загружает `challenges.cloudflare.com/turnstile/v0/api.js`. Используйте [Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md). - **Страница проверки Cloudflare** полностью заменяет страницу экраном проверки Cloudflare с текстом «Подождите…» или «xx.com необходимо проверить безопасность вашего подключения»; на ней тоже может быть окно проверки. После прохождения происходит автоматический переход на нужную страницу. В исходном коде есть `__cf_chl_rt_tk` или `cdn-cgi/challenge-platform`. Используйте [Страница проверки Cloudflare](https://docs.yescaptcha.com/ru/tasks/cloudflare-challenge.md). Если при запросе из программы приходит ответ 403 с «Just a moment…», а в браузере страница открывается напрямую, скорее всего, блокируется только TLS-отпечаток. Используйте библиотеку, которая имитирует TLS-отпечаток браузера (например, curl\_cffi): запрос пройдёт, и проходить проверку не придётся. --- # Как найти параметры reCAPTCHA > Как найти websiteKey (sitekey), websiteURL, pageAction для v3 и callback-функцию reCAPTCHA на вкладках Network, Sources и Console в инструментах разработчика. Есть скрипт для автоматического поиска. Source: https://docs.yescaptcha.com/ru/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/ Для создания задачи reCAPTCHA нужны `websiteURL` (адрес страницы, на которой появляется капча) и `websiteKey` (ключ сайта), а для v3 ещё и `pageAction`. Если вы отправляете токен через Selenium или похожий инструмент, понадобится и callback-функция. Всё это можно найти в инструментах разработчика браузера (F12). ## Самый быстрый способ: скрипт автоматического поиска Откройте страницу с капчей, нажмите F12, перейдите в консоль (Console), вставьте и запустите: 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(); ``` В результате `sitekey` — это `websiteKey`, `pageurl` — это `websiteURL`, `version` показывает, v2 это или v3, а `function` и `callback` — 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" } ] ``` Пустой массив означает, что reCAPTCHA на странице ещё не загрузилась. Запустите скрипт снова, когда капча появится. ## websiteKey и websiteURL На вкладке Network найдите по запросу `anchor` запрос вида: ```text https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normal ``` - Значение после `k=` — это `websiteKey`. - В `websiteURL` укажите полный адрес страницы, на которой появляется капча (обычно это `Referer` данного запроса). Также можно поискать `data-sitekey` в исходном коде страницы. ## pageAction (v3) `pageAction` — это значение `action`, которое страница передаёт в `grecaptcha.execute(ключ_сайта, {action: '...'})`. Оно должно совпадать со значением на странице. **Способ 1: поиск по исходному коду.** На вкладке Sources нажмите правой кнопкой мыши и выберите «Search in all files». Для обычной v3 ищите `.execute(`, для v3 Enterprise — `.enterprise.execute`, и посмотрите на `action` после него: ```js grecaptcha.ready(function () { grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', { action: 'login' }).then(function (token) { // ... }); }); ``` Здесь `pageAction` равен `login`. **Способ 2: точка останова.** Если код обфусцирован и поиск ничего не находит, выполните в консоли `debug(grecaptcha.execute)` (для Enterprise — `debug(grecaptcha.enterprise.execute)`), затем выполните на странице действие, которое запускает проверку (например, нажмите «Войти»). Когда выполнение остановится, посмотрите значение `action` в панели Scope справа. Сайт может использовать разные `action` на разных шагах (например, при регистрации сначала `signup/submit_email`, затем `signup/success`). Берите значение для того шага, который вам нужно пройти. Нажмите F8, чтобы продолжить выполнение и увидеть следующий `action`. ## Callback-функция Когда вы подставляете токен на страницу через Selenium или похожий инструмент, после этого нужно вызвать callback-функцию страницы, чтобы сообщить ей, что проверка пройдена: - Найдите `data-callback` на вкладке Elements: его значение — имя callback-функции, например `data-callback="onSuccess"`. - Либо найдите `grecaptcha.render` и посмотрите параметр `callback`. - Либо посмотрите `___grecaptcha_cfg.clients` в консоли или воспользуйтесь скриптом автоматического поиска выше. Как вызвать: ```python driver.execute_script("onSuccess(arguments[0])", g_recaptcha_response) ``` У некоторых страниц нет callback-функции: достаточно подставить токен в текстовое поле `g-recaptcha-response` и сразу отправить форму. Полный порядок действий см. в разделе [Как пройти reCAPTCHA с помощью токена](https://docs.yescaptcha.com/ru/guides/submit-recaptcha-token.md). --- # Поиск параметров hCaptcha > Как найти websiteKey (sitekey), websiteURL и rqdata для версии Enterprise в hCaptcha: найдите data-sitekey в исходном коде страницы или запросы checksiteconfig и getcaptcha на вкладке Network. Source: https://docs.yescaptcha.com/ru/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/ Для создания задачи [hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha.md) нужны `websiteURL` (адрес страницы, на которой показывается капча) и `websiteKey` (ключ сайта в формате UUID); для версии Enterprise иногда нужен ещё и `rqdata`. Всё это можно найти в инструментах разработчика браузера (F12). ## websiteKey **Способ 1: исходный код страницы.** На вкладке Elements нажмите Ctrl+F (на Mac — Cmd+F) и найдите `data-sitekey`: ```html
``` Значение `data-sitekey` и есть `websiteKey`. **Способ 2: сетевые запросы.** На вкладке Network найдите `hcaptcha`, затем запрос `checksiteconfig`; значение после `sitekey=` в адресе — это `websiteKey`: ```text https://api.hcaptcha.com/checksiteconfig?v=...&host=example.com&sitekey=51829642-2cda-4b09-896c-594f89d700cc&sc=1&swa=1 ``` ## websiteURL Укажите полный адрес страницы, на которой показывается капча, а **не** `hcaptcha.com`. Параметр `host=` в запросе выше — это домен этой страницы. ## rqdata (Enterprise) Некоторые сайты используют hCaptcha Enterprise и при каждой загрузке капчи выдают значение `rqdata`; без него токен не пройдёт проверку. Обычно оно приходит в ответе API самого сайта (например, в поле `captcha_rqdata` ответа на вход в аккаунт) или передаётся при вызове `hcaptcha.render` / `hcaptcha.setData`. Полученное значение передайте в поле `rqdata` задачи. `rqdata` обычно можно использовать только один раз, поэтому каждый раз получайте новое. ## userAgent В `userAgent` можно указывать только значение, которое возвращает [/useragent](https://docs.yescaptcha.com/ru/api/useragent.md); при отправке токена используйте `userAgent` из результата распознавания. --- # Поиск параметров Turnstile > Как найти websiteKey (sitekey, начинается с 0x) и websiteURL для Cloudflare Turnstile: найдите data-sitekey или turnstile.render в исходном коде страницы либо запросы к challenges.cloudflare.com на вкладке Network. Source: https://docs.yescaptcha.com/ru/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/ Для создания задачи [Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md) нужны `websiteURL` (адрес страницы, на которой появляется виджет проверки) и `websiteKey` (ключ сайта, обычно начинается с `0x`). Сначала убедитесь, что это Turnstile, а не страница проверки Cloudflare; см. [Как определить тип капчи](https://docs.yescaptcha.com/ru/guides/identify-captcha.md). ## websiteKey **Способ 1: исходный код страницы.** В инструментах разработчика (F12) откройте панель Elements и найдите `data-sitekey`: ```html ``` **Способ 2: скрипты.** Если виджет отрисовывается через JavaScript, на панели Sources щёлкните правой кнопкой мыши, выберите «Search in all files», найдите `turnstile.render` и посмотрите `sitekey` в параметрах: ```js turnstile.render('#container', { sitekey: '0x4AAAAAAAxxxxxxxxxxxxxx', callback: onDone }); ``` **Способ 3: сетевые запросы.** На панели Network найдите `challenges.cloudflare.com`: в адресе iframe с виджетом содержится ключ сайта, начинающийся с `0x`. ## websiteURL Укажите полный адрес страницы, на которой появляется виджет, например `https://example.com/login`. ## action и cData (обычно не нужны) В подавляющем большинстве случаев они не нужны. Ищите их только тогда, когда вы уверены, что `websiteKey` и `websiteURL` указаны верно, а задача всё равно не проходит: посмотрите, есть ли `action` и `cData` в параметрах `turnstile.render` или на элементе виджета (на элементе это `data-action` и `data-cdata`): ```js turnstile.render('#container', { sitekey: '0x4AAAAAAAxxxxxxxxxxxxxx', action: 'login', cData: 'c0bd4b36-7419-4e18-83c6-378699f2a9a2' }); ``` Если они есть, при создании задачи передайте `action` в поле `pageAction`, а `cData` — в поле `data`; см. [Turnstile](https://docs.yescaptcha.com/ru/tasks/turnstile.md). ## Отправка токена Когда задача выполнена, поместите `token` в скрытое поле формы с именем `cf-turnstile-response` (если страница использует `turnstile.render` с `callback`, вызовите этот callback и передайте ему токен), затем отправьте форму. В запросе отправки используйте в качестве User-Agent значение `userAgent` из результата. --- # Использование токена reCAPTCHA > Что делать с токеном reCAPTCHA (gRecaptchaResponse): принцип работы, отправка обычным HTTP-запросом (поле g-recaptcha-response), подстановка в страницу в браузере с вызовом callback-функции, а также полный пример на Python для демо-страницы Google. Source: https://docs.yescaptcha.com/ru/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`, который возвращает YesCaptcha, — это то самое значение, которое Google передаёт странице после прохождения капчи. Получив его, нужно **отправить его на целевой сайт** (не в Google и не в YesCaptcha) так же, как это делает браузер: сайт проверяет токен через Google и пропускает вас. Есть два способа: отправить запрос самостоятельно или подставить токен в страницу в реальном браузере и отправить форму. ## Принцип работы При обычном посещении: 1. Страница загружает reCAPTCHA, пользователь проходит проверку; 2. Google выдаёт странице токен, а страница помещает его в поле `g-recaptcha-response` (или передаёт в callback-функцию); 3. Пользователь отправляет форму, и токен уходит на сервер сайта вместе с ней; 4. Сервер сайта проверяет токен через Google и, если проверка успешна, пропускает пользователя. При работе с YesCaptcha шаги 1 и 2 выполняем мы: вы создаёте задачу с `websiteURL` и `websiteKey`, получаете токен и продолжаете с шага 3. > **Осторожно:** Токен одноразовый и действует около 120 секунд; отправляйте его в течение 60 секунд после получения. Просроченные токены сайт не принимает. ## Способ 1: отправить запрос самостоятельно (рекомендуется) 1. Один раз выполните действие вручную в браузере: откройте панель Network (F12), пройдите капчу, отправьте форму и найдите запрос, который отправляет форму. 2. В Payload (или Form Data) запроса найдите поле с токеном — обычно оно называется `g-recaptcha-response`, а токен начинается с `03A`. Некоторые сайты переименовывают поле, например в `grecaptcharesponse` или `captcha`. 3. Отправьте из своей программы такой же запрос, подставив в это поле токен, полученный от YesCaptcha. Остальные поля, Cookie и заголовки тоже должны совпадать с браузерными: сайты часто проверяют и их. Полный пример на демо-странице Google: сначала получаем токен, затем отправляем его обратно на демо-страницу в поле `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) ``` ## Способ 2: подставить токен в страницу (Selenium и аналоги) Если вы управляете реальным браузером через Selenium, Playwright и подобные инструменты: 1. Прочитайте `data-sitekey` со страницы и создайте задачу, чтобы получить токен. 2. Запишите токен в текстовое поле `g-recaptcha-response` на странице. 3. Если на странице задана callback-функция (`data-callback="..."`), вызовите её, передав токен; на некоторых сайтах кнопка отправки становится активной только после вызова callback. 4. Отправьте форму. ```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'); ``` Если на странице несколько reCAPTCHA, id поля может выглядеть как `g-recaptcha-response-1`. Если поле не находится, один раз пройдите капчу вручную и найдите `03A` в панели Elements — так вы увидите, где сохраняется результат. Как найти callback-функцию, описано в разделе [Поиск параметров reCAPTCHA](https://docs.yescaptcha.com/ru/guides/find-recaptcha-parameters.md). Полный пример (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 нет чекбокса: страница сама вызывает `grecaptcha.execute(ключ_сайта, {action: '...'})`, когда ей нужен токен, и помещает его в собственный запрос (имя поля определяет сайт; чаще всего это `g-recaptcha-response`, `token` или `recaptchaToken`). Действуйте как в способе 1: найдите в панели Network запрос с токеном и воспроизведите его. При создании задачи `pageAction` должен совпадать с `action` на странице. ## Токен отправлен, но проверка не проходит - Токен просрочен: отправляйте его сразу после получения, не позже чем через 60 секунд. - Вы отправили не то поле, которое проверяет сайт, или пропустили другие поля и Cookie: сверьте запрос с браузерным по каждому полю. - Сайт также проверяет IP, User-Agent и т. п.: используйте тип со своим прокси (например, `NoCaptchaTask`) и отправляйте токен через тот же прокси. - Низкий скор в v3: проверьте `pageAction` или используйте тип с фиксированным высоким скором, см. [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md). - Защита сайта учитывает и другие поведенческие сигналы. Если токены проходят редко, перейдите на [распознавание изображений](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md) и кликайте в реальном браузере либо используйте [расширение браузера](https://docs.yescaptcha.com/ru/extension.md). --- # Клики по картинкам reCAPTCHA v2 через Selenium > Python, Selenium 4 и ReCaptchaV2Classification для автоматических кликов по картинкам reCAPTCHA v2 в браузере: вызов капчи, чтение вопроса и изображения, запрос к API распознавания, клики по ячейкам и отправка формы. Полный пример кода. Source: https://docs.yescaptcha.com/ru/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/ В этом руководстве Selenium 4 открывает демонстрационную страницу Google reCAPTCHA и проходит проверку с картинками в настоящем браузере: читает вопрос и изображение, передаёт их в [распознавание изображений reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md) (`ReCaptchaV2Classification`), чтобы узнать, по каким ячейкам кликать, и выполняет клики. В отличие от получения токена, проверка проходит прямо в браузере, поэтому способ подходит для сайтов, где токены редко принимаются. Если писать код не хочется, используйте [расширение браузера](https://docs.yescaptcha.com/ru/extension.md): оно кликает автоматически через тот же API. ## Подготовка ```bash pip install requests selenium pillow export YESCAPTCHA_CLIENT_KEY=your_client_key ``` Нужен установленный Chrome. Selenium 4 сам скачает подходящий chromedriver. ## Порядок действий 1. **Нажмите чекбокс.** Он находится в iframe с `title="reCAPTCHA"`: переключитесь в него и нажмите `#recaptcha-anchor`. 2. **Переключитесь в iframe с заданием.** Задание находится в другом iframe (в title есть “challenge”). 3. **Прочитайте вопрос.** Жирный текст в `.rc-imageselect-desc-wrapper strong` — это искомый объект, например “traffic lights”. API принимает ID вопроса, поэтому по таблице соответствия замените название на ID (`/m/015qff`), см. [ID вопроса](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md). Удобнее всего сверяться, если интерфейс браузера на английском. 4. **Получите изображение.** Картинки в ячейках — это части одного большого изображения: скачайте `src` из `td.rc-imageselect-tile img`. Для 9 ячеек (сетка 3x3) масштабируйте до 300×300, для 16 ячеек (сетка 4x4) — до 450×450, затем закодируйте в Base64. 5. **Распознайте.** Вызовите `createTask` с типом `ReCaptchaV2Classification` и полями `image`, `question`. Добавьте `"confidence": 0.5`: для сетки 3x3 тогда сразу вернутся все подходящие ячейки, и не придётся обрабатывать маленькие картинки, которые появляются после кликов. 6. **Кликайте.** В `objects` возвращаются номера ячеек: с 0, слева направо и сверху вниз. Последовательно нажмите соответствующие `td`. 7. **Подтвердите.** Нажмите `#recaptcha-verify-button`. Если появился новый раунд, вернитесь к шагу 3; если окно с заданием закрылось, проверка пройдена. 8. **Отправьте форму.** Вернитесь на основную страницу и нажмите кнопку отправки. ## Полный код 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() ``` ## Примечания - Структура страницы reCAPTCHA меняется; если селекторы в коде перестали работать, поправьте их по реальной странице. - За каждое распознанное изображение списываются баллы (цена — на странице [распознавание изображений reCAPTCHA v2](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md)). Если после кликов проверка не пройдена, в течение 1 часа можно [сообщить о неверном результате](https://docs.yescaptcha.com/ru/api/report.md) и запросить возврат баллов после жалобы. - Если вопроса нет в таблице соответствия, нажмите кнопку обновления, чтобы получить другое задание, или обратитесь в поддержку, чтобы добавить его. --- # Имитация кликов для hCaptcha через Selenium > Как с помощью Python, Selenium 4 и HCaptchaClassification автоматически пройти задание hCaptcha с сеткой 3×3 в браузере: клик по чекбоксу, чтение вопроса и 9 изображений, вызов API распознавания, клики и отправка. Полный пример кода. Source: https://docs.yescaptcha.com/ru/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/ В этом руководстве Selenium 4 открывает демонстрационную страницу hCaptcha и проходит задание с сеткой 3×3 в настоящем браузере: считывает вопрос и 9 изображений, передаёт их в [распознавание изображений hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha-classification.md) (`HCaptchaClassification`), чтобы определить, какие из них целевые, и затем имитирует клики. В hCaptcha есть и другие типы заданий, например «кликнуть в указанном месте» или «перетащить»: они возвращают координаты, а не номера ячеек. Как их обрабатывать, описано в разделе [распознавание изображений hCaptcha](https://docs.yescaptcha.com/ru/tasks/hcaptcha-classification.md). Если писать код не хочется, воспользуйтесь [расширением браузера](https://docs.yescaptcha.com/ru/extension.md): оно поддерживает все эти типы заданий. ## Подготовка ```bash pip install requests selenium export YESCAPTCHA_CLIENT_KEY=your_client_key ``` ## Порядок действий 1. **Кликните по чекбоксу.** Чекбокс находится в iframe hCaptcha, в адресе которого есть `frame=checkbox`. Переключитесь в него и кликните по `#checkbox`. 2. **Переключитесь на iframe с заданием.** Само задание находится в iframe, в адресе которого есть `frame=challenge`. 3. **Прочитайте вопрос.** Текст в `.prompt-text` — это вопрос; передайте его в API без изменений (рекомендуется переключить язык интерфейса hCaptcha на упрощённый китайский или английский). Если рядом с вопросом есть маленькое пример изображения, добавьте его в `anchors`. 4. **Получите изображения.** Фоновое изображение каждой ячейки `.task-image .image` — это одна картинка. Скачайте их по порядку, преобразуйте в Base64 и составьте список `queries`. 5. **Распознайте.** Вызовите `createTask` с типом `HCaptchaClassification`. Элементы `objects` в ответе соответствуют ячейкам один к одному, `true` означает целевую ячейку. 6. **Кликните и отправьте.** Кликните по целевым ячейкам и нажмите кнопку отправки. Может последовать несколько раундов подряд — повторяйте шаги с 3 по 6. 7. **Готово.** После прохождения проверки в поле `h-captcha-response` на странице появится токен; отправьте его вместе с формой. ## Полный код 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