Получить API ключ

Документация API

Асинхронное API для решения капч, совместимое с форматом anti-captcha (createTask / getTaskResult). Создаёте задачу, опрашиваете результат, платите только за решённые капчи.

Аутентификация

Аутентификация - по API-ключу, который передаётся в поле "clientKey" в теле JSON каждого запроса. Отдельного заголовка авторизации нет. Ключ можно найти в личном кабинете. Все методы работают через POST и принимают JSON.

Базовый URL
https://api.captcha-solver.com

Как это работает

API асинхронное. Создаёте задачу и получаете taskId, затем опрашиваете getTaskResult, пока статус не станет "ready". Рекомендуемый интервал опроса - раз в 5 секунд. Задача живёт 5 минут; после этого она истекает, а зарезервированные средства возвращаются.

Методы

POST /createTask

Создаёт задачу на решение капчи и возвращает её taskId. Цена типа задачи резервируется на балансе и списывается только если задача решена.

Запрос
{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "RecaptchaV2TaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "6Le-xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }
}
Ответ
{
  "errorId": 0,
  "taskId": 100
}

Поддерживаемые типы задач: В v1 поддерживаются токен-капчи, только proxyless:

RecaptchaV2TaskProxyless    // reCAPTCHA v2
RecaptchaV3TaskProxyless    // reCAPTCHA v3 (websiteKey + minScore, pageAction)
TurnstileTaskProxyless      // Cloudflare Turnstile

POST /getTaskResult

Возвращает статус задачи. Пока идёт решение - статус "processing"; когда готово - "ready", а в "solution" лежит токен. Если решить не удалось, возвращается ошибка, а зарезервированные средства возвращаются на баланс.

Запрос
{
  "clientKey": "YOUR_API_KEY",
  "taskId": 100
}
Ответ
{ "errorId": 0, "status": "processing" }

{
  "errorId": 0,
  "status": "ready",
  "solution": { "gRecaptchaResponse": "03AGdBq..." }
}

POST /getBalance

Возвращает текущий доступный баланс аккаунта.

Запрос
{ "clientKey": "YOUR_API_KEY" }
Ответ
{ "errorId": 0, "balance": 12.34 }

Примеры кода

Полный цикл: создать задачу, затем опросить результат. Подставьте свои YOUR_API_KEY, адрес сайта и site key.

cURL
# 1. Create a task
curl -s -X POST https://api.captcha-solver.com/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_API_KEY",
    "task": {
      "type": "RecaptchaV2TaskProxyless",
      "websiteURL": "https://example.com/login",
      "websiteKey": "6Le-xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
  }'
# -> {"errorId":0,"taskId":100}

# 2. Poll for the result (repeat every ~5s until status is "ready")
curl -s -X POST https://api.captcha-solver.com/getTaskResult \
  -H "Content-Type: application/json" \
  -d '{"clientKey":"YOUR_API_KEY","taskId":100}'
# -> {"errorId":0,"status":"processing"}
# -> {"errorId":0,"status":"ready","solution":{"gRecaptchaResponse":"03AGdBq..."}}
Python
import time
import requests

BASE = "https://api.captcha-solver.com"
API_KEY = "YOUR_API_KEY"

# 1. Create a task
resp = requests.post(f"{BASE}/createTask", json={
    "clientKey": API_KEY,
    "task": {
        "type": "RecaptchaV2TaskProxyless",
        "websiteURL": "https://example.com/login",
        "websiteKey": "6Le-xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    },
}).json()

if resp["errorId"] != 0:
    raise RuntimeError(resp["errorCode"])
task_id = resp["taskId"]

# 2. Poll until ready
while True:
    time.sleep(5)
    result = requests.post(f"{BASE}/getTaskResult", json={
        "clientKey": API_KEY,
        "taskId": task_id,
    }).json()

    if result["errorId"] != 0:
        raise RuntimeError(result["errorCode"])
    if result["status"] == "ready":
        print(result["solution"]["gRecaptchaResponse"])
        break
JavaScript (Node 18+)
const BASE = "https://api.captcha-solver.com";
const API_KEY = "YOUR_API_KEY";
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

async function solve() {
  // 1. Create a task
  const create = await fetch(`${BASE}/createTask`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      clientKey: API_KEY,
      task: {
        type: "RecaptchaV2TaskProxyless",
        websiteURL: "https://example.com/login",
        websiteKey: "6Le-xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      },
    }),
  }).then((r) => r.json());

  if (create.errorId !== 0) throw new Error(create.errorCode);

  // 2. Poll until ready
  while (true) {
    await sleep(5000);
    const result = await fetch(`${BASE}/getTaskResult`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ clientKey: API_KEY, taskId: create.taskId }),
    }).then((r) => r.json());

    if (result.errorId !== 0) throw new Error(result.errorCode);
    if (result.status === "ready") return result.solution.gRecaptchaResponse;
  }
}

solve().then(console.log);
Postman

В Postman: создайте POST-запрос к эндпоинту, выберите тело raw JSON и вставьте тело запроса ниже. Либо импортируйте готовую коллекцию (Import > Raw text):

{
  "info": {
    "name": "captcha-solver",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "createTask",
      "request": {
        "method": "POST",
        "header": [{ "key": "Content-Type", "value": "application/json" }],
        "url": "https://api.captcha-solver.com/createTask",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"clientKey\": \"YOUR_API_KEY\",\n  \"task\": {\n    \"type\": \"RecaptchaV2TaskProxyless\",\n    \"websiteURL\": \"https://example.com/login\",\n    \"websiteKey\": \"6Le-xxxx\"\n  }\n}"
        }
      }
    },
    {
      "name": "getTaskResult",
      "request": {
        "method": "POST",
        "header": [{ "key": "Content-Type", "value": "application/json" }],
        "url": "https://api.captcha-solver.com/getTaskResult",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"clientKey\": \"YOUR_API_KEY\",\n  \"taskId\": 100\n}"
        }
      }
    }
  ]
}

Ошибки

Ошибки возвращаются с HTTP 200 и телом JSON: "errorId" не равен нулю, плюс "errorCode" и "errorDescription". Клиентские библиотеки ориентируются на errorId / errorCode.

Код Значение
ERROR_KEY_DOES_NOT_EXISTНеверный или отсутствующий clientKey
ERROR_ZERO_BALANCEНедостаточно средств для создания задачи
ERROR_NO_SUCH_CAPCHA_IDНеизвестный taskId или задача истекла
ERROR_CAPTCHA_UNSOLVABLEКапчу не удалось решить (средства возвращены)
ERROR_TASK_ABSENTОтсутствует объект task
ERROR_TASK_NOT_SUPPORTEDТип задачи не поддерживается

Нужна помощь? Напишите в поддержку.