Básico
- URL base
https://unlock-api.com- Chave de API
- 32 caracteres, na página da sua conta. Envie como clientKey (JSON) ou key (in.php, res.php).
- Formato
- Métodos JSON: POST com corpo JSON. in.php e res.php: campos de formulário via GET ou POST; adicione json=1 para respostas em JSON.
- Limites
- 1.200 requisições por minuto por conta, incluindo as consultas de resultado. Aguarde cerca de 5 segundos depois de criar uma tarefa e consulte a cada 5 segundos.
- Tempo limite
- Uma tarefa não resolvida em 5 minutos falha com ERROR_CAPTCHA_UNSOLVABLE e o valor volta para o saldo.
- Cobrança
- O preço da tarefa é descontado quando ela é criada. Tarefas com falha são reembolsadas automaticamente.
Início rápido
Resolva um reCAPTCHA v2 com os métodos JSON. Substitua YOUR_API_KEY pela sua chave.
import time, requests
API = "https://unlock-api.com"
KEY = "YOUR_API_KEY"
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"
}
}).json()
if task["errorId"]:
raise SystemExit(task["errorCode"])
while True:
time.sleep(5)
r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task["taskId"]}).json()
if r["errorId"]:
raise SystemExit(r["errorCode"]) # failed tasks are refunded
if r["status"] == "ready":
print(r["solution"]["gRecaptchaResponse"])
breakMétodos JSON
POST /createTask Criar uma tarefa
Corpo: clientKey e um objeto task. O tipo da tarefa define os outros campos; veja Tipos de tarefa. Resposta: errorId 0 e taskId, ou errorId 1 com errorCode.
POST https://unlock-api.com/createTask
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAAAAAC3DHQFLr1GavRN"}}
{"errorId":0,"taskId":1001}
{"errorId":1,"errorCode":"ERROR_ZERO_BALANCE","errorDescription":"..."}POST /getTaskResult Obter o resultado
Corpo: clientKey e taskId. Enquanto a tarefa roda: status processing. Quando termina: status ready com a solution e o cost. Uma tarefa com falha responde errorId 1 com seu errorCode.
POST https://unlock-api.com/getTaskResult
{"clientKey":"YOUR_API_KEY","taskId":1001}
{"errorId":0,"status":"processing"}
{"errorId":0,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.0012","createTime":1791640000,"endTime":1791640011,"solveCount":1}POST /getBalance Consultar o saldo
Corpo: clientKey. Resposta: balance em dólares americanos.
{"clientKey":"YOUR_API_KEY"}
{"errorId":0,"balance":42.5}Informar uma resposta errada
reportIncorrectRecaptcha e reportIncorrectImageCaptcha aceitam clientKey e taskId e respondem success. Eles são aceitos por compatibilidade com bibliotecas existentes; um aviso não altera a cobrança.
Métodos de formulário (in.php, res.php)
Enviar uma tarefa: in.php
Campos: key, method e os campos do tipo de CAPTCHA. Resposta: OK|ID, ou com json=1 {"status":1,"request":"ID"}. Os erros voltam pelo nome, como ERROR_ZERO_BALANCE.
POST https://unlock-api.com/in.php
key=YOUR_API_KEY&method=hcaptcha&sitekey=SITE_KEY&pageurl=https://example.com&json=1
OK|1001
{"status":1,"request":"1001"}Obter a resposta: res.php
action=get&id=ID retorna OK|ANSWER quando resolvida e CAPCHA_NOT_READY enquanto está em andamento. action=get2 inclui o custo. ids=ID1,ID2 consulta até 100 tarefas de uma vez. action=getbalance retorna o saldo. action=reportbad e reportgood são aceitos.
GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=get&id=1001 CAPCHA_NOT_READY OK|P1_eyJ0eXAiOiJKV1Qi... GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=getbalance 42.5
Mais métodos
POST /getToken Criar e aguardar: getToken
Mesmo corpo do createTask. A chamada aguarda até 50 segundos e retorna a mesma resposta do getTaskResult. Se a tarefa ainda estiver em andamento, a resposta é status processing com o taskId; continue consultando o getTaskResult.
POST https://unlock-api.com/getToken
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAA..."}}
{"errorId":0,"taskId":1001,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.000725"}Callbacks de resultado
Adicione callbackUrl ao createTask (ou pingback ao in.php) e o resultado é enviado para lá quando a tarefa termina: um corpo JSON como o do getTaskResult com taskId ou, no in.php, um corpo de formulário id=…&code=…. Só endereços públicos são chamados, uma vez, com tempo limite de 5 segundos; o resultado também continua disponível por consulta.
{"clientKey":"YOUR_API_KEY","callbackUrl":"https://your.server/captcha-result","task":{...}}
POST https://your.server/captcha-result
{"errorId":0,"taskId":1001,"status":"ready","solution":{...},"cost":"0.0005"}Estatísticas
getQueueStats retorna as tarefas aguardando e sendo resolvidas agora e o tempo médio de resolução na última hora. getSpendingStats retorna seu volume e gasto por hora em um dia UTC (date em unix time). test devolve o corpo que recebe.
POST https://unlock-api.com/getQueueStats {"clientKey":"..."} -> {"errorId":0,"waiting":3,"solving":12,"speed":6.4,"total":15}
POST https://unlock-api.com/getSpendingStats {"clientKey":"...","date":1791590400} -> {"errorId":0,"data":[{"dateFrom":...,"volume":120,"money":0.06},...]}
POST https://unlock-api.com/test {"anything":1} -> {"errorId":0,"received":{"anything":1}}Lista de IPs permitidos
Se você definir uma lista de IPs permitidos na página da conta, requisições de outros IPs recebem ERROR_IP_NOT_ALLOWED.
Tipos de tarefa
Cada tipo tem um nome sem proxy e um nome com proxy (sem o Proxyless). Os nomes são reconhecidos sem diferenciar maiúsculas e minúsculas e com as grafias que outras APIs de resolução usam. Tarefas com proxy também precisam de proxyType (http, socks4, socks5), proxyAddress e proxyPort, ou de uma única string de proxy como http://user:[email protected]:8080. Campos opcionais não listados aqui são repassados ao resolvedor como foram enviados.
reCAPTCHA v2
DetalhesRecaptchaV2TaskProxylessRecaptchaV2Task
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
reCAPTCHA v2 Enterprise
DetalhesRecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
reCAPTCHA v3
DetalhesRecaptchaV3TaskProxylessRecaptchaV3Task
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
Cloudflare Turnstile
DetalhesTurnstileTaskProxylessTurnstileTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
FunCaptcha (Arkose Labs)
DetalhesFunCaptchaTaskProxylessFunCaptchaTask
Campos
websiteURL (obrigatório)websitePublicKey (obrigatório)
Amazon AWS WAF
DetalhesAmazonTaskProxylessAmazonTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
MTCaptcha
DetalhesMtCaptchaTaskProxylessMtCaptchaTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
Friendly Captcha
DetalhesFriendlyCaptchaTaskProxylessFriendlyCaptchaTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
Lemin Cropped Captcha
DetalhesLeminTaskProxylessLeminTask
Campos
websiteURL (obrigatório)captchaId (obrigatório)divId (obrigatório)
DataDome
DetalhesDataDomeSliderTask
Campos
websiteURL (obrigatório)captchaUrl (obrigatório)userAgent (obrigatório)
KeyCaptcha
DetalhesKeyCaptchaTaskProxylessKeyCaptchaTask
Campos
websiteURL (obrigatório)s_s_c_user_id (obrigatório)s_s_c_session_id (obrigatório)s_s_c_web_server_sign (obrigatório)s_s_c_web_server_sign2 (obrigatório)
Prosopo Procaptcha
DetalhesProsopoTaskProxylessProsopoTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
CaptchaFox
DetalhesCaptchaFoxTaskProxylessCaptchaFoxTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
NetEase Yidun
DetalhesYidunTaskProxylessYidunTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
Yandex SmartCaptcha
DetalhesYandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
Binance Captcha
DetalhesBinanceTaskProxylessBinanceTask
Campos
websiteURL (obrigatório)websiteKey (obrigatório)
Erros
Os mesmos nomes nos dois formatos. Requisições recusadas com erro não são cobradas.
| Erro | O que significa e o que fazer |
|---|---|
ERROR_KEY_DOES_NOT_EXIST | A chave está errada. Copie de novo na página da conta. (in.php e res.php: ERROR_WRONG_USER_KEY) |
ERROR_ZERO_BALANCE | O saldo não cobre a tarefa. Adicione saldo; nada foi cobrado. |
ERROR_NO_SLOT_AVAILABLE | Muitas requisições agora, então a tarefa não pôde ser aceita. Tente de novo em alguns segundos; nada foi cobrado. |
ERROR_TASK_NOT_SUPPORTED | O tipo de tarefa é desconhecido ou está desativado. Confira o nome do tipo. |
ERROR_BAD_PARAMETERS | Falta um campo obrigatório ou ele está no formato errado. |
ERROR_PAGEURL | websiteURL ou pageurl está faltando ou não é um endereço http(s) completo. |
ERROR_GOOGLEKEY | Falta googlekey em uma requisição de reCAPTCHA no in.php. |
ERROR_BAD_PROXY | Uma tarefa com proxy precisa de proxyAddress e proxyPort. |
ERROR_ZERO_CAPTCHA_FILESIZE | A imagem está faltando ou é pequena demais. |
ERROR_TOO_BIG_CAPTCHA_FILESIZE | A imagem tem mais de 100 KB. |
ERROR_IMAGE_TYPE_NOT_SUPPORTED | A imagem não está em base64 válido. |
ERROR_WRONG_CAPTCHA_ID | Não existe tarefa com este id na sua conta. |
CAPCHA_NOT_READY | Só in.php e res.php: a tarefa ainda está em andamento. Consulte de novo em 5 segundos. |
ERROR_CAPTCHA_UNSOLVABLE | A tarefa não pôde ser resolvida a tempo. O valor voltou para o seu saldo. |
ERROR_TOO_MANY_REQUESTS | Muitas requisições. Diminua as consultas de resultado para uma a cada 5 segundos. |
ERROR_IP_NOT_ALLOWED | A requisição veio de um IP que não está na lista de permitidos da conta. Adicione o IP na página da conta. |