Before you submit — these must be correct
If any of these are wrong, your token may be accepted by our solver but rejected or scored poorly by the target site. We can’t detect these mismatches for you.
- pageAction must match the site's real action. Enterprise sitekeys are stricter than standard v3 about action mismatches — use the exact string the site's JS passes to grecaptcha.enterprise.execute().
- websiteURL must be the exact page URL where reCAPTCHA Enterprise loads. Domain-only URLs or wrong paths produce invalid tokens.
- Proxy quality is the #1 factor in your score. Google's Enterprise risk analysis is harsher on flagged IPs than standard v3 — a mobile or residential IP from your own provider will always score higher than our shared proxyless pool.
- Don't use the standard ReCaptchaV3Task type — Enterprise sitekeys require the Enterprise task type (ReCaptchaV3EnterpriseTask or ReCaptchaV3EnterpriseTaskProxyLess). Using the wrong type produces a token Google rejects.
What is reCAPTCHA v3 Enterprise?
reCAPTCHA v3 Enterprise is Google's paid tier of v3 — same invisible scoring model (0.0 bot to 1.0 human), same grecaptcha.execute() API, but loads from /recaptcha/enterprise.js and includes additional risk signals that Google only exposes to Enterprise customers. If a site's JavaScript loads enterprise.js or the sitekey was registered as Enterprise in Google's admin console, standard v3 tokens will not verify — you need the Enterprise task type.
How it works
Send Task
POST your ReCaptchaV3EnterpriseTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Capzy's proprietary solver returns valid reCAPTCHA v3 Enterprise tokens. Same operational guarantees as standard v3 — the score depends on the requesting IP, so use the Task variant with your own proxy when score sensitivity matters.
Get Token
Poll getTaskResult — when status is 'ready', the solution contains the token to inject into the target page.
Quick integration
import requests, time
API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"
# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "ReCaptchaV3EnterpriseTaskProxyLess",
"pageAction": "login",
"websiteKey": "6LcR_RsTAAAAADHmXXPJh-Lr7Mz4aCezAo3vKWiq",
"websiteURL": "https://example.com/login"
}
}).json()
task_id = task["taskId"]
print(f"Task created: {task_id}")
# Step 2: Poll for result
while True:
result = requests.post(f"{API}/getTaskResult", json={
"clientKey": KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
print("Solved!", result["solution"])
break
elif result["status"] == "failed":
print("Failed:", result.get("errorDescription"))
break
time.sleep(1)
# Step 3: Use the result — paste the token into g-recaptcha-response
token = result["solution"]["gRecaptchaResponse"]
# Browser side: document.querySelector('textarea[name="g-recaptcha-response"]').value = token
# Or include it in your form POST:
resp = requests.post("https://target.example.com/login", data={
"username": "...",
"password": "...",
"g-recaptcha-response": token,
})
print(resp.status_code)Using your own proxy
Use ReCaptchaV3EnterpriseTask instead of ReCaptchaV3EnterpriseTaskProxyLess to route the solve through your own proxy. This is useful when the target site checks the IP that solved the captcha matches the IP submitting the form.
import requests, time
API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"
# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "ReCaptchaV3EnterpriseTask",
"proxyPort": "8080",
"proxyType": "http",
"pageAction": "login",
"proxyLogin": "user",
"websiteKey": "6LcR_RsTAAAAADHmXXPJh-Lr7Mz4aCezAo3vKWiq",
"websiteURL": "https://example.com/login",
"proxyAddress": "123.45.67.89",
"proxyPassword": "pass"
}
}).json()
task_id = task["taskId"]
print(f"Task created: {task_id}")
# Step 2: Poll for result
while True:
result = requests.post(f"{API}/getTaskResult", json={
"clientKey": KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
print("Solved!", result["solution"])
break
elif result["status"] == "failed":
print("Failed:", result.get("errorDescription"))
break
time.sleep(1)
# Step 3: Use the result — paste the token into g-recaptcha-response
token = result["solution"]["gRecaptchaResponse"]
# Browser side: document.querySelector('textarea[name="g-recaptcha-response"]').value = token
# Or include it in your form POST:
resp = requests.post("https://target.example.com/login", data={
"username": "...",
"password": "...",
"g-recaptcha-response": token,
})
print(resp.status_code)additional proxy parameters
proxyTypetypestringreqyesProxy protocol: http or httpsproxyAddresstypestringreqyesProxy IP address or hostnameproxyPorttypenumberreqyesProxy port numberproxyLogintypestringreqnoProxy username (if auth required)proxyPasswordtypestringreqnoProxy password (if auth required)userAgenttypestringreqnoUser-Agent string to use. Must match the UA you use when submitting the tokenTask parameters
typetypestringreqyesReCaptchaV3EnterpriseTaskProxyLess or ReCaptchaV3EnterpriseTaskwebsiteURLtypestringreqyesThe URL of the page where reCAPTCHA v3 Enterprise is loadedwebsiteKeytypestringreqyesThe Enterprise sitekey (starts with 6L...)pageActiontypestringreqnoThe action passed to grecaptcha.enterprise.execute(). Must match the site's JSminScoretypenumberreqnoMinimum score required (0.1-0.9). When set ≥ 0.7, routes through the high-quality solver path and is billed at 2× the standard rate. Omit for the standard tier.Solution response
gRecaptchaResponsetypestringThe solved Enterprise token — submit to your Enterprise siteverify endpointuserAgenttypestringThe User-Agent string the solver used to mint the token. Submit it from the same UA on your backend if Google's siteverify enforces UA binding.expireTimetypenumberUnix milliseconds when the token expires (issued time + 120s).Example response
Full getTaskResult response shape. The fields in the table above describe what's inside solution — the outer envelope (errorId, status) is identical for every captcha type.
{
"errorId": 0,
"status": "ready",
"solution": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"expireTime": 1735689720000,
"gRecaptchaResponse": "03AGdBq25...<long Enterprise v3 token>..."
}
}Error response
Failures use the same envelope with errorId: 1 plus errorCode + errorDescription. See the error-code reference for the full list.
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Solver gave up — automatically refunded."
}Pending response
While the solver is still working, getTaskResult returns status: "processing". Poll every 1–2 seconds until ready or failed.
{
"errorId": 0,
"status": "processing"
}Features
task types
proxyless: ReCaptchaV3EnterpriseTaskProxyLess
with proxy: ReCaptchaV3EnterpriseTask