Explainers

reCAPTCHA Enterprise Assessment API Deep Dive

reCAPTCHA Enterprise is Google's premium CAPTCHA service that extends reCAPTCHA v3 with detailed risk analysis, score reasons, fraud detection signals, and account defender capabilities. Unlike the standard free version that returns only a score and action, Enterprise provides explainable assessments with specific risk factors. This guide covers the Enterprise Assessment API architecture, response structure, and how to handle Enterprise-protected sites in automation.


Enterprise vs standard reCAPTCHA

Feature reCAPTCHA v3 (free) reCAPTCHA Enterprise
Scoring 0.0-1.0 score 0.0-1.0 score + score reasons
Risk analysis Basic Detailed (fraud signals, account info)
Score reasons Not provided Specific reasons explaining the score
Account Defender No Yes (tracks account lifecycle)
WAF integration No Yes (Cloudflare, Fastly, F5)
Express assessment No Yes (server-side only, no JS)
Password leak detection No Yes
Pricing Free (1M assessments/month) $1 per 1000 assessments (0-1M free)
API endpoint google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com

Enterprise Assessment API flow

Client-side:

  1. Load reCAPTCHA Enterprise script
  2. Call grecaptcha.enterprise.execute(SITE_KEY, {action: 'LOGIN'})
  3. Receive token
  4. Send token to your backend

Server-side:

  1. Create assessment via Enterprise API
  2. Receive detailed risk analysis
  3. Make access decision based on score + reasons
  4. Optionally annotate the assessment (report fraud/legitimate)

Client-side integration

JavaScript SDK

<script src="https://www.google.com/recaptcha/enterprise.js?render=SITE_KEY"></script>
<script>
    grecaptcha.enterprise.ready(function() {
        grecaptcha.enterprise.execute('SITE_KEY', { action: 'LOGIN' })
            .then(function(token) {
                // Send token to backend
                fetch('/api/verify', {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({ token: token })
                });
            });
    });
</script>

Key differences from standard reCAPTCHA v3:

  • Script URL uses .../recaptcha/enterprise.js instead of .../recaptcha/api.js
  • API object is grecaptcha.enterprise instead of grecaptcha
  • execute() returns the same token format

Detection in page source

import requests
import re

def detect_recaptcha_enterprise(url):
    """Detect if a page uses reCAPTCHA Enterprise."""
    html = requests.get(url, timeout=10).text

    indicators = {
        "is_enterprise": False,
        "is_standard": False,
        "site_key": None,
        "actions": [],
    }

    # Enterprise detection
    if "recaptcha/enterprise.js" in html:
        indicators["is_enterprise"] = True
        match = re.search(r"render=([A-Za-z0-9_-]+)", html)
        if match:
            indicators["site_key"] = match.group(1)

    # Standard v3 detection
    elif "recaptcha/api.js?render=" in html:
        indicators["is_standard"] = True
        match = re.search(r"render=([A-Za-z0-9_-]+)", html)
        if match:
            indicators["site_key"] = match.group(1)

    # Extract action names
    actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
    indicators["actions"] = list(set(actions))

    return indicators

print(detect_recaptcha_enterprise("https://example.com/login"))

Server-side Assessment API

Creating an assessment (Google Cloud API)

from google.cloud import recaptchaenterprise_v1
from google.cloud.recaptchaenterprise_v1 import Assessment

def create_assessment(project_id, site_key, token, action):
    """Create a reCAPTCHA Enterprise assessment."""
    client = recaptchaenterprise_v1.RecaptchaEnterpriseServiceClient()

    event = recaptchaenterprise_v1.Event()
    event.site_key = site_key
    event.token = token
    event.expected_action = action

    assessment = recaptchaenterprise_v1.Assessment()
    assessment.event = event

    request = recaptchaenterprise_v1.CreateAssessmentRequest()
    request.assessment = assessment
    request.parent = f"projects/{project_id}"

    response = client.create_assessment(request)
    return response

Assessment response structure

