Troubleshooting

Erros e correções comuns do reCAPTCHA v2 Enterprise

Se a CaptchaAI devolve status: 1 com um token e o site rejeita a submissão mesmo assim, o motivo mais comum é um parâmetro esquecido: enterprise=1. É o erro Enterprise mais frequente do nosso suporte — e o mais rápido de corrigir.

O reCAPTCHA v2 Enterprise falha pelos mesmos motivos do v2 padrão — sitekey errada, pageurl inválido, token expirado — mas soma problemas exclusivos da versão corporativa. Sem certeza se é Standard ou Enterprise? Veja primeiro Como identificar a implementação empresarial do reCAPTCHA.


Diagnóstico rápido antes de mexer no código

Antes de revisar o fluxo de resolução, confirme três pontos, nessa ordem:

  1. O script carregado na página é enterprise.js ou api.js?
  2. Sua requisição para a CaptchaAI inclui enterprise=1?
  3. A div do reCAPTCHA tem um atributo data-s?

Se a resposta for "não sei", as seções abaixo mostram onde procurar.

Cenário comum em QA no Brasil: times que rodam workers em sa-east-1 (São Paulo) reproduzem esse erro em staging — login com reCAPTCHA Enterprise, a CaptchaAI devolve status: 1 com um token, e o backend recusa a submissão mesmo assim. Antes de suspeitar de proxy ou rede, confira enterprise=1: na prática, é a causa mais comum. E como o pageurl e o payload podem carregar dados sob a LGPD quando a página coleta informação pessoal, evite gravar o token completo em texto plano nos logs.


Erros específicos do Enterprise

Você enviou parâmetros do Standard para um widget Enterprise

  • Sintoma: a API devolve um token, mas o site rejeita a submissão.
  • Causa: a tarefa foi enviada sem enterprise=1 — resolvida como Standard, rejeitada pelo backend Enterprise.
  • Correção: adicione enterprise=1 à requisição, como no exemplo abaixo.
import requests

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
    "pageurl": "https://staging.example.com/qa-login",
    "enterprise": 1,
    "json": 1
})

data = response.json()
task_id = data["request"]
const params = new URLSearchParams({
  key: "YOUR_API_KEY",
  method: "userrecaptcha",
  googlekey: "6LcR_RsTAAAAAFJR-JhNbC6CC42wKCbR9Hq_kVCd",
  pageurl: "https://staging.example.com/qa-login",
  enterprise: 1,
  json: 1,
});

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

Faltou o parâmetro data-s

  • Sintoma: ERROR_BAD_PARAMETERS ou o token é rejeitado pelo site.
  • Causa: algumas implementações Enterprise incluem data-s na div do reCAPTCHA — um token de sessão adicional. Se estiver presente, a requisição precisa incluí-lo.
  • Correção: verifique a página e inclua data-s se encontrar:
# Look for: <div class="g-recaptcha" data-sitekey="..." data-s="..."></div>
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url,
    "enterprise": 1,
    "data-s": data_s_value,  # Include if present on the page
    "json": 1
})

Identificação errada do script

  • Sintoma: o token funciona de forma inconsistente ou é sempre rejeitado.
  • Causa: o widget foi identificado como Standard quando na verdade é Enterprise (ou o contrário).
  • Correção: confira a origem do script no HTML da página:
// Enterprise uses enterprise.js
// <script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>

// Standard uses api.js
// <script src="https://www.google.com/recaptcha/api.js"></script>

// Also check the JS object:
// Enterprise: grecaptcha.enterprise.render(...)
// Standard: grecaptcha.render(...)

Em que o reCAPTCHA v2 Enterprise se diferencia do Standard

Depois de corrigir o erro, vale entender a causa raiz: Enterprise e Standard usam script, objeto JS e endpoint de verificação diferentes.

Recurso Standard v2 Enterprise v2
URL do script google.com/recaptcha/api.js google.com/recaptcha/enterprise.js
Objeto JS grecaptcha grecaptcha.enterprise
Endpoint de verificação google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com
Parâmetro na CaptchaAI method=userrecaptcha method=userrecaptcha + enterprise=1
Parâmetro data-s Nunca usado Às vezes presente (token adicional)

Erros gerais, compartilhados com o v2 padrão

Nem todo erro é exclusivo do Enterprise — a tabela abaixo cobre os códigos que também aparecem ao resolver reCAPTCHA v2 Standard.

Código de erro Causa Correção
ERROR_WRONG_USER_KEY Formato de chave de API inválido Verifique em captchaai.com/api.php
ERROR_KEY_DOES_NOT_EXIST Chave de API não encontrada Verifique espaços extras ou caracteres faltando
ERROR_ZERO_BALANCE Saldo zerado Faça uma recarga na conta
ERROR_PAGEURL Faltando pageurl Adicione a URL completa da página
ERROR_GOOGLEKEY Sitekey malformada Extraia novamente a partir de data-sitekey
ERROR_BAD_TOKEN_OR_PAGEURL Sitekey e URL não conferem Verifique o contexto do iframe
CAPCHA_NOT_READY Ainda em resolução Aguarde 5 s e consulte novamente
ERROR_CAPTCHA_UNSOLVABLE Não foi possível resolver Envie uma nova tarefa

Fluxo completo de resolução com tratamento de erros

Depois de resolver o erro pontual, vale substituir chamadas soltas por uma função única que envia, consulta e trata cada código de erro — é o que os dois exemplos abaixo fazem, em Python e em JavaScript.

import requests
import time

def solve_recaptcha_v2_enterprise(api_key, sitekey, page_url, data_s=None):
    params = {
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "enterprise": 1,
        "json": 1
    }
    if data_s:
        params["data-s"] = data_s

    response = requests.get("https://ocr.captchaai.com/in.php", params=params)
    data = response.json()

    if data.get("status") != 1:
        raise RuntimeError(f"Submit failed: {data.get('request')}")

    task_id = data["request"]

    for _ in range(40):
        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:
            return result["request"]
        if result.get("request") == "CAPCHA_NOT_READY":
            continue
        raise RuntimeError(f"Solve failed: {result.get('request')}")

    raise TimeoutError("Solve timed out after 200 seconds")

token = solve_recaptcha_v2_enterprise("YOUR_API_KEY", "SITEKEY", "https://staging.example.com/qa-login")
async function solveRecaptchaV2Enterprise(apiKey, sitekey, pageUrl, dataS) {
  const params = new URLSearchParams({
    key: apiKey, method: "userrecaptcha", googlekey: sitekey,
    pageurl: pageUrl, enterprise: 1, json: 1,
  });
  if (dataS) params.set("data-s", dataS);

  const submitRes = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
  const submitData = await submitRes.json();
  if (submitData.status !== 1) throw new Error(`Submit failed: ${submitData.request}`);

  const taskId = submitData.request;
  for (let i = 0; i < 40; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await fetch(`https://ocr.captchaai.com/res.php?${new URLSearchParams({
      key: apiKey, action: "get", id: taskId, json: 1,
    })}`);
    const data = await res.json();
    if (data.status === 1) return data.request;
    if (data.request === "CAPCHA_NOT_READY") continue;
    throw new Error(`Solve failed: ${data.request}`);
  }
  throw new Error("Timed out after 200s");
}

Perguntas frequentes

Como sei se um site usa reCAPTCHA Enterprise ou Standard?

Olhe a tag de script no HTML: o Enterprise carrega recaptcha/enterprise.js, o Standard carrega recaptcha/api.js. O objeto JavaScript também muda — grecaptcha.enterprise no Enterprise, grecaptcha no Standard.

Resolver Enterprise custa mais na CaptchaAI do que Standard?

Não. Os planos são por thread simultânea, com resolução ilimitada por thread e sem sobretaxa por tipo de CAPTCHA.

Meu token com enterprise=1 ainda é rejeitado. O que verificar?

Três coisas: (1) a sitekey corresponde à página; (2) há data-s na página, mas não na requisição; (3) o token expirou antes do envio — vale cerca de 2 minutos.

Preciso reescrever meu pipeline de automação (Selenium, Puppeteer) para Enterprise?

Não. A mudança fica só na chamada à API — adicione enterprise=1 e, se aplicável, data-s. O resto do fluxo permanece igual.


Corrija seu fluxo Enterprise

  1. Confirme o tipo de implementação — procure enterprise.js na tag de script
  2. Adicione enterprise=1 à sua requisição para a CaptchaAI
  3. Verifique o data-s — inclua-o se a página tiver esse atributo
  4. Envie o token imediatamente — tokens Enterprise também expiram em cerca de 2 minutos

Obtenha sua chave de API em captchaai.com/api.php.


Guias relacionados

  1. Como identificar a implementação empresarial do reCAPTCHA
  2. Como resolver reCAPTCHA v2 usando a API
  3. Standard vs Enterprise: as diferenças no reCAPTCHA v2
  4. Referência de códigos de erro da CaptchaAI
Os comentários estão desativados para este artigo.