API Tutorials

How to Solve reCAPTCHA v3 Enterprise Using API

reCAPTCHA v3 Enterprise combines score-based verification with Google's Enterprise backend. It runs silently and returns a risk score, but token verification goes through recaptchaenterprise.googleapis.com instead of the public siteverify endpoint. To solve it through CaptchaAI, add two flags: version=v3 and enterprise=1.


What you need

Requirement Details
CaptchaAI API key captchaai.com/api.php
Sitekey From enterprise.js?render=SITEKEY
Action From grecaptcha.enterprise.execute(key, {action: '...'})
Page URL Full URL where v3 Enterprise runs

Detect v3 Enterprise

// Enterprise v3 indicators:
// 1. Script: <script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>
// 2. Execute call: grecaptcha.enterprise.execute('SITEKEY', {action: 'login'})
// 3. No visible checkbox or challenge — it runs silently

// Standard v3 uses api.js and grecaptcha (not enterprise)

Submit to CaptchaAI

import requests
import time

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "version": "v3",
    "enterprise": 1,
    "googlekey": "6LfZil0UAAAAADM1Dpzsw9q...",
    "action": "login",
    "pageurl": "https://example.com/login",
    "json": 1
})

data = response.json()
task_id = data["request"]

# Poll for result
for _ in range(30):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        token = result["request"]
        print(f"Token: {token[:50]}...")
        break
    if result.get("request") != "CAPCHA_NOT_READY":
        raise RuntimeError(f"Error: {result['request']}")
const params = new URLSearchParams({
  key: "YOUR_API_KEY", method: "userrecaptcha", version: "v3",
  enterprise: 1, googlekey: "6LfZil0UAAAAADM1Dpzsw9q...",
  action: "login", pageurl: "https://example.com/login", json: 1,
});

const submitRes = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const { request: taskId } = await submitRes.json();

let token;
for (let i = 0; i < 30; i++) {
  await new Promise(r => setTimeout(r, 5000));
  const res = await fetch(`https://ocr.captchaai.com/res.php?${new URLSearchParams({
    key: "YOUR_API_KEY", action: "get", id: taskId, json: 1,
  })}`);
  const data = await res.json();
  if (data.status === 1) { token = data.request; break; }
  if (data.request !== "CAPCHA_NOT_READY") throw new Error(data.request);
}

Use the token

Submit the token with your request — v3 Enterprise tokens go in the g-recaptcha-response field:

response = requests.post("https://example.com/api/login", data={
    "username": "user",
    "password": "pass",
    "g-recaptcha-response": token
})

Enterprise v3 vs standard v3

Feature Standard v3 Enterprise v3
Script api.js?render=KEY enterprise.js?render=KEY
JS object grecaptcha.execute() grecaptcha.enterprise.execute()
Verification siteverify recaptchaenterprise.googleapis.com
CaptchaAI params version=v3 version=v3 + enterprise=1

FAQ

What parameters do I add for Enterprise v3?

Two: version=v3 and enterprise=1. Both are required.

What score does CaptchaAI return for Enterprise v3?

Typically 0.3. Most Enterprise implementations accept this score.

How do I find the action for Enterprise v3?

Search for grecaptcha.enterprise.execute in the page JavaScript. The second argument contains {action: 'value'}.

Can Enterprise v3 use data-s?

Some implementations include data-s. If present on the page, include it in your CaptchaAI request.

Why is my Enterprise v3 token rejected?

Common causes: missing enterprise=1, wrong action value, wrong sitekey, or token expired (>2 min).


Start solving reCAPTCHA v3 Enterprise

Get your API key at captchaai.com/api.php. Add version=v3 and enterprise=1 to your request.


Full Working Code

Complete runnable examples for this article in Python, Node.js, PHP, Go, Java, C#, Ruby, Rust, Kotlin & Bash.

View on GitHub →

Discussions (0)

No comments yet.