reCAPTCHA v2
Connect the checkbox to your form submission. Find the public key on the checkbox or invisible widget, then pair it with the form page. The Google secret stays in your application's server validation.
{
"clientKey": "capzy_YOUR_API_KEY",
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://example.com/signup",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
}
}Illustrative values. Replace the inputs with values from your current integration.
Find the checkbox's site key.
Find the public key on the checkbox or invisible widget, then pair it with the form page. The Google secret stays in your application's server validation.
Your API key authenticates Capzy.
Provider keys, challenge IDs, images, and session values belong inside task.
Copy data-sitekey from the correct widget.
- Open the form, right-click the reCAPTCHA area, and choose Inspect. In Elements, search for g-recaptcha or data-sitekey.
- Copy the attribute value into websiteKey and the complete form URL into websiteURL. Check the parent form when several widgets are present.
- Read data-size. Set isInvisible: true only when this v2 integration uses invisible mode.
<div class="g-recaptcha"
data-sitekey="YOUR_PUBLIC_SITE_KEY"
data-size="normal">
</div>The public site key identifies Google's widget. Your Capzy credential is the separate clientKey field.
Provider integration documentationHow reCAPTCHA v2 works
reCAPTCHA v2 presents a checkbox ('I'm not a robot') that users must click. If Google's risk engine is suspicious, it shows image grid challenges ('Select all images with traffic lights'). The invisible variant skips the checkbox and triggers programmatically. reCAPTCHA v2 is still widely used on login forms, registration pages, and anywhere Google's free captcha is deployed. reCAPTCHA v2 Enterprise is the same checkbox or invisible widget, loaded from /recaptcha/enterprise.js instead of /recaptcha/api.js. The token looks identical, but Google only accepts it for an Enterprise sitekey when it was minted through the Enterprise flow. Select the Enterprise variant on this page (ReCaptchaV2EnterpriseTaskProxyLess, or ReCaptchaV2EnterpriseTask with your proxy) whenever the page loads enterprise.js or calls grecaptcha.enterprise.render().
Capzy's proprietary solver returns valid reCAPTCHA v2 tokens for authorized testing and automation. Both checkbox and invisible modes are supported. Standard and Enterprise sitekeys use separate task types; pick the matching request variant below and the examples update to the right type.
- Checkbox + image challenge solving
- Invisible variant support (isInvisible: true)
- Enterprise sitekeys via ReCaptchaV2EnterpriseTaskProxyLess / ReCaptchaV2EnterpriseTask
- Capzy proprietary models handle every challenge type — no human workers
- Capzy proprietary infrastructure — high-quality solves
- ~8 second average solve time
Know what goes in.
Choose a field to see its purpose, where to get it, and its place in the request. Optional values omitted from the example can be added when your flow uses them.
Standard v2. The page loads /recaptcha/api.js and renders a g-recaptcha element or calls grecaptcha.render(). Proxy mode sends ReCaptchaV2Task through your own exit.
Request authentication
Required task inputs
Optional context
websiteURL
stringRequiredThe page URL where reCAPTCHA is loaded
Copy the full page URL from the address bar or the document request in Network, including the path where this flow runs.
Open the input guidehttps://example.com/signup{
"clientKey": "capzy_YOUR_API_KEY",
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://example.com/signup",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
}
}The selected field is highlighted when present. Preserve the declared value type and current challenge context.
Make your first request.
Create the task, keep its taskId, and poll until status is ready. Then read the selected variant's solution.
- Create the task
Send
clientKeyand the selectedtaskto/createTaskfrom your server. Keep the returnedtaskId. - Wait for the solution
Send that same key and ID to
/getTaskResult. While processing, wait two seconds before checking again. Stop on Ready or an error. - Apply the result
Read solution.gRecaptchaResponse and pass it through the form's g-recaptcha-response field or its existing response callback. Submit it promptly with the original form fields; your application's server performs Google validation.
import json, os, time
import requests
API = "https://api.capzy.ai"
KEY = os.environ["CAPZY_API_KEY"]
task = json.loads("{\"type\":\"ReCaptchaV2TaskProxyLess\",\"websiteURL\":\"https://example.com/signup\",\"websiteKey\":\"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-\"}")
def call(path, payload):
response = requests.post(f"{API}/{path}", json={"clientKey": KEY, **payload}, timeout=30)
response.raise_for_status()
data = response.json()
if data.get("errorId", 0) or data.get("status") == "failed":
raise RuntimeError(data.get("errorDescription") or data.get("errorCode") or "Task failed")
return data
created = call("createTask", {"task": task})
for attempt in range(60):
result = call("getTaskResult", {"taskId": created["taskId"]})
if result.get("status") == "ready":
solution = result["solution"]
print(solution)
break
time.sleep(2)
else:
raise TimeoutError("Task is still processing; keep the taskId to check it later.")
Before runningReplace all illustrative inputs with your captured values. Set CAPZY_API_KEY in your environment. Install requests with pip install requests.
Polling and failuresThe example checks HTTP/API failures, uses 30-second request timeouts, and stops after 60 result checks. Retain taskId if your task is still processing.
Understand what comes back.
Follow this task from creation to completion. Response fields and usage follow your selected request variant.
gRecaptchaResponse token
Read solution.gRecaptchaResponse and pass it through the form's g-recaptcha-response field or its existing response callback. Submit it promptly with the original form fields; your application's server performs Google validation.
- string
- The solved token. Submit in g-recaptcha-response textarea
{
"errorId": 0,
"status": "ready",
"solution": {
"gRecaptchaResponse": "03AGdBq25...<long opaque token>..."
}
}Illustrative values. Additional metadata may be returned; only Ready contains a completed solution.
Use the result
Read solution.gRecaptchaResponse and pass it through the form's g-recaptcha-response field or its existing response callback. Submit it promptly with the original form fields; your application's server performs Google validation.
Execution context result is the parsed Ready response from the polling example. session, when referenced, is your existing requests.Session (or browser-compatible session) with the original cookie jar, headers, and solving proxy configured in session.proxies for both http and https. Keep this client for the complete flow. task is the task object you submitted. For Shape, action_body is the original protected request body as bytes or a string, with its original Content-Type in session.headers. Install curl_cffi when the fragment imports it; match the target's required browser/TLS identity.
# 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)When something doesn't work.
Check your captured values, the selected variant, and the response before starting another task.
Do you solve the image grid challenges?
Yes — Capzy's proprietary solver handles both audio and image challenges automatically. You don't need to choose.
What about invisible reCAPTCHA?
Set isInvisible: true in your task. We'll inject the widget in invisible mode and auto-execute it. Most invisible instances auto-pass without a challenge.
How do I use the token?
Set the value of the textarea named 'g-recaptcha-response' to the token, then submit the form. In JS: document.querySelector('textarea[name="g-recaptcha-response"]').value = token
How do I know if the site uses v2 Enterprise?
Check the script, not the widget. Enterprise pages load /recaptcha/enterprise.js and call grecaptcha.enterprise.render(); standard v2 pages load /recaptcha/api.js and call grecaptcha.render(). The checkbox looks identical in both cases, so open the page source or the Network panel.
How do I solve an Enterprise sitekey?
Select the Enterprise variant above and send ReCaptchaV2EnterpriseTaskProxyLess, or ReCaptchaV2EnterpriseTask with your own proxy. The parameters are the same as standard v2: websiteURL, websiteKey, and isInvisible when the widget is invisible. There is no isEnterprise flag; the task type is what switches the solver to enterprise.js.
My Enterprise token is rejected. What should I check?
First the task type: a standard v2 token never validates against an Enterprise sitekey, and an Enterprise token never validates against a standard one. Then confirm websiteURL is the exact page that hosts the widget and websiteKey is that widget's sitekey. Enterprise risk analysis also weighs the submitting IP more than standard v2, so when you submit from a different IP than the solve, use ReCaptchaV2EnterpriseTask with the same proxy for both.
Connect reCAPTCHA v2 to your workflow.
Get your Capzy API key and use this guide's integration.
ReCaptchaV2TaskProxyLess · Live configuration