Первый вызов API CaptchaAI занимает пять минут: ключ, задача, токен, форма.
Без теории и отступлений — сразу код на Python, Node.js, PHP и cURL, который можно скопировать, вставить и запустить без адаптации под ваш стек.
Как устроен быстрый старт: четыре шага
Любой тип CAPTCHA в CaptchaAI решается по одной схеме:
- Отправить — POST-запрос на
in.php - Получить ID задачи — сохранить
requestиз ответа - Опросить — GET-запрос к
res.phpраз в 5 секунд - Применить токен — вставить в форму или в запрос
Шаг 0. Получите API-ключ CaptchaAI
- Зарегистрируйтесь на captchaai.com
- Откройте панель управления
- Скопируйте API-ключ (32 символа)
Без активных потоков задачи не отправляются. На оценке сервиса — напишите в поддержку, обычно дают бесплатные потоки.
Шаг 1. Отправьте CAPTCHA на решение
Пример решает Cloudflare Turnstile. Со страницы нужны два значения:
- sitekey — публичный ключ виджета, из атрибута
data-sitekey(начинается с0x) - pageurl — полный URL страницы с виджетом
Такая пара регулярно нужна QA-инженерам распределённых команд — например, при тестировании формы логина на staging в европейском дата-центре, до релиза.
cURL
curl -X POST "https://ocr.captchaai.com/in.php" \
-d "key=YOUR_API_KEY" \
-d "method=turnstile" \
-d "sitekey=0x4AAAAAAAC3DHQFLr1GavNl" \
-d "pageurl=https://staging.example.com/qa-login" \
-d "json=1"
Python
import requests
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "turnstile",
"sitekey": "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl": "https://staging.example.com/qa-login",
"json": 1,
})
print(response.json())
Node.js
const response = await fetch("https://ocr.captchaai.com/in.php", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: "YOUR_API_KEY",
method: "turnstile",
sitekey: "0x4AAAAAAAC3DHQFLr1GavNl",
pageurl: "https://staging.example.com/qa-login",
json: "1",
}),
});
console.log(await response.json());
PHP
<?php
$response = file_get_contents("https://ocr.captchaai.com/in.php?" . http_build_query([
"key" => "YOUR_API_KEY",
"method" => "turnstile",
"sitekey" => "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl" => "https://staging.example.com/qa-login",
"json" => 1,
]));
echo $response;
Шаг 2. Получите ID задачи и разберите ответ
Успешный ответ выглядит так:
{
"status": 1,
"request": "71823469"
}
request — ID задачи, понадобится дальше.
Если status равен 0, код ошибки — в том же поле request:
| Ошибка | Что значит | Что делать |
|---|---|---|
ERROR_WRONG_USER_KEY |
Неверный формат ключа | Проверьте 32-символьный ключ |
ERROR_KEY_DOES_NOT_EXIST |
Ключа нет в системе | Сверьте с панелью управления |
ERROR_ZERO_BALANCE |
Нет свободных потоков | Пополните баланс |
ERROR_PAGEURL |
Отсутствует pageurl |
Добавьте полный URL с https:// |
ERROR_WRONG_GOOGLEKEY |
sitekey пуст или неверен |
Извлеките sitekey заново (для Turnstile — с 0x) |
Шаг 3. Опросите res.php и дождитесь токена
Первый опрос делайте не раньше чем через 15 секунд после отправки, дальше — раз в 5 секунд, пока не придёт готовый результат.
Python
import time
time.sleep(15)
while True:
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": "71823469",
"json": 1,
}).json()
if result.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if result.get("status") == 1:
token = result["request"]
print(f"Solved! Token: {token[:60]}...")
break
raise RuntimeError(result)
Node.js
await new Promise((r) => setTimeout(r, 15000));
while (true) {
const r = await fetch(
`https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=71823469&json=1`,
);
const data = await r.json();
if (data.request === "CAPCHA_NOT_READY") {
await new Promise((r) => setTimeout(r, 5000));
continue;
}
if (data.status === 1) {
console.log("Solved:", data.request.slice(0, 60));
break;
}
throw new Error(JSON.stringify(data));
}
Шаг 4. Примените токен на странице
Применение токена зависит от типа CAPTCHA:
- Turnstile / reCAPTCHA — запишите в поле
cf-turnstile-responseилиg-recaptcha-response, либо вызовите js-колбэк страницы. - Image OCR — вставьте распознанный текст в поле ответа.
- GeeTest — соберите несколько полей ответа по требованиям сайта.
Минимальный вариант для браузера:
document.querySelector('[name="cf-turnstile-response"]').value = token;
document.querySelector("form").submit();
Частые ошибки при первом запуске CaptchaAI API
| Ошибка | Почему это случается | Как исправить |
|---|---|---|
| Пробел в скопированном ключе | Ключ скопирован из панели управления с лишним пробелом или переносом строки | Обрежьте пробелы перед тем, как сохранить ключ в переменную окружения |
pageurl без протокола |
В URL забыли https://, и API получает голый домен вместо адреса |
Передавайте полный URL — без протокола придёт ERROR_PAGEURL |
| Слишком ранний опрос | Первый запрос к res.php ушёл раньше 15 секунд после отправки задачи |
Дождитесь 15 секунд: до этого момента CAPCHA_NOT_READY — норма, а не сбой |
| Слишком частый опрос | res.php опрашивают чаще, чем раз в 5 секунд |
Раз в 5 секунд достаточно — более частый опрос впустую расходует запросы |
| Повторное использование токена | Токен закешировали и подставляют в несколько запросов подряд | Токен живёт около 120 секунд и одноразовый — применяйте сразу после получения |
| Ключ зашит в код | API-ключ записан прямо в скрипте или попал в репозиторий | Держите ключ в переменной окружения, а не в исходном коде |
| Закончились потоки | На тарифе не осталось свободных потоков для новой задачи | Проверьте баланс и потоки — подробности в Коды ошибок API |
Частые вопросы о быстром старте CaptchaAI
Сколько потоков нужно для первого теста?
Тарифы считаются по потокам, не по количеству решений: план BASIC ($15/мес, 5 потоков) уже покрывает quickstart, первые прогоны и небольшой staging-стенд без апгрейда.
Как долго живёт токен Turnstile?
Около 120 секунд с момента, когда вы получили его из res.php. Применяйте токен сразу — кешировать и переиспользовать его в следующем запросе нельзя, он одноразовый.
Что делать, если res.php долго возвращает CAPCHA_NOT_READY?
Пару десятков секунд — норма для обычной задачи. Если статус не меняется дольше 60 секунд подряд, задача, скорее всего, зависла: отмените её по таймауту на своей стороне и отправьте новую, не ждите бесконечно.
Эта схема подходит только для Turnstile?
Нет, схема из четырёх шагов одинакова для всех поддерживаемых типов CAPTCHA — меняется только значение method в запросе на шаге 1 и способ применения токена на шаге 4.
Нужен ли браузер для использования токена?
Нет, если целевой сайт принимает токен прямо в POST-запросе формы — тогда достаточно HTTP-клиента. Браузер нужен, только если токен вставляется через JavaScript на живой странице перед отправкой формы.
Что дальше после быстрого старта CaptchaAI
Дальше выбирайте гайд по конкретному типу CAPTCHA, с которым работает ваш проект — параметры запроса и способ применения токена немного различаются:
- Решение reCAPTCHA v2 через API
- Настройка Cloudflare Turnstile через API
- GeeTest v3: решение через API
- Распознавание image CAPTCHA через API
Ключ получаете на captchaai.com/api.php; путь от регистрации до первого решённого токена занимает пять минут — дальше это уже вопрос интеграции в ваш пайплайн.