{
    "name": "projects/123456/assessments/abcdef123",
    "event": {
        "token": "...",
        "siteKey": "6Le...",
        "expectedAction": "LOGIN",
        "hashedAccountId": "abc123..."
    },
    "riskAnalysis": {
        "score": 0.9,
        "reasons": [
            "AUTOMATION",
            "TOO_MUCH_TRAFFIC"
        ],
        "extendedVerdictReasons": [
            "BROWSER_ERROR"
        ]
    },
    "tokenProperties": {
        "valid": true,
        "hostname": "example.com",
        "action": "LOGIN",
        "createTime": "2025-01-15T10:30:00Z",
        "invalidReason": ""
    },
    "accountDefenderAssessment": {
        "labels": ["PROFILE_MATCH"]
    }
}

Enterprise score reasons

Enterprise provides specific reasons explaining why a score is low:

Reason Description Score impact
AUTOMATION Automated user agent or headless browser detected -0.3 to -0.7
UNEXPECTED_ENVIRONMENT Browser or device environment inconsistencies -0.2 to -0.4
TOO_MUCH_TRAFFIC High request volume from this IP or session -0.1 to -0.3
UNEXPECTED_USAGE_PATTERNS Behavioral signals deviate from human norms -0.2 to -0.5
LOW_CONFIDENCE_SCORE Insufficient data to make a confident assessment Variable
SUSPECTED_CARDING Transaction pattern matches credit card fraud -0.3 to -0.6
SUSPECTED_CHARGEBACK Risk of chargeback based on transaction signals -0.2 to -0.4

Extended verdict reasons (additional detail)

Reason Description
BROWSER_ERROR JavaScript execution errors in CAPTCHA SDK
SITE_MISMATCH Token created for different site than validated on
FAILED_TWO_FACTOR Two-factor authentication failed recently

Account Defender

Enterprise's Account Defender tracks user accounts across their lifecycle:

{
    "accountDefenderAssessment": {
        "labels": [
            "PROFILE_MATCH",
            "SUSPICIOUS_LOGIN_ACTIVITY",
            "SUSPICIOUS_ACCOUNT_CREATION",
            "RELATED_ACCOUNTS_NUMBER_HIGH"
        ]
    }
}
Label Meaning
PROFILE_MATCH Behavior matches the known profile for this account
SUSPICIOUS_LOGIN_ACTIVITY Login pattern deviates from normal (new device, location)
SUSPICIOUS_ACCOUNT_CREATION Account creation looks automated
RELATED_ACCOUNTS_NUMBER_HIGH Multiple accounts linked to same device/session

WAF integration

reCAPTCHA Enterprise integrates with WAF providers to add CAPTCHA challenges at the network edge:

Cloudflare WAF integration

Request arrives at Cloudflare edge
    ↓
Cloudflare WAF rule evaluates request
    ↓
Rule triggers reCAPTCHA Enterprise challenge
    ↓
Client solves CAPTCHA → token returned
    ↓
Cloudflare validates token via Enterprise API
    ↓
If valid + score above threshold → request forwarded to origin

F5 BIG-IP integration

F5 iRule or policy evaluates request
    ↓
Triggers reCAPTCHA Enterprise challenge page
    ↓
Client solves → token validated server-side
    ↓
F5 forwards or blocks based on assessment score

Handling Enterprise reCAPTCHA in automation

CaptchaAI solves Enterprise the same way as standard reCAPTCHA

From an API solver perspective, reCAPTCHA Enterprise tokens work identically to standard reCAPTCHA tokens:

import requests
import time

API_KEY = "YOUR_API_KEY"

# Enterprise is solved with the same method
# The solver handles the Enterprise variant automatically
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
    "pageurl": "https://enterprise-site.com/login",
    "enterprise": 1,  # Flag for Enterprise variant
    "json": 1,
})

task_id = submit.json()["request"]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        print(f"Enterprise token: {token[:50]}...")
        break

Node.js

const axios = require("axios");

async function solveEnterprise(sitekey, pageurl) {
    const API_KEY = "YOUR_API_KEY";

    const { data: submit } = await axios.post(
        "https://ocr.captchaai.com/in.php",
        new URLSearchParams({
            key: API_KEY,
            method: "userrecaptcha",
            googlekey: sitekey,
            pageurl: pageurl,
            enterprise: 1,
            json: 1,
        })
    );

    const taskId = submit.request;

    for (let i = 0; i < 60; i++) {
        await new Promise(r => setTimeout(r, 5000));
        const { data: result } = await axios.get(
            "https://ocr.captchaai.com/res.php",
            { params: { key: API_KEY, action: "get", id: taskId, json: 1 } }
        );

        if (result.status === 1) return result.request;
    }

    throw new Error("Timeout");
}

How to detect Enterprise vs standard on a target page

def identify_recaptcha_version(html):
    """Determine which reCAPTCHA version a page uses."""
    if "recaptcha/enterprise.js" in html:
        return "enterprise"
    elif "recaptcha/api.js?render=" in html:
        return "v3"
    elif "g-recaptcha" in html and 'data-size="invisible"' in html:
        return "v2_invisible"
    elif "g-recaptcha" in html:
        return "v2"
    else:
        return "none"

Enterprise troubleshooting

Issue Diagnosis Solution
Token rejected by Enterprise API Using standard method for Enterprise site Add enterprise=1 to solver request
Score always 0.1 despite valid token Action parameter mismatch Verify the action matches what the page sends
"SITE_MISMATCH" in reasons Token generated for wrong domain Ensure pageurl exactly matches the target
"AUTOMATION" in score reasons Solver environment detected CaptchaAI handles this — if persisting, contact support
Token valid but site still blocks Site uses additional checks beyond CAPTCHA Check for other bot detection layers (WAF, fingerprint)

Frequently asked questions

Is reCAPTCHA Enterprise harder to solve than standard reCAPTCHA?

The token generation process is the same. Enterprise adds server-side analysis features (score reasons, Account Defender) but the client-side challenge is identical. API solvers generate tokens for Enterprise the same way they do for standard versions.

Do I need a Google Cloud account to solve Enterprise CAPTCHAs?

No. As an automation developer solving Enterprise CAPTCHAs on target websites, you only need the sitekey from the page and an API solver like CaptchaAI. The Google Cloud account is needed by the website operator to validate assessments, not by the CAPTCHA solver.

How do I tell if a site uses Enterprise or standard reCAPTCHA?

Check the script URL. Enterprise uses recaptcha/enterprise.js while standard uses recaptcha/api.js. The JavaScript API object name also differs: grecaptcha.enterprise.execute() vs grecaptcha.execute().

Can Enterprise score reasons be used to improve my automation?

If you operate the target site (testing your own CAPTCHA implementation), yes — the reasons tell you which detection signals fired. If you are solving CAPTCHAs on third-party sites, the reasons are not visible to you — only the site operator sees them.


Summary

reCAPTCHA Enterprise extends standard reCAPTCHA with detailed risk analysis, score reasons, Account Defender, and WAF integration. From an automation perspective, Enterprise CAPTCHAs are solved identically to standard reCAPTCHA — add the enterprise=1 parameter to your CaptchaAI API request. Detect Enterprise by checking for recaptcha/enterprise.js in the page source. The key operational difference is ensuring you pass the correct enterprise flag and matching action parameter.

Discussions (0)

No comments yet.

Related Posts

Reference CAPTCHA Token Injection Methods Reference
Complete reference for injecting solved CAPTCHA tokens into web pages.

Complete reference for injecting solved CAPTCHA tokens into web pages. Covers re CAPTCHA, Turnstile, and Cloud...

Automation Python reCAPTCHA v2
Apr 08, 2026
Tutorials Pytest Fixtures for CaptchaAI API Testing
Build reusable pytest fixtures to test CAPTCHA-solving workflows with Captcha AI.

Build reusable pytest fixtures to test CAPTCHA-solving workflows with Captcha AI. Covers mocking, live integra...

Automation Python reCAPTCHA v2
Apr 08, 2026
API Tutorials How to Solve reCAPTCHA v2 Callback Using API
how to solve re CAPTCHA v 2 callback implementations using Captcha AI API.

Learn how to solve re CAPTCHA v 2 callback implementations using Captcha AI API. Detect the callback function,...

Automation reCAPTCHA v2 Webhooks
Mar 01, 2026
Reference Browser Session Persistence for CAPTCHA Workflows
Manage browser sessions, cookies, and storage across CAPTCHA-solving runs to reduce repeat challenges and maintain authenticated state.

Manage browser sessions, cookies, and storage across CAPTCHA-solving runs to reduce repeat challenges and main...

Automation Python reCAPTCHA v2
Feb 24, 2026
Integrations Browser Profile Isolation + CaptchaAI Integration
Browser profile isolation tools create distinct browser environments with unique fingerprints per session.

Browser profile isolation tools create distinct browser environments with unique fingerprints per session. Com...

Automation Python reCAPTCHA v2
Feb 21, 2026
Comparisons WebDriver vs Chrome DevTools Protocol for CAPTCHA Automation
Compare Web Driver and Chrome Dev Tools Protocol (CDP) for CAPTCHA automation — detection, performance, capabilities, and when to use each with Captcha AI.

Compare Web Driver and Chrome Dev Tools Protocol (CDP) for CAPTCHA automation — detection, performance, capabi...

Automation Python reCAPTCHA v2
Mar 27, 2026
Use Cases CAPTCHA Solving in Ticket Purchase Automation
How to handle CAPTCHAs on ticketing platforms Ticketmaster, AXS, and event sites using Captcha AI for automated purchasing workflows.

How to handle CAPTCHAs on ticketing platforms Ticketmaster, AXS, and event sites using Captcha AI for automate...

Automation Python reCAPTCHA v2
Feb 25, 2026
Tutorials Securing CaptchaAI Credentials in Environment Variables
Store Captcha AI API keys securely using environment variables, .env files, Docker secrets, and cloud secret managers instead of hardcoding.

Store Captcha AI API keys securely using environment variables, .env files, Docker secrets, and cloud secret m...

Automation Python reCAPTCHA v2
Feb 12, 2026
Use Cases Event Ticket Monitoring with CAPTCHA Handling
Build an event ticket availability monitor that handles CAPTCHAs using Captcha AI.

Build an event ticket availability monitor that handles CAPTCHAs using Captcha AI. Python workflow for checkin...

Automation Python reCAPTCHA v2
Jan 17, 2026
Explainers reCAPTCHA v2 Invisible: Trigger Detection and Solving
Detect and solve re CAPTCHA v 2 Invisible challenges with Captcha AI — identify triggers, extract parameters, and handle auto-invoked CAPTCHAs.

Detect and solve re CAPTCHA v 2 Invisible challenges with Captcha AI — identify triggers, extract parameters,...

Automation Python reCAPTCHA v2
Apr 07, 2026
Explainers How BLS CAPTCHA Works: Grid Logic and Image Selection
Deep dive into BLS CAPTCHA grid logic — how images are arranged, how instructions map to selections, and how Captcha AI processes BLS challenges.

Deep dive into BLS CAPTCHA grid logic — how images are arranged, how instructions map to selections, and how C...

Automation BLS CAPTCHA
Apr 09, 2026
Explainers Browser Fingerprinting and CAPTCHA: How Detection Works
How browser fingerprinting affects CAPTCHA challenges, what signals trigger CAPTCHAs, and how to reduce detection with Captcha AI.

How browser fingerprinting affects CAPTCHA challenges, what signals trigger CAPTCHAs, and how to reduce detect...

reCAPTCHA v2 Cloudflare Turnstile reCAPTCHA v3
Mar 23, 2026
Explainers GeeTest v3 Challenge-Response Workflow: Technical Deep Dive
A technical deep dive into Gee Test v 3's challenge-response workflow — the registration API, challenge token exchange, slider verification, and how Captcha AI...

A technical deep dive into Gee Test v 3's challenge-response workflow — the registration API, challenge token...

Automation Testing GeeTest v3
Mar 02, 2026