reCAPTCHA v2
reCAPTCHA v2 is Google’s widely deployed challenge-based CAPTCHA. It appears as a checkbox (“I’m not a robot”) on millions of websites and can also operate in invisible mode, where the challenge is triggered programmatically without user interaction. The uCaptcha API supports standard, invisible, and enterprise variants, with or without a proxy.
Supported Types
Section titled “Supported Types”| Type | Proxy | Description |
|---|---|---|
ReCaptchaV2TokenProxyLess | No | Standard — no proxy needed (recommended) |
ReCaptchaV2Token | Yes | With your proxy |
ReCaptchaV2EnterpriseProxyLess | No | Enterprise version, no proxy |
ReCaptchaV2Enterprise | Yes | Enterprise with proxy |
ReCaptchaV2InvisibleProxyLess | No | Invisible reCAPTCHA, no proxy |
ReCaptchaV2Invisible | Yes | Invisible with proxy |
Parameters
Section titled “Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Task type from the table above |
websiteURL | string | Yes | URL of the page with the captcha |
websiteKey | string | Yes | reCAPTCHA site key (data-sitekey attribute) |
isInvisible | boolean | No | Set to true for invisible reCAPTCHA |
recaptchaDataSValue | string | No | Value of the data-s parameter if present |
apiDomain | string | No | Domain of the reCAPTCHA API (e.g., www.recaptcha.net) |
Enterprise Parameters
Section titled “Enterprise Parameters”These parameters apply only to the enterprise task types.
| Parameter | Type | Required | Description |
|---|---|---|---|
enterprisePayload | object | No | Additional enterprise parameters (e.g., { "s": "value" }) |
Proxy Parameters
Section titled “Proxy Parameters”Required when using a proxy task type (ReCaptchaV2Token, ReCaptchaV2Enterprise, ReCaptchaV2Invisible).
| Parameter | Type | Required | Description |
|---|---|---|---|
proxyType | string | Yes | http, socks4, or socks5 |
proxyAddress | string | Yes | Proxy IP or hostname |
proxyPort | integer | Yes | Proxy port |
proxyLogin | string | No | Proxy username |
proxyPassword | string | No | Proxy password |
Create Task
Section titled “Create Task”Request
Section titled “Request”{ "clientKey": "YOUR_API_KEY", "task": { "type": "ReCaptchaV2TokenProxyLess", "websiteURL": "https://example.com/login", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}Response
Section titled “Response”{ "errorId": 0, "taskId": "abc-123-def"}Solution Object
Section titled “Solution Object”{ "gRecaptchaResponse": "03AGdBq24PBCbwiDRaS_MJ7Z...7Pqz6Jhp2gFnuhaTf3o"}| Field | Type | Description |
|---|---|---|
gRecaptchaResponse | string | The reCAPTCHA response token to submit with the form |
How to Use
Section titled “How to Use”Once you receive the gRecaptchaResponse token, inject it into the target page in one of the following ways:
- Form submission — Set the value of the hidden
g-recaptcha-responsetextarea element and submit the form. - Callback function — Call the site’s reCAPTCHA callback function with the token as the argument.
Code Examples
Section titled “Code Examples”Python
Section titled “Python”import requestsimport time
API_KEY = "YOUR_API_KEY"
# Create taskresponse = requests.post("https://api.ucaptcha.net/createTask", json={ "clientKey": API_KEY, "task": { "type": "ReCaptchaV2TokenProxyLess", "websiteURL": "https://example.com/login", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }})task_id = response.json()["taskId"]
# Poll for resultwhile True: result = requests.post("https://api.ucaptcha.net/getTaskResult", json={ "clientKey": API_KEY, "taskId": task_id }).json()
if result["status"] == "ready": token = result["solution"]["gRecaptchaResponse"] print("Token:", token) break elif result["status"] == "failed": print("Error:", result.get("errorDescription")) break
time.sleep(5)JavaScript
Section titled “JavaScript”const API_KEY = "YOUR_API_KEY";
const { taskId } = await fetch("https://api.ucaptcha.net/createTask", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ clientKey: API_KEY, task: { type: "ReCaptchaV2TokenProxyLess", websiteURL: "https://example.com/login", websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } })}).then(r => r.json());
while (true) { const result = await fetch("https://api.ucaptcha.net/getTaskResult", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ clientKey: API_KEY, taskId }) }).then(r => r.json());
if (result.status === "ready") { console.log("Token:", result.solution.gRecaptchaResponse); break; } else if (result.status === "failed") { console.error("Error:", result.errorDescription); break; }
await new Promise(r => setTimeout(r, 5000));}# Create taskcurl -X POST https://api.ucaptcha.net/createTask \ -H "Content-Type: application/json" \ -d '{ "clientKey": "YOUR_API_KEY", "task": { "type": "ReCaptchaV2TokenProxyLess", "websiteURL": "https://example.com/login", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" } }'
# Poll for result (replace TASK_ID with the taskId from above)curl -X POST https://api.ucaptcha.net/getTaskResult \ -H "Content-Type: application/json" \ -d '{ "clientKey": "YOUR_API_KEY", "taskId": "TASK_ID" }'Provider Coverage
Section titled “Provider Coverage”- 2Captcha
- CapSolver
- Anti-Captcha
- CapMonster
- DeathByCaptcha
- 2Crawler
- Multibot
Aliases
Section titled “Aliases”The following legacy type names are also accepted for backward compatibility:
RecaptchaV2TaskRecaptchaV2TaskProxylessNoCaptchaTaskNoCaptchaTaskProxyless