Um envio de reCAPTCHA Enterprise que volta com ERROR_WRONG_CAPTCHA_ID costuma denunciar a variável de ambiente errada, não um problema no desafio. A CaptchaAI só aceita a sitekey, a credencial pública 6L... exposta no HTML da página.
A chave AIzaSy do Google Cloud pertence ao backend do site avaliado. As duas nascem no mesmo Console e acabam no mesmo .env — o pipeline lê a variável errada e o time caça um bug inexistente.
Qual chave vai na requisição: comparação rápida
A tabela resolve a maioria dos casos.
| Propriedade | Sitekey | Chave de API |
|---|---|---|
| Formato | 6L... (40 caracteres) |
AIzaSy... (39 caracteres) |
| Visibilidade | Pública (HTML/JS) | Privada (só no servidor) |
| Para que serve | Carregar o widget | Verificar tokens junto ao Google |
| Onde fica | Código-fonte, JS | Config do servidor, env vars |
| A CaptchaAI precisa? | Sim | Não |
Regra prática: chave que não aparece no código-fonte da página não é sitekey.
A sitekey: a chave pública que carrega o widget
Quatro sinais confirmam que é a sitekey:
- Prefixo
6L, o mesmo do reCAPTCHA padrão — a versão não muda o formato - Fica visível no código-fonte, e isso é intencional
- No Console do Google Cloud, está amarrada a domínios autorizados
- É o único valor que a CaptchaAI precisa para gerar o token
No HTML ela chega como parâmetro render do script do Enterprise:
<script src="https://www.google.com/recaptcha/enterprise.js?render=6LcR_RsTAAAAADge..."></script>
Em páginas invisíveis, aparece como primeiro argumento de grecaptcha.enterprise.execute:
grecaptcha.enterprise.execute('6LcR_RsTAAAAADge...', { action: 'login' });
A chave de API do Google Cloud: privada e fora do seu fluxo
É a credencial que o backend do site usa para validar o token no Google:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=AIzaSy...
Fácil de reconhecer — e de vazar por engano:
- Começa com
AIzaSy, o formato de chave de API do Google Cloud - Não pode aparecer em código do cliente nem em log de pipeline
- Serve só para o backend validar os tokens que recebe
- A CaptchaAI não precisa dela, e enviá-la só devolve erro
Como o Enterprise verifica um token (e onde a CaptchaAI entra)
O fluxo completo mostra qual etapa é sua:
- Navegador carrega
enterprise.jsusando a sitekey - Navegador executa o desafio e recebe um token
- Backend do site envia token + chave de API ao endpoint
assessmentsdo Google - Google devolve a pontuação de risco e os detalhes
- Backend do site aceita ou recusa com base na pontuação
A CaptchaAI cobre as etapas 1 e 2 e devolve um token válido gerado a partir da sitekey. Da etapa 3 em diante quem decide é o backend, com a chave dele.
Enterprise x reCAPTCHA padrão: o que realmente muda
| Recurso | Padrão (gratuito) | Enterprise |
|---|---|---|
| Origem da sitekey | Console do reCAPTCHA | Console do Google Cloud |
| Endpoint de verificação | siteverify |
assessments |
| Autenticação | Chave secreta | Chave de API ou conta de serviço |
| Resposta de pontuação | Campo score (0,0–1,0) |
riskAnalysis.score + motivos |
| Tipo de tarefa na CaptchaAI | RecaptchaV2Task / RecaptchaV3Task |
RecaptchaV2EnterpriseTask / RecaptchaV3EnterpriseTask |
Extrair a sitekey pelo código-fonte da página
Funciona na maioria das páginas com widget visível:
View Source → Ctrl+F → "enterprise.js"
O valor do parâmetro render é a sitekey:
<script src="https://www.google.com/recaptcha/enterprise.js?render=6LcR_RsTAAAAADge..."></script>
Extrair a sitekey pelo console do navegador
Quando o Enterprise roda invisível e não há data-sitekey no HTML estático, pergunte à própria página:
// Check for Enterprise grecaptcha
if (window.grecaptcha && window.grecaptcha.enterprise) {
console.log('reCAPTCHA Enterprise detected');
}
// Find site key from rendered widgets
document.querySelectorAll('[data-sitekey]').forEach(el => {
console.log('Site key:', el.getAttribute('data-sitekey'));
});
Extrair a sitekey pela aba Rede
Para páginas que montam o widget dinamicamente, filtre as requisições por enterprise.js ou recaptcha/enterprise: a sitekey aparece na URL ou no corpo.
Como enviar a sitekey para a CaptchaAI
Com a chave em mãos, é uma requisição só:
POST https://ocr.captchaai.com/in.php
Parâmetros obrigatórios:
| Parâmetro | Valor |
|---|---|
key |
Sua chave de API CaptchaAI (YOUR_API_KEY) |
method |
userrecaptcha |
googlekey |
A sitekey da página (6LcR_Rs...) |
pageurl |
A URL completa do CAPTCHA |
enterprise |
1 (sinaliza Enterprise) |
Os três parâmetros opcionais do Enterprise:
enterprise_type—v2ouv3Enterpriseaction— o nome da ação, no v3score_qa— pontuação mínima desejada, no v3
Repare que key e googlekey vêm de mundos diferentes: a primeira é sua na CaptchaAI, a segunda pertence ao site testado.
Cenário real: o checkout de homologação que passava no navegador
Um time de QA em São Paulo testa https://staging.example.com/checkout, protegido por reCAPTCHA Enterprise v3, com workers em sa-east-1. No clique manual a suíte passava; na automação, todo envio voltava com erro de chave inválida.
O payload entregou o diagnóstico: o pipeline lia RECAPTCHA_KEY, e essa variável guardava a chave AIzaSy do endpoint assessments. Duas correções resolveram — extrair a sitekey da URL de homologação, não a de produção, e acrescentar enterprise=1. Use dados fictícios; havendo dado pessoal real no fluxo, considere as obrigações da LGPD antes de gravar logs.
Erros comuns e como corrigir
| Problema | Causa | Correção |
|---|---|---|
| "ERROR_WRONG_CAPTCHA_ID" | Chave de API no lugar da sitekey | Use a 6L... da página, nunca a AIzaSy... |
| Token recusado | Tipo de Enterprise errado (v2 x v3) | Defina enterprise=1 e corrija enterprise_type |
| "Invalid sitekey" | Chave de outro ambiente | Extraia a chave da URL exata em teste |
| Sem sinalização de Enterprise | Enviado como reCAPTCHA padrão | Acrescente enterprise=1 |
Se a API devolve o token e a quebra só acontece no navegador automatizado, a falha está na entrega do token ao formulário, não nas chaves.
Perguntas frequentes
Dá para pegar a sitekey sem abrir o DevTools?
Sim. O HTML é público: um curl na URL seguido de busca por enterprise.js costuma bastar. O console só é necessário quando o widget é montado via JavaScript.
Preciso do PROJECT_ID ou de uma conta de serviço do Google Cloud?
Não. PROJECT_ID, conta de serviço e chave AIzaSy pertencem à verificação do lado do site. Do seu lado entram só a sitekey, a pageurl e sua credencial da CaptchaAI.
Enviei a sitekey certa e o token continua sendo recusado. O que verificar?
Confira, nessa ordem: pageurl precisa ser a URL exata do desafio, enterprise=1 precisa estar presente e enterprise_type precisa bater com a versão do widget. No v3, o action também tem que corresponder ao usado em execute().
A mesma chave da CaptchaAI serve para Enterprise e reCAPTCHA padrão?
Sim. Uma única credencial cobre todos os tipos suportados, e a cobrança é por threads simultâneas — o BASIC (US$ 15/mês, 5 threads) atende os dois casos.
Artigos relacionados
- Resolver o callback do reCAPTCHA v2 pela API
- Proteger sua chave de API com lista de IPs permitidos
- Como planejar a rotação da sua chave de API
Próximas etapas
Abra o código-fonte da sua página de homologação, copie a sitekey 6L..., crie sua chave de API e envie a primeira tarefa com enterprise=1.