# reCAPTCHA v2

> Obtenha tokens do reCAPTCHA v2 (checkbox, invisível e Enterprise) com o YesCaptcha. Tipos de tarefa e preços, parâmetros da requisição, exemplos em curl/Python/Node.js e o formato do resultado.

Source: https://docs.yescaptcha.com/pt/tasks/recaptcha-v2/ · Last verified: 2026-10-15

> This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/recaptcha-v2/

Uma tarefa do reCAPTCHA v2 retorna um token (`gRecaptchaResponse`) que você envia ao site de destino para passar na verificação, sem clicar em nenhuma imagem. O tipo mais usado, `NoCaptchaTaskProxyless`, custa 15 pontos (≈ US$2.25 / 1k) por tarefa e é assíncrono: crie a tarefa com `createTask` e depois chame `getTaskResult` a cada 5 segundos para obter o resultado. Tarefas que falham ou expiram têm os pontos reembolsados automaticamente.

- POST `https://api.yescaptcha.com/createTask` (Endpoint global)
- POST `https://cn.yescaptcha.com/createTask` (Endpoint China)

O corpo da requisição é JSON e a autenticação usa a sua `clientKey` (copie no painel de [yescaptcha.com](https://yescaptcha.com/)). Consulte o resultado no mesmo endpoint em que criou a tarefa.

## Quando usar

-   A página mostra a caixa “Não sou um robô” (I’m not a robot): versão com checkbox.
-   Não há checkbox e o desafio de imagens só aparece depois de clicar no botão de envio: versão invisível. Adicione `"isInvisible": true`.
-   A página carrega `recaptcha/enterprise.js`, ou os endereços das requisições contêm `enterprise`: reCAPTCHA Enterprise. Use um tipo com `Enterprise` no nome.

Se não tiver certeza de qual é o seu caso, veja [Identificar o tipo de captcha](https://docs.yescaptcha.com/pt/guides/identify-captcha.md). Se a taxa de aprovação dos tokens não for boa, experimente o [reconhecimento de imagem do reCAPTCHA v2](https://docs.yescaptcha.com/pt/tasks/recaptcha-classification.md): a API indica quais imagens clicar, e você clica nelas no navegador.

## Tipos e preços

| Tipo de tarefa | Preço | Modo | Observações |
| --- | --- | --- | --- |
| `NoCaptchaTaskProxyless` | US$2.25 / 1k; 15 pontos/tarefa · ¥15 / 1k | Assíncrono |  |
| `RecaptchaV2TaskProxyless` | US$3.00 / 1k; 20 pontos/tarefa · ¥20 / 1k | Assíncrono | Mesmos parâmetros de NoCaptchaTaskProxyless, mas em outra rota; use qualquer um como alternativa |
| `NoCaptchaTask` | US$2.25 / 1k; 15 pontos/tarefa · ¥15 / 1k | Assíncrono | Proxy próprio |
| `RecaptchaV2EnterpriseTaskProxyless` | US$3.00 / 1k; 20 pontos/tarefa · ¥20 / 1k | Assíncrono |  |
| `RecaptchaV2EnterpriseTask` | US$3.00 / 1k; 20 pontos/tarefa · ¥20 / 1k | Assíncrono | Proxy próprio |

Os preços em dólares americanos são estimativas com base em US$1 ≈ ¥6.67; as tarefas são cobradas em pontos.

-   `NoCaptchaTaskProxyless` e `RecaptchaV2TaskProxyless` têm os mesmos parâmetros, mas usam rotas diferentes. Se um deles não tiver boa taxa de aprovação, experimente o outro.
-   Os tipos sem `Proxyless` no nome (`NoCaptchaTask`, `RecaptchaV2EnterpriseTask`) carregam o captcha pelo seu próprio proxy e exigem `proxyType`, `proxyAddress`, `proxyPort` e campos relacionados. Use-os quando o site de destino verifica o IP do visitante.

## Parâmetros da requisição

Campos do objeto `task` em `createTask`:

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `type` | string | Sim | Tipo de tarefa; veja "Tipos de tarefa e preços" nesta página |
| `websiteURL` | string | Sim | URL completa da página que exibe o captcha. Use o site em que você vê o captcha, não o domínio do fornecedor do captcha |
| `websiteKey` | string | Sim | A chave do site (sitekey), encontrada no código-fonte da página ou nas requisições de rede; normalmente não muda |
| `isInvisible` | boolean | Não | Defina como true para a variante invisível; caso contrário, omita |
| `proxyType` | string | Alguns tipos | Protocolo do proxy: `http`, `https`, `socks4` ou `socks5` (Obrigatório para NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyAddress` | string | Alguns tipos | Endereço IP ou nome de host do proxy. Endereços locais ou privados, como 127.0.0.1 ou 192.168.x.x, não funcionam porque nossos servidores não conseguem acessá-los (Obrigatório para NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyPort` | integer | Alguns tipos | Porta do proxy (Obrigatório para NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyLogin` | string | Não | Nome de usuário do proxy, se o proxy exigir autenticação (somente NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyPassword` | string | Não | Senha do proxy, se o proxy exigir autenticação (somente NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `userAgent` | string | Não | User-Agent do navegador. Se o resultado contiver um `userAgent`, use esse valor ao enviar o token (somente NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `enterprisePayload` | object | Não | Parâmetros extras da versão Enterprise, como o valor `s` do reCAPTCHA Enterprise: `{"s": "..."}`. Omita se a página não o usar (somente RecaptchaV2EnterpriseTaskProxyless, RecaptchaV2EnterpriseTask) |

Para saber como encontrar `websiteURL` e `websiteKey`, veja [Encontrar os parâmetros do reCAPTCHA](https://docs.yescaptcha.com/pt/guides/find-recaptcha-parameters.md).

## Exemplo de requisição

Usando a página de demonstração oficial do Google:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }
}
```

Código completo que cria a tarefa, consulta a cada 5 segundos e imprime o token. Antes de executar, coloque a sua clientKey na variável de ambiente `YESCAPTCHA_CLIENT_KEY`:

**curl**

```bash
curl -s https://api.yescaptcha.com/createTask \
  -H 'Content-Type: application/json' \
  -d '{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }
}'

# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:
curl -s https://api.yescaptcha.com/getTaskResult \
  -H 'Content-Type: application/json' \
  -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'
```

**Python**

solve.py

```python
import os
import time

import requests

API = "https://api.yescaptcha.com"
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]  # Read the clientKey from an environment variable

def call(method, payload):
    r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30)
    data = r.json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def solve(task):
    task_id = call("createTask", {"task": task})["taskId"]
    for _ in range(36):  # Poll every 5 seconds, for up to about 3 minutes
        time.sleep(5)
        result = call("getTaskResult", {"taskId": task_id})
        if result.get("status") == "ready":
            return result["solution"]
    raise TimeoutError(task_id)

solution = solve({
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
})
print(solution["gRecaptchaResponse"])
```

**Node.js**

solve.mjs

```js
const API = 'https://api.yescaptcha.com';
const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable

async function call(method, payload) {
  const res = await fetch(`${API}/${method}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }),
  });
  const data = await res.json();
  if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`);
  return data;
}

async function solve(task) {
  const { taskId } = await call('createTask', { task });
  for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes
    await new Promise((r) => setTimeout(r, 5000));
    const result = await call('getTaskResult', { taskId });
    if (result.status === 'ready') return result.solution;
  }
  throw new Error(`timeout: ${taskId}`);
}

const solution = await solve({
  type: "NoCaptchaTaskProxyless",
  websiteURL: "https://www.google.com/recaptcha/api2/demo",
  websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
});
console.log(solution.gRecaptchaResponse);
```

Para o reCAPTCHA Enterprise, se a página enviar um valor `s` ao reCAPTCHA, coloque-o em `enterprisePayload`:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "RecaptchaV2EnterpriseTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "enterprisePayload": {
      "s": "S_VALUE_FROM_THE_PAGE"
    }
  }
}
```

Com o seu próprio proxy:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTask",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "proxyType": "http",
    "proxyAddress": "proxy.example.com",
    "proxyPort": 8080,
    "proxyLogin": "user",
    "proxyPassword": "pass"
  }
}
```

## Resultado

`createTask` retorna o ID da tarefa:

```json
{
  "errorId": 0,
  "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
```

Use-o para chamar `getTaskResult`. Enquanto a tarefa ainda está em processamento, a resposta é `{"errorId": 0, "status": "processing"}`; consulte novamente após 5 segundos. Quando concluída:

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..."
  }
}
```

| Campo | Tipo | Descrição |
| --- | --- | --- |
| `gRecaptchaResponse` | string | O token a ser enviado ao site de destino. Uso único, válido por cerca de 120 segundos; use-o em até 60 segundos |

Uma tarefa é processada por no máximo cerca de 110 segundos; depois disso retorna `ERROR_TASK_TIMEOUT` e os pontos são reembolsados. Em caso de erro, `errorId` é 1; trate-o pelo `errorCode`, conforme [Códigos de erro](https://docs.yescaptcha.com/pt/api/errors.md). Para saber como enviar o token, veja [Enviar um token do reCAPTCHA](https://docs.yescaptcha.com/pt/guides/submit-recaptcha-token.md).

> **Dica:** O token é de uso único e válido por cerca de 120 segundos; recomendamos enviá-lo em até 60 segundos após recebê-lo.

## Perguntas frequentes

### Por que os tokens do mesmo site às vezes passam e às vezes não?

Quem decide é o site de destino. Ele atribui uma pontuação a cada verificação e define um limite que pode mudar a qualquer momento, por isso a taxa de aprovação varia de site para site e nem todo token passa. Você pode comparar a taxa de aprovação com outro tipo de tarefa do mesmo captcha ou mudar para o [reconhecimento de imagem](https://docs.yescaptcha.com/pt/tasks/recaptcha-classification.md).

### Por quanto tempo um token é válido?

É de uso único e válido por cerca de 120 segundos; recomendamos enviá-lo em até 60 segundos após recebê-lo. O prazo de validade é definido pelo Google.

### Sou cobrado quando a resolução falha?

Não. Tarefas que retornam `ERROR_CAPTCHA_UNSOLVABLE` ou que expiram têm os pontos reembolsados automaticamente. Veja [Cobrança e reembolso de pontos](https://docs.yescaptcha.com/pt/getting-started/billing.md).

## Tutoriais relacionados

-   [Identificar o tipo de captcha](https://docs.yescaptcha.com/pt/guides/identify-captcha.md)
-   [Encontrar os parâmetros do reCAPTCHA](https://docs.yescaptcha.com/pt/guides/find-recaptcha-parameters.md)
-   [Enviar um token do reCAPTCHA](https://docs.yescaptcha.com/pt/guides/submit-recaptcha-token.md)
-   [Clique em imagens do reCAPTCHA v2 com Selenium](https://docs.yescaptcha.com/pt/guides/recaptcha-click-selenium.md)
