Google reCAPTCHA v3
Google reCAPTCHA v3 is an invisible CAPTCHA system that returns a risk score (from 0.0 to 1.0) representing how likely an interaction is to be human, without showing visual challenges to visitors.
SolverCF provides fast, high-score solving for reCAPTCHA v3 using real browser environments.
Task Types
RecaptchaV3TaskProxyless(Recommended): Uses SolverCF's premium residential worker network to solve the captcha. No proxy configuration required on your side.RecaptchaV3Task: Solves the captcha using your own specified proxy.
Task Object Parameters
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes | "RecaptchaV3TaskProxyless" or "RecaptchaV3Task". |
websiteUrl |
string | Yes | The full URL of the page where reCAPTCHA v3 is rendered (https://...). |
websiteKey |
string | Yes | The reCAPTCHA v3 site key extracted from the target page. |
pageAction |
string | No | The action parameter passed to grecaptcha.execute() (e.g. "login", "register", "verify"). Highly recommended to match the target site. |
minScore |
number | No | Minimum score required (0.1 to 0.9). SolverCF workers deliver high scores (0.7–0.9). |
proxy |
string | Required for RecaptchaV3Task |
Your proxy in host:port or host:port:user:pass format. |
userAgent |
string | No | Specific browser User-Agent to solve with. |
Finding the Site Key & Action
Open the browser's Developer Tools (Inspect Elements) or view page source:
- Find the reCAPTCHA script tag:Html
<script src="https://www.google.com/recaptcha/api.js?render=6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8"></script> - Search for the
grecaptcha.executecall:Here,JavaScriptgrecaptcha.execute('6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8', { action: 'login' }) .then(function(token) { ... });websiteKeyis6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8andpageActionis"login".
API Workflow
Step 1: Create Task
Send a POST request to https://solvercf.com/token/extension/createTask:
JSON
{
"clientKey": "YOUR_CLIENT_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteUrl": "https://example.com/login",
"websiteKey": "6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8",
"pageAction": "login",
"minScore": 0.7
}
}
Response:
JSON
{
"errorId": 0,
"taskId": "c1d2e3f4-a5b6-7c8d-9e0f-1a2b3c4d5e6f",
"status": "created"
}
Step 2: Poll Task Result
Send periodic POST requests (every 1.5s) to https://solvercf.com/token/extension/getTaskResult:
JSON
{
"clientKey": "YOUR_CLIENT_KEY",
"taskId": "c1d2e3f4-a5b6-7c8d-9e0f-1a2b3c4d5e6f"
}
When solved, status becomes "ready":
JSON
{
"errorId": 0,
"taskId": "c1d2e3f4-a5b6-7c8d-9e0f-1a2b3c4d5e6f",
"status": "ready",
"cost": 0.0009,
"solution": {
"type": "RecaptchaV3TaskProxyless",
"token": "03AFcWeA7...",
"gRecaptchaResponse": "03AFcWeA7...",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
}
}
Submit solution.token (or solution.gRecaptchaResponse) as the captcha response payload along with the matching solution.userAgent.
Complete Code Examples
cURL
Step 1: Create Task
cURL
curl -X POST https://solvercf.com/token/extension/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_CLIENT_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteUrl": "https://example.com/login",
"websiteKey": "6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8",
"pageAction": "login",
"minScore": 0.7
}
}'
Step 2: Get Task Result
cURL
curl -X POST https://solvercf.com/token/extension/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_CLIENT_KEY",
"taskId": "YOUR_TASK_ID_FROM_STEP_1"
}'
Python
Python
import time
import requests
CLIENT_KEY = "YOUR_CLIENT_KEY"
WEBSITE_URL = "https://example.com/login"
WEBSITE_KEY = "6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8"
def solve_recaptcha_v3(client_key: str, website_url: str, website_key: str, page_action: str = "login", min_score: float = 0.7, proxy: str = None):
# 1. Create task
task_type = "RecaptchaV3Task" if proxy else "RecaptchaV3TaskProxyless"
payload = {
"clientKey": client_key,
"task": {
"type": task_type,
"websiteUrl": website_url,
"websiteKey": website_key,
"pageAction": page_action,
"minScore": min_score
}
}
if proxy:
payload["task"]["proxy"] = proxy
create_resp = requests.post("https://solvercf.com/token/extension/createTask", json=payload).json()
if create_resp.get("errorId") == 1:
raise Exception(f"Create task failed: {create_resp.get('errorDescription')}")
task_id = create_resp["taskId"]
print(f"Task created: {task_id}")
# 2. Poll result
timeout = 90
start = time.time()
while time.time() - start < timeout:
time.sleep(1.5)
res = requests.post("https://solvercf.com/token/extension/getTaskResult", json={
"clientKey": client_key,
"taskId": task_id
}).json()
status = res.get("status")
if status == "ready":
solution = res["solution"]
print("reCAPTCHA v3 solved successfully!")
print(f"Token: {solution['token']}")
print(f"UserAgent: {solution['userAgent']}")
return solution
if status in ("failed", "expired"):
raise Exception(f"Task failed with status: {status}")
raise TimeoutError("Solving reCAPTCHA v3 timed out")
if __name__ == "__main__":
result = solve_recaptcha_v3(CLIENT_KEY, WEBSITE_URL, WEBSITE_KEY, page_action="login")
Node.js
JavaScript
const CLIENT_KEY = "YOUR_CLIENT_KEY";
const WEBSITE_URL = "https://example.com/login";
const WEBSITE_KEY = "6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8";
async function solveRecaptchaV3(clientKey, websiteUrl, websiteKey, pageAction = "login", minScore = 0.7, proxy = null) {
// 1. Create task
const taskType = proxy ? "RecaptchaV3Task" : "RecaptchaV3TaskProxyless";
const createRes = await fetch("https://solvercf.com/token/extension/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey,
task: {
type: taskType,
websiteUrl,
websiteKey,
pageAction,
minScore,
...(proxy ? { proxy } : {}),
},
}),
}).then((r) => r.json());
if (createRes.errorId === 1) {
throw new Error(`Failed to create task: ${createRes.errorDescription}`);
}
const taskId = createRes.taskId;
console.log(`Task created: ${taskId}`);
// 2. Poll result
const deadline = Date.now() + 90000;
while (Date.now() < deadline) {
await new Promise((resolve) => setTimeout(resolve, 1500));
const resultRes = await fetch("https://solvercf.com/token/extension/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey, taskId }),
}).then((r) => r.json());
if (resultRes.status === "ready") {
console.log("reCAPTCHA v3 solved successfully!");
return resultRes.solution;
}
if (resultRes.status === "failed" || resultRes.status === "expired") {
throw new Error(`Task ended with status: ${resultRes.status}`);
}
}
throw new Error("Solving reCAPTCHA v3 timed out");
}
solveRecaptchaV3(CLIENT_KEY, WEBSITE_URL, WEBSITE_KEY, "login", 0.7)
.then((solution) => console.log(solution))
.catch((err) => console.error(err));
C#
C#
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
private static readonly HttpClient HttpClient = new HttpClient();
private const string ClientKey = "YOUR_CLIENT_KEY";
private const string WebsiteUrl = "https://example.com/login";
private const string WebsiteKey = "6LeSYmUtAAAAADy78hcvyfvGXqWKqN4aaFs2vyG8";
static async Task Main()
{
var solution = await SolveRecaptchaV3Async(ClientKey, WebsiteUrl, WebsiteKey, "login", 0.7);
Console.WriteLine($"Token: {solution.Token}");
Console.WriteLine($"UserAgent: {solution.UserAgent}");
}
public static async Task<RecaptchaSolution> SolveRecaptchaV3Async(
string clientKey,
string websiteUrl,
string websiteKey,
string pageAction = "login",
double minScore = 0.7,
string? proxy = null)
{
string taskType = string.IsNullOrEmpty(proxy) ? "RecaptchaV3TaskProxyless" : "RecaptchaV3Task";
// 1. Create task
var createResponse = await HttpClient.PostAsJsonAsync("https://solvercf.com/token/extension/createTask", new
{
clientKey,
task = new
{
type = taskType,
websiteUrl,
websiteKey,
pageAction,
minScore,
proxy
}
});
var createJson = await createResponse.Content.ReadFromJsonAsync<JsonElement>();
if (createJson.TryGetProperty("errorId", out var errorId) && errorId.GetInt32() == 1)
{
throw new Exception($"Failed to create task: {createJson.GetProperty("errorDescription").GetString()}");
}
string taskId = createJson.GetProperty("taskId").GetString()!;
Console.WriteLine($"Task created: {taskId}");
// 2. Poll result
DateTime deadline = DateTime.UtcNow.AddSeconds(90);
while (DateTime.UtcNow < deadline)
{
await Task.Delay(1500);
var resultResponse = await HttpClient.PostAsJsonAsync("https://solvercf.com/token/extension/getTaskResult", new
{
clientKey,
taskId
});
var resultJson = await resultResponse.Content.ReadFromJsonAsync<JsonElement>();
string status = resultJson.GetProperty("status").GetString()!;
if (status == "ready")
{
var solutionElement = resultJson.GetProperty("solution");
return new RecaptchaSolution
{
Token = solutionElement.GetProperty("token").GetString(),
UserAgent = solutionElement.GetProperty("userAgent").GetString()
};
}
if (status == "failed" || status == "expired")
{
throw new Exception($"Task ended with status: {status}");
}
}
throw new TimeoutException("Solving reCAPTCHA v3 timed out");
}
public class RecaptchaSolution
{
public string? Token { get; set; }
public string? UserAgent { get; set; }
}
}