Este guia tem um único objetivo: levar você do zero à primeira chamada bem-sucedida da API e ao token resolvido o com menor latência possível. Sem teoria nem desvios — apenas os passos mínimos e código que funciona.
Todos os tipos de CAPTCHA suportados pelo CaptchaAI seguem o mesmo padrão de quatro passos:
- Enviar os dados do CAPTCHA para
in.php - Guardar o ID da tarefa retornado na resposta
- Consultar
res.phpa cada 5 segundos até o resultado ficar pronto - Usar o token — injetá-lo na página ou requisição de destino
Passo 0: pegue sua chave de API
- Cadastre-se em captchaai.com
- Abra seu painel
- Copie a chave de 32 caracteres
Sua conta precisa de threads ativos para enviar tarefas. Se está só avaliando o serviço, fale com o suporte para liberar threads de teste.
Passo 1: envie um CAPTCHA
Este exemplo resolve um Cloudflare Turnstile — um dos tipos mais comuns. Você precisa de dois dados da página alvo:
- sitekey — a chave pública do widget Turnstile (atributo
data-sitekeyou parâmetros do script Turnstile; começa com0x) - pageurl — a URL completa onde o widget é carregado
cURL
curl -X POST "https://ocr.captchaai.com/in.php" \
-d "key=YOUR_API_KEY" \
-d "method=turnstile" \
-d "sitekey=0x4AAAAAAAC3DHQFLr1GavNl" \
-d "pageurl=https://staging.example.com/qa-login" \
-d "json=1"
Python
import requests
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "turnstile",
"sitekey": "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl": "https://staging.example.com/qa-login",
"json": 1,
})
print(response.json())
Node.js
const response = await fetch("https://ocr.captchaai.com/in.php", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: "YOUR_API_KEY",
method: "turnstile",
sitekey: "0x4AAAAAAAC3DHQFLr1GavNl",
pageurl: "https://staging.example.com/qa-login",
json: "1",
}),
});
console.log(await response.json());
PHP
<?php
$response = file_get_contents("https://ocr.captchaai.com/in.php?" . http_build_query([
"key" => "YOUR_API_KEY",
"method" => "turnstile",
"sitekey" => "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl" => "https://staging.example.com/qa-login",
"json" => 1,
]));
echo $response;
Passo 2: guarde o ID da tarefa
Resposta de sucesso:
{
"status": 1,
"request": "71823469"
}
O campo request é o ID da sua tarefa — você vai precisar dele para buscar o resultado.
Se status for 0, algo deu errado. O código de erro fica em request:
| Erro | Significado | Como resolver |
|---|---|---|
ERROR_WRONG_USER_KEY |
Formato da chave API errado | Confira os 32 caracteres |
ERROR_KEY_DOES_NOT_EXIST |
Chave não encontrada | Verifique no painel |
ERROR_ZERO_BALANCE |
Sem threads disponíveis | Recarregue ou aguarde liberação |
ERROR_PAGEURL |
Faltou o parâmetro pageurl |
Adicione a URL completa |
ERROR_WRONG_GOOGLEKEY |
sitekey vazio ou inválido | Reextraia o sitekey (Turnstile começa com 0x) |
Passo 3: consulte o resultado
Espere 15 segundos, depois consulte a cada 5 segundos até receber resposta.
Python
import time
time.sleep(15)
while True:
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": "71823469",
"json": 1,
}).json()
if result.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if result.get("status") == 1:
token = result["request"]
print(f"Solved! Token: {token[:60]}...")
break
raise RuntimeError(result)
Node.js
await new Promise((r) => setTimeout(r, 15000));
while (true) {
const r = await fetch(
`https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=71823469&json=1`,
);
const data = await r.json();
if (data.request === "CAPCHA_NOT_READY") {
await new Promise((r) => setTimeout(r, 5000));
continue;
}
if (data.status === 1) {
console.log("Solved:", data.request.slice(0, 60));
break;
}
throw new Error(JSON.stringify(data));
}
Passo 4: use o token
O modo de injeção varia conforme o tipo de CAPTCHA:
- Turnstile / reCAPTCHA: escrever em
cf-turnstile-responseoug-recaptcha-response, ou chamar o callback da página. - OCR de imagem: colocar o texto reconhecido no input de resposta.
- GeeTest / FunCaptcha: montar os vários campos retornados conforme o site.
Injeção mínima no navegador:
document.querySelector('[name="cf-turnstile-response"]').value = token;
document.querySelector("form").submit();
Erros comuns no começo
- Espaço ao copiar a chave de API — remova-o.
- Falta protocolo em
pageurl— precisa serhttps://.... - Primeira consulta cedo demais — aguarde 15 segundos.
- Consultar com muita frequência — 5 s é o suficiente, não acelera o resultado.
- Threads esgotados — veja Formatos de resposta da API e seu plano.
Próximos passos
- Como resolver reCAPTCHA v2 com a API: guia passo a passo
- Como resolver Cloudflare Turnstile pela API
- Como resolver GeeTest v3 usando API
- Image Captcha Solving Using Api