Google reCAPTCHA v3 Enterprise
Google reCAPTCHA Enterprise is the business-grade iteration of reCAPTCHA v3, offering enhanced risk analysis, granular scoring, and deeper integration with Google Cloud security infrastructure.
SolverCF solves reCAPTCHA v3 Enterprise transparently using specialized browser automation.
Task Types
RecaptchaV3EnterpriseTaskProxyless(Recommended): Automatically routes solving through SolverCF's high-reputation network.RecaptchaV3EnterpriseTask: Uses your own specified proxy.
Task Object Parameters
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes | "RecaptchaV3EnterpriseTaskProxyless" or "RecaptchaV3EnterpriseTask". |
websiteUrl |
string | Yes | The full URL of the page where reCAPTCHA v3 Enterprise is rendered (https://...). |
websiteKey |
string | Yes | The Enterprise site key extracted from the target page. |
pageAction |
string | No | The action parameter passed to grecaptcha.enterprise.execute() (e.g. "login", "checkout"). |
minScore |
number | No | Minimum acceptable score (0.1 to 0.9). Defaults to high score (0.7–0.9). |
proxy |
string | Required for EnterpriseTask |
Your proxy in host:port or host:port:user:pass format. |
userAgent |
string | No | Specific browser User-Agent to solve with. |
Identifying Enterprise vs Standard v3
Inspect the page source to check if the target site uses Enterprise:
- Look for
enterprise.jsin the script tags:Html<script src="https://www.google.com/recaptcha/enterprise.js?render=6Ld_XYZ_EnterpriseKey"></script> - Or check for calls to
grecaptcha.enterprise:JavaScriptgrecaptcha.enterprise.execute('6Ld_XYZ_EnterpriseKey', { action: 'login' }) .then(function(token) { ... });
API Workflow
Step 1: Create Task
Send a POST request to https://solvercf.com/token/extension/createTask:
JSON
{
"clientKey": "YOUR_CLIENT_KEY",
"task": {
"type": "RecaptchaV3EnterpriseTaskProxyless",
"websiteUrl": "https://example.com/checkout",
"websiteKey": "6Ld_XYZ_EnterpriseKey",
"pageAction": "checkout",
"minScore": 0.7
}
}
Response:
JSON
{
"errorId": 0,
"taskId": "e1f2a3b4-c5d6-7e8f-9a0b-1c2d3e4f5a6b",
"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": "e1f2a3b4-c5d6-7e8f-9a0b-1c2d3e4f5a6b"
}
When solved, status becomes "ready":
JSON
{
"errorId": 0,
"taskId": "e1f2a3b4-c5d6-7e8f-9a0b-1c2d3e4f5a6b",
"status": "ready",
"cost": 0.0009,
"solution": {
"type": "RecaptchaV3EnterpriseTaskProxyless",
"token": "03AFcWeA8...",
"gRecaptchaResponse": "03AFcWeA8...",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
}
}
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": "RecaptchaV3EnterpriseTaskProxyless",
"websiteUrl": "https://example.com/checkout",
"websiteKey": "6Ld_XYZ_EnterpriseKey",
"pageAction": "checkout",
"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/checkout"
WEBSITE_KEY = "6Ld_XYZ_EnterpriseKey"
def solve_recaptcha_v3_enterprise(client_key: str, website_url: str, website_key: str, page_action: str = "checkout", min_score: float = 0.7, proxy: str = None):
# 1. Create task
task_type = "RecaptchaV3EnterpriseTask" if proxy else "RecaptchaV3EnterpriseTaskProxyless"
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 Enterprise 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 Enterprise timed out")
if __name__ == "__main__":
result = solve_recaptcha_v3_enterprise(CLIENT_KEY, WEBSITE_URL, WEBSITE_KEY, page_action="checkout")
Node.js
JavaScript
const CLIENT_KEY = "YOUR_CLIENT_KEY";
const WEBSITE_URL = "https://example.com/checkout";
const WEBSITE_KEY = "6Ld_XYZ_EnterpriseKey";
async function solveRecaptchaV3Enterprise(clientKey, websiteUrl, websiteKey, pageAction = "checkout", minScore = 0.7, proxy = null) {
// 1. Create task
const taskType = proxy ? "RecaptchaV3EnterpriseTask" : "RecaptchaV3EnterpriseTaskProxyless";
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 Enterprise 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 Enterprise timed out");
}
solveRecaptchaV3Enterprise(CLIENT_KEY, WEBSITE_URL, WEBSITE_KEY, "checkout", 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/checkout";
private const string WebsiteKey = "6Ld_XYZ_EnterpriseKey";
static async Task Main()
{
var solution = await SolveRecaptchaV3EnterpriseAsync(ClientKey, WebsiteUrl, WebsiteKey, "checkout", 0.7);
Console.WriteLine($"Token: {solution.Token}");
Console.WriteLine($"UserAgent: {solution.UserAgent}");
}
public static async Task<RecaptchaSolution> SolveRecaptchaV3EnterpriseAsync(
string clientKey,
string websiteUrl,
string websiteKey,
string pageAction = "checkout",
double minScore = 0.7,
string? proxy = null)
{
string taskType = string.IsNullOrEmpty(proxy) ? "RecaptchaV3EnterpriseTaskProxyless" : "RecaptchaV3EnterpriseTask";
// 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 Enterprise timed out");
}
public class RecaptchaSolution
{
public string? Token { get; set; }
public string? UserAgent { get; set; }
}
}