Основы
- Базовый URL
https://unlock-api.com- API-ключ
- 32 символа, на странице аккаунта. Передавайте его как clientKey (JSON) или key (in.php, res.php).
- Формат
- Методы JSON: POST с телом в JSON. in.php и res.php: поля формы через GET или POST; добавьте json=1 для ответов в JSON.
- Лимиты
- 1200 запросов в минуту на аккаунт, включая проверки результата. После создания задачи подождите около 5 секунд, затем проверяйте каждые 5 секунд.
- Лимит времени
- Задача, не решённая за 5 минут, завершается ошибкой ERROR_CAPTCHA_UNSOLVABLE, и деньги за неё возвращаются на баланс.
- Оплата
- Цена задачи списывается при её создании. Неудачные задачи возвращаются автоматически.
Быстрый старт
Решите reCAPTCHA v2 через методы JSON. Замените YOUR_API_KEY своим ключом.
import time, requests
API = "https://unlock-api.com"
KEY = "YOUR_API_KEY"
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"
}
}).json()
if task["errorId"]:
raise SystemExit(task["errorCode"])
while True:
time.sleep(5)
r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task["taskId"]}).json()
if r["errorId"]:
raise SystemExit(r["errorCode"]) # failed tasks are refunded
if r["status"] == "ready":
print(r["solution"]["gRecaptchaResponse"])
breakМетоды JSON
POST /createTask Создать задачу
Тело: clientKey и объект task. Остальные поля зависят от типа задачи, смотрите «Типы задач». Ответ: errorId 0 и taskId или errorId 1 с errorCode.
POST https://unlock-api.com/createTask
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAAAAAC3DHQFLr1GavRN"}}
{"errorId":0,"taskId":1001}
{"errorId":1,"errorCode":"ERROR_ZERO_BALANCE","errorDescription":"..."}POST /getTaskResult Получить результат
Тело: clientKey и taskId. Пока задача выполняется: status processing. Когда готово: status ready с solution и стоимостью. Неудачная задача отвечает errorId 1 со своим errorCode.
POST https://unlock-api.com/getTaskResult
{"clientKey":"YOUR_API_KEY","taskId":1001}
{"errorId":0,"status":"processing"}
{"errorId":0,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.0012","createTime":1791640000,"endTime":1791640011,"solveCount":1}POST /getBalance Получить баланс
Тело: clientKey. Ответ: баланс в долларах США.
{"clientKey":"YOUR_API_KEY"}
{"errorId":0,"balance":42.5}Сообщить о неверном ответе
reportIncorrectRecaptcha и reportIncorrectImageCaptcha принимают clientKey и taskId и отвечают success. Они поддерживаются для совместимости с существующими библиотеками; жалоба не меняет списание.
Методы с формами (in.php, res.php)
Отправить задачу: in.php
Поля: key, method и поля нужного типа капчи. Ответ: OK|ID или с json=1 {"status":1,"request":"ID"}. Ошибки возвращаются своими названиями, например ERROR_ZERO_BALANCE.
POST https://unlock-api.com/in.php
key=YOUR_API_KEY&method=hcaptcha&sitekey=SITE_KEY&pageurl=https://example.com&json=1
OK|1001
{"status":1,"request":"1001"}Получить ответ: res.php
action=get&id=ID возвращает OK|ANSWER, когда задача решена, и CAPCHA_NOT_READY, пока она в работе. action=get2 добавляет стоимость. ids=ID1,ID2 проверяет до 100 задач за раз. action=getbalance возвращает баланс. action=reportbad и reportgood принимаются.
GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=get&id=1001 CAPCHA_NOT_READY OK|P1_eyJ0eXAiOiJKV1Qi... GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=getbalance 42.5
Другие методы
POST /getToken Создать и дождаться: getToken
Тело такое же, как у createTask. Вызов ждёт до 50 секунд и возвращает тот же ответ, что и getTaskResult. Если задача ещё выполняется, в ответе будет status processing с её taskId; продолжайте опрашивать getTaskResult.
POST https://unlock-api.com/getToken
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAA..."}}
{"errorId":0,"taskId":1001,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.000725"}Колбэки с результатом
Добавьте callbackUrl в createTask (или pingback в in.php), и результат придёт туда, когда задача завершится: тело в JSON, как у getTaskResult, с taskId, а для in.php тело формы id=…&code=…. Вызываются только публичные адреса, один раз, с таймаутом 5 секунд; результат также остаётся доступным через опрос.
{"clientKey":"YOUR_API_KEY","callbackUrl":"https://your.server/captcha-result","task":{...}}
POST https://your.server/captcha-result
{"errorId":0,"taskId":1001,"status":"ready","solution":{...},"cost":"0.0005"}Статистика
getQueueStats возвращает число задач в очереди и в работе сейчас и среднее время решения за последний час. getSpendingStats возвращает ваш объём и расходы по часам за одни сутки по UTC (date в формате unix time). test возвращает полученное тело без изменений.
POST https://unlock-api.com/getQueueStats {"clientKey":"..."} -> {"errorId":0,"waiting":3,"solving":12,"speed":6.4,"total":15}
POST https://unlock-api.com/getSpendingStats {"clientKey":"...","date":1791590400} -> {"errorId":0,"data":[{"dateFrom":...,"volume":120,"money":0.06},...]}
POST https://unlock-api.com/test {"anything":1} -> {"errorId":0,"received":{"anything":1}}Список разрешённых IP
Если на странице аккаунта задан список разрешённых IP, запросы с других IP получают ERROR_IP_NOT_ALLOWED.
Типы задач
У каждого типа есть название без прокси и название с прокси (без Proxyless). Названия распознаются в любом регистре и в написаниях, которые используют другие API для решения капчи. Задачам с прокси также нужны proxyType (http, socks4, socks5), proxyAddress и proxyPort или одна строка прокси вида http://user:[email protected]:8080. Необязательные поля, не указанные здесь, передаются решателю как есть.
reCAPTCHA v2
ПодробнееRecaptchaV2TaskProxylessRecaptchaV2Task
Поля
websiteURL (обязательно)websiteKey (обязательно)
reCAPTCHA v2 Enterprise
ПодробнееRecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
reCAPTCHA v3
ПодробнееRecaptchaV3TaskProxylessRecaptchaV3Task
Поля
websiteURL (обязательно)websiteKey (обязательно)
Cloudflare Turnstile
ПодробнееTurnstileTaskProxylessTurnstileTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
FunCaptcha (Arkose Labs)
ПодробнееFunCaptchaTaskProxylessFunCaptchaTask
Поля
websiteURL (обязательно)websitePublicKey (обязательно)
Amazon AWS WAF
ПодробнееAmazonTaskProxylessAmazonTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
MTCaptcha
ПодробнееMtCaptchaTaskProxylessMtCaptchaTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
Friendly Captcha
ПодробнееFriendlyCaptchaTaskProxylessFriendlyCaptchaTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
Lemin Cropped Captcha
ПодробнееLeminTaskProxylessLeminTask
Поля
websiteURL (обязательно)captchaId (обязательно)divId (обязательно)
DataDome
ПодробнееDataDomeSliderTask
Поля
websiteURL (обязательно)captchaUrl (обязательно)userAgent (обязательно)
KeyCaptcha
ПодробнееKeyCaptchaTaskProxylessKeyCaptchaTask
Поля
websiteURL (обязательно)s_s_c_user_id (обязательно)s_s_c_session_id (обязательно)s_s_c_web_server_sign (обязательно)s_s_c_web_server_sign2 (обязательно)
Prosopo Procaptcha
ПодробнееProsopoTaskProxylessProsopoTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
CaptchaFox
ПодробнееCaptchaFoxTaskProxylessCaptchaFoxTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
NetEase Yidun
ПодробнееYidunTaskProxylessYidunTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
Yandex SmartCaptcha
ПодробнееYandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
Binance Captcha
ПодробнееBinanceTaskProxylessBinanceTask
Поля
websiteURL (обязательно)websiteKey (обязательно)
Ошибки
Названия одинаковые в обоих форматах. Запросы, отклонённые с ошибкой, не оплачиваются.
| Ошибка | Что значит и что делать |
|---|---|
ERROR_KEY_DOES_NOT_EXIST | Неверный ключ. Скопируйте его заново со страницы аккаунта. (in.php и res.php: ERROR_WRONG_USER_KEY) |
ERROR_ZERO_BALANCE | На балансе не хватает денег для задачи. Пополните баланс; ничего не списано. |
ERROR_NO_SLOT_AVAILABLE | Сейчас слишком много запросов, поэтому задачу не удалось принять. Попробуйте снова через несколько секунд; ничего не списано. |
ERROR_TASK_NOT_SUPPORTED | Тип задачи неизвестен или отключён. Проверьте название типа. |
ERROR_BAD_PARAMETERS | Обязательное поле отсутствует или имеет неверный формат. |
ERROR_PAGEURL | websiteURL или pageurl отсутствует или не является полным адресом http(s). |
ERROR_GOOGLEKEY | В запросе reCAPTCHA через in.php нет googlekey. |
ERROR_BAD_PROXY | Задаче с прокси нужны proxyAddress и proxyPort. |
ERROR_ZERO_CAPTCHA_FILESIZE | Картинки нет или она слишком маленькая. |
ERROR_TOO_BIG_CAPTCHA_FILESIZE | Картинка больше 100 КБ. |
ERROR_IMAGE_TYPE_NOT_SUPPORTED | Картинка не является корректным base64. |
ERROR_WRONG_CAPTCHA_ID | В вашем аккаунте нет задачи с таким id. |
CAPCHA_NOT_READY | Только in.php и res.php: задача ещё выполняется. Проверьте снова через 5 секунд. |
ERROR_CAPTCHA_UNSOLVABLE | Задачу не удалось решить вовремя. Деньги за неё вернулись на баланс. |
ERROR_TOO_MANY_REQUESTS | Слишком много запросов. Проверяйте результат не чаще раза в 5 секунд. |
ERROR_IP_NOT_ALLOWED | Запрос пришёл с IP, которого нет в списке разрешённых для аккаунта. Добавьте этот IP на странице аккаунта. |