CaptchaFlow API

Universal AI-Powered Captcha Solving API โ€” 19 task types, industry-standard captcha protocol, AI vision engine vision backend, and Playwright browser automation.

19 Task Types Universal Protocol AI vision engine Playwright + Chromium

Features

Everything you need for automated captcha solving in one API

๐ŸŽฏ

19 Task Types

The broadest captcha type coverage in a single API โ€” reCAPTCHA v2/v3, hCaptcha, Turnstile, FunCaptcha, AWS WAF, and image captchas.

๐Ÿ”„

Universal Protocol

Drop-in replacement for leading captcha providers. Change the base URL and client key โ€” no code changes needed.

๐Ÿค–

AI Vision Backend

Powered by an advanced AI vision engine for high-accuracy image recognition and captcha solving.

๐ŸŒ

Browser Automation

Playwright + headless Chromium for interactive reCAPTCHA, hCaptcha, and Turnstile challenge completion.

โšก

Async Processing

Submit tasks with createTask, poll with getTaskResult. Built for high-throughput concurrent workloads.

๐Ÿ”‘

Simple Authentication

Just include clientKey in the JSON body. No headers, no OAuth, no bearer tokens โ€” one field does it all.

๐Ÿ“Š

Score Control

Configurable minimum scores for reCAPTCHA v3 (0.7, 0.9, custom). Enterprise v2 and v3 variants supported.

๐Ÿ“ก

Health Monitoring

Built-in health check endpoint with supported task types list. Monitor service status in real-time.

๐Ÿ’ป

Multi-Language SDK

Code examples in cURL, Python, JavaScript, PHP, and Go. Postman collection and OpenAPI spec included.

Quick Start

Solve your first captcha in under 30 seconds

โš™๏ธ Configuration

Base URLhttps://captcha.dataleads.pro/v1
Client Keycaptcha_solver_key_2026
Auth MethodclientKey in JSON body
ProtocolIndustry-standard captcha protocol

Code Examples

bash
# 1. Create a task
curl -X POST https://captcha.dataleads.pro/v1/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "captcha_solver_key_2026",
    "task": {
      "type": "RecaptchaV2TaskProxyless",
      "websiteURL": "https://example.com",
      "websiteKey": "6Le-wvkSVVABBPB0JGLdnLBwZdMwQXa5JbjJWkA"
    }
  }'

# 2. Poll for the result
curl -X POST https://captcha.dataleads.pro/v1/getTaskResult \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "captcha_solver_key_2026",
    "taskId": "YOUR_TASK_ID"
  }'
python
import requests, time

BASE_URL = "https://captcha.dataleads.pro/v1"
CLIENT_KEY = "captcha_solver_key_2026"

# Create task
resp = requests.post(f"{BASE_URL}/createTask", json={
    "clientKey": CLIENT_KEY,
    "task": {
        "type": "RecaptchaV2TaskProxyless",
        "websiteURL": "https://example.com",
        "websiteKey": "6Le-wvkSVVABBPB0JGLdnLBwZdMwQXa5JbjJWkA"
    }
})
task_id = resp.json()["taskId"]

# Poll for result
while True:
    result = requests.post(f"{BASE_URL}/getTaskResult", json={
        "clientKey": CLIENT_KEY,
        "taskId": task_id
    }).json()
    if result["status"] in ("ready", "failed"):
        print(result)
        break
    time.sleep(5)
javascript
const BASE_URL = 'https://captcha.dataleads.pro/v1';
const CLIENT_KEY = 'captcha_solver_key_2026';

// Create task
const resp = await fetch(`${BASE_URL}/createTask`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    clientKey: CLIENT_KEY,
    task: {
      type: 'RecaptchaV2TaskProxyless',
      websiteURL: 'https://example.com',
      websiteKey: '6Le-wvkSVVABBPB0JGLdnLBwZdMwQXa5JbjJWkA'
    }
  })
});
const { taskId } = await resp.json();

// Poll for result
while (true) {
  const result = await (await fetch(`${BASE_URL}/getTaskResult`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: CLIENT_KEY, taskId })
  })).json();
  if (result.status === 'ready' || result.status === 'failed') {
    console.log(result);
    break;
  }
  await new Promise(r => setTimeout(r, 5000));
}
php
$BASE_URL = 'https://captcha.dataleads.pro/v1';
$CLIENT_KEY = 'captcha_solver_key_2026';

// Create task
$ch = curl_init("$BASE_URL/createTask");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode([
        'clientKey' => $CLIENT_KEY,
        'task' => [
            'type' => 'RecaptchaV2TaskProxyless',
            'websiteURL' => 'https://example.com',
            'websiteKey' => '6Le-wvkSVVABBPB0JGLdnLBwZdMwQXa5JbjJWkA'
        ]
    ]),
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_RETURNTRANSFER => true,
]);
$resp = json_decode(curl_exec($ch), true);
curl_close($ch);
$taskId = $resp['taskId'];

// Poll for result
while (true) {
    $ch = curl_init("$BASE_URL/getTaskResult");
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode(['clientKey' => $CLIENT_KEY, 'taskId' => $taskId]),
        CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
        CURLOPT_RETURNTRANSFER => true,
    ]);
    $result = json_decode(curl_exec($ch), true);
    curl_close($ch);
    if (in_array($result['status'], ['ready', 'failed'])) {
        print_r($result);
        break;
    }
    sleep(5);
}
go
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "time"
)

func main() {
    baseURL := "https://captcha.dataleads.pro/v1"
    clientKey := "captcha_solver_key_2026"

    // Create task
    body, _ := json.Marshal(map[string]interface{}{
        "clientKey": clientKey,
        "task": map[string]interface{}{
            "type":       "RecaptchaV2TaskProxyless",
            "websiteURL": "https://example.com",
            "websiteKey": "6Le-wvkSVVABBPB0JGLdnLBwZdMwQXa5JbjJWkA",
        },
    })
    resp, _ := http.Post(baseURL+"/createTask", "application/json", bytes.NewBuffer(body))
    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    resp.Body.Close()
    taskID := result["taskId"].(string)

    // Poll for result
    for {
        time.Sleep(5 * time.Second)
        body, _ := json.Marshal(map[string]interface{}{
            "clientKey": clientKey,
            "taskId":    taskID,
        })
        resp, _ := http.Post(baseURL+"/getTaskResult", "application/json", bytes.NewBuffer(body))
        json.NewDecoder(resp.Body).Decode(&result)
        resp.Body.Close()
        if result["status"] == "ready" || result["status"] == "failed" {
            fmt.Printf("%+v\n", result)
            break
        }
    }
}

Getting Access

Two ways to start solving captchas with CaptchaFlow

๐Ÿช

Option 1: Via API Marketplace

Subscribe on the API marketplace of your choice and get your own key instantly โ€” billing, quotas and invoicing are handled by the marketplace.

  1. Subscribe to a plan on the marketplace
  2. Copy your marketplace-assigned key
  3. Send requests through the marketplace gateway โ€” no extra headers needed on your side

Recommended for most users โ€” fastest setup, cancel anytime.

๐Ÿ”‘

Option 2: Direct Integration

Enterprise or high-volume customers can connect directly with a dedicated clientKey.

  1. Contact us for a dedicated key and custom volume pricing
  2. Pass clientKey in each request body
  3. Same endpoints, same protocol โ€” no gateway in the middle

Best for: SLAs, custom limits, on-prem routing.

API Endpoints

Five endpoints โ€” three for captcha solving, two for service info

POST /createTask Submit a captcha-solving task (async)

Request Body

json
{
  "clientKey": "captcha_solver_key_2026",
  "task": {
    "type": "RecaptchaV2TaskProxyless",
    "websiteURL": "https://example.com",
    "websiteKey": "6Le-wvkSVVABBPB0JGLdnLBwZdMwQXa5JbjJWkA"
  }
}

Response

json
{
  "errorId": 0,
  "taskId": "550e8400-e29b-41d4-a716-446655440000"
}
POST /getTaskResult Poll for task result

Request Body

json
{
  "clientKey": "captcha_solver_key_2026",
  "taskId": "550e8400-e29b-41d4-a716-446655440000"
}

Processing Response

json
{ "errorId": 0, "status": "processing" }

Ready Response (reCAPTCHA/hCaptcha)

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

Ready Response (Turnstile)

json
{
  "errorId": 0,
  "status": "ready",
  "solution": { "token": "0.eYEMe..." }
}

Failed Response

json
{
  "errorId": 1,
  "status": "failed",
  "errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
  "errorDescription": "Unable to solve the captcha"
}
POST /getBalance Check account balance

Request Body

json
{ "clientKey": "captcha_solver_key_2026" }

Response

json
{ "errorId": 0, "balance": 99999.0 }
GET /api/v1/health Health check + supported task types

Response

json
{
  "status": "healthy",
  "supported_types": [
    "ImageToTextTask", "ImageToTextTaskMuggle", "ImageToTextTaskM1",
    "RecaptchaV2TaskProxyless", "RecaptchaV2EnterpriseTaskProxyless", "NoCaptchaTaskProxyless",
    "RecaptchaV3TaskProxyless", "RecaptchaV3TaskProxylessM1", "RecaptchaV3TaskProxylessM1S7",
    "RecaptchaV3TaskProxylessM1S9", "RecaptchaV3EnterpriseTask", "RecaptchaV3EnterpriseTaskM1",
    "HCaptchaTaskProxyless", "TurnstileTaskProxyless", "TurnstileTaskProxylessM1",
    "HCaptchaClassification", "ReCaptchaV2Classification", "FunCaptchaClassification", "AwsClassification"
  ]
}
GET / Service info

Response

json
{
  "name": "CaptchaFlow API",
  "version": "1.0.0",
  "description": "Universal AI-Powered Captcha Solving API",
  "protocol": "Universal captcha protocol",
  "task_types": 19
}

All 19 Task Types

Across 7 categories โ€” browser-based, image text, and classification

RecaptchaV2TaskProxyless

reCAPTCHA v2

Solve reCAPTCHA v2 using browser automation.

Solution: gRecaptchaResponse

RecaptchaV2EnterpriseTaskProxyless

reCAPTCHA v2 Enterprise

Solve reCAPTCHA v2 Enterprise variant.

Solution: gRecaptchaResponse

NoCaptchaTaskProxyless

reCAPTCHA v2 (legacy)

Legacy NoCaptcha compatibility for industry-standard captcha protocol.

Solution: gRecaptchaResponse

RecaptchaV3TaskProxyless

reCAPTCHA v3

Solve reCAPTCHA v3 with configurable pageAction and minScore.

Solution: gRecaptchaResponse

RecaptchaV3TaskProxylessM1

reCAPTCHA v3 (M1)

reCAPTCHA v3 using M1 model variant.

Solution: gRecaptchaResponse

RecaptchaV3TaskProxylessM1S7

reCAPTCHA v3 (M1, S7)

reCAPTCHA v3 M1 with minimum score preset to 0.7.

Solution: gRecaptchaResponse

RecaptchaV3TaskProxylessM1S9

reCAPTCHA v3 (M1, S9)

reCAPTCHA v3 M1 with minimum score preset to 0.9.

Solution: gRecaptchaResponse

RecaptchaV3EnterpriseTask

reCAPTCHA v3 Enterprise

Solve reCAPTCHA v3 Enterprise variant.

Solution: gRecaptchaResponse

RecaptchaV3EnterpriseTaskM1

reCAPTCHA v3 Enterprise (M1)

reCAPTCHA v3 Enterprise using M1 model.

Solution: gRecaptchaResponse

HCaptchaTaskProxyless

hCaptcha

Solve hCaptcha using browser automation.

Solution: gRecaptchaResponse

TurnstileTaskProxyless

Turnstile

Solve Cloudflare Turnstile challenge.

Solution: token

TurnstileTaskProxylessM1

Turnstile (M1)

Cloudflare Turnstile using M1 model.

Solution: token

ImageToTextTask

Image Text

Standard image text captcha. Send base64-encoded image in body field.

Solution: text (JSON string with captcha_type, result)

ImageToTextTaskMuggle

Image Text

Muggle-style image captcha variant for specialized formats.

Solution: text

ImageToTextTaskM1

Image Text

Image captcha using M1 model for enhanced recognition.

Solution: text

HCaptchaClassification

Classification

Classify hCaptcha images. Send array of base64 images in queries field with question.

Solution: objects (list of indices) or answer

ReCaptchaV2Classification

Classification

Classify reCAPTCHA v2 grid images. Send base64 image with question.

Solution: objects or answer

FunCaptchaClassification

Classification

Classify FunCaptcha images for rotation/selection tasks.

Solution: objects or answer

AwsClassification

Classification

Classify AWS WAF captcha images.

Solution: objects or answer

Error Codes

Standard error codes returned by the API

Error IDError CodeDescription
0โ€”No error (success)
1ERROR_KEY_DOES_NOT_EXISTInvalid clientKey
1ERROR_WRONG_GOOGLEKEYInvalid websiteKey for reCAPTCHA tasks
1ERROR_BAD_TOKENInvalid or expired taskId
1ERROR_CAPTCHA_UNSOLVABLECaptcha could not be solved
1ERROR_NO_SUCH_METHODUnsupported task type
1ERROR_TASK_NOT_FOUNDtaskId does not exist

Interactive Try-It

Test the API directly from your browser

Response will appear here...