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
Get your API key
Sign up at capresolve.com to get your API key from the dashboard.
Create a solve task
Send a POST request to create a new solve job with your target site details.
/solvecurl -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"
}'Retrieve the token
Poll the result endpoint with your task ID to get the solved token.
/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
/solveCreate a new reCAPTCHA v3 solve task
Request Headers
| Header | Required | Description |
|---|---|---|
| api-key | Required | Your CapResolve API key |
| Content-Type | Required | application/json |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_url | string | Required | The page URL where reCAPTCHA is loaded |
| site_key | string | Required | The reCAPTCHA site key from the target website |
| action | string | Required | The reCAPTCHA action name (e.g., login, submit) |
| kind | string | Required | Challenge type: recap_v3 |
| proxy | string | Optional | Custom proxy URL (uses default proxy if empty) |
| referral | string | Optional | Your referral code for earning credits |
Code Examples
Complete integration examples in popular languages.
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.
{
"task_id": "abc123-def456-ghi789"
}| Field | Type | Description |
|---|---|---|
| task_id | string | Unique 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.
Invalid request parameters. Check your request body format and required fields.
{ "error": "invalid siteKey format" }Invalid or missing API key. Ensure api-key header is set correctly.
{ "error": "invalid api key" }Insufficient balance. Top up your account to continue making requests.
{ "error": "insufficient balance" }Job ID not found. The task may have expired or the ID is incorrect.
{ "error": "job not found" }Rate limit exceeded. Implement exponential backoff and retry.
{ "error": "rate limit exceeded", "retry_after": 60 }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: pendingvsstatus: solvedwhen polling
Pricing
Simple, usage-based pricing. Pay only for successful solves.
reCAPTCHA v3
< 3s- Standard reCAPTCHA v3
- Fast response times
- High success rate
- Action-specific tokens
Need custom volume pricing?
Contact us for enterprise plans and dedicated support.
Ready to get started? Create a free account and get your API key today.