reCAPTCHA v3

reCAPTCHA v3 API Documentation

Solve reCAPTCHA v3 challenges with our fast, reliable API. Integrate in minutes with simple REST endpoints and get tokens in under 3 seconds.

<3s

Avg. Response

99.9%

Uptime

500M+

Tasks Solved

160+

Regions

Quick Start

1

Get your API key

Sign up at capresolve.com to get your API key from the dashboard.

2

Create a solve task

Send a POST request to create a new solve job with your target site details.

POST/solve
curl -X POST https://api.capresolve.com/solve \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_API_KEY" \
  -d '{
    "site_url": "https://example.com",
    "site_key": "6Le-wvkSAAAAAPBMRTvw0Q...",
    "action": "login",
    "kind": "recap_v3"
  }'
3

Retrieve the token

Poll the result endpoint with your task ID to get the solved token.

GET/solve/{task_id}
curl https://api.capresolve.com/solve/abc123-task-id \
  -H "api-key: YOUR_API_KEY"

API Endpoints

Base URL: https://api.capresolve.com

POST/solve

Create a new reCAPTCHA v3 solve task

Request Headers

HeaderRequiredDescription
api-keyRequiredYour CapResolve API key
Content-TypeRequiredapplication/json

Request Body

ParameterTypeRequiredDescription
site_urlstringRequiredThe page URL where reCAPTCHA is loaded
site_keystringRequiredThe reCAPTCHA site key from the target website
actionstringRequiredThe reCAPTCHA action name (e.g., login, submit)
kindstringRequiredChallenge type: recap_v3
proxystringOptionalCustom proxy URL (uses default proxy if empty)
referralstringOptionalYour referral code for earning credits

Code Examples

Complete integration examples in popular languages.

example.ts
import axios from 'axios';

const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://api.capresolve.com';

interface SolveRequest {
  site_url: string;
  site_key: string;
  action: string;
  kind: string;
  proxy?: string;
  referral?: string;
}

interface TaskResponse {
  task_id: string;
}

interface TokenResponse {
  token: string;
  status: string;
  user_agent: string;
  sec_ch_ua: string;
}

async function createSolveTask(request: SolveRequest): Promise<string> {
  const response = await axios.post<TaskResponse>(
    `${BASE_URL}/solve`,
    request,
    {
      headers: {
        'Content-Type': 'application/json',
        'api-key': API_KEY,
      },
    }
  );
  return response.data.task_id;
}

async function getResult(taskId: string): Promise<TokenResponse> {
  const response = await axios.get<TokenResponse>(
    `${BASE_URL}/solve/${taskId}`,
    {
      headers: {
        'api-key': API_KEY,
      },
    }
  );
  return response.data;
}

async function solveRecaptchaV3() {
  // Step 1: Create solve task
  const taskId = await createSolveTask({
    site_url: 'https://example.com',
    site_key: '6Le-wvkSAAAAAPBMRTvw0Q...',
    action: 'login',
    kind: 'recap_v3',
  });

  console.log('Job created:', taskId);

  // Step 2: Poll for result (with retry logic)
  let result: TokenResponse | null = null;
  for (let i = 0; i < 60; i++) {
    await new Promise(resolve => setTimeout(resolve, 1000));
    try {
      result = await getResult(taskId);
      if (result.token) break;
    } catch (e) {
      // Token not ready yet, continue polling
    }
  }

  if (result?.token) {
    console.log('Token received:', result.token);
    console.log('User-Agent:', result.user_agent);
  }
}

solveRecaptchaV3();

Response Format

All responses are returned in JSON format.

200 OKSuccessful task creation
{
  "task_id": "abc123-def456-ghi789"
}
FieldTypeDescription
task_idstringUnique identifier for the solve task. Use this to poll for results.

Error Handling

The API uses standard HTTP status codes to indicate success or failure.

400Bad Request

Invalid request parameters. Check your request body format and required fields.

{ "error": "invalid siteKey format" }
401Unauthorized

Invalid or missing API key. Ensure api-key header is set correctly.

{ "error": "invalid api key" }
402Payment Required

Insufficient balance. Top up your account to continue making requests.

{ "error": "insufficient balance" }
404Not Found

Job ID not found. The task may have expired or the ID is incorrect.

{ "error": "job not found" }
429Too Many Requests

Rate limit exceeded. Implement exponential backoff and retry.

{ "error": "rate limit exceeded", "retry_after": 60 }
500Internal Error

Server error. Retry the request or contact support if persistent.

{ "error": "internal server error" }

Retry Best Practices

  • Use exponential backoff starting at 300ms for retries
  • Maximum retry attempts: 60 (for polling) or 3 (for errors)
  • Wait 1-3 seconds before first poll after creating a task
  • Check for status: pending vs status: solved when polling

Pricing

Simple, usage-based pricing. Pay only for successful solves.

Most Popular

reCAPTCHA v3

< 3s
$0.80/1,000 requests
  • Standard reCAPTCHA v3
  • Fast response times
  • High success rate
  • Action-specific tokens
Get Started

Need custom volume pricing?

Contact us for enterprise plans and dedicated support.

Contact Sales

Ready to get started? Create a free account and get your API key today.