UNLOCK API

Referência da API para resolver CAPTCHA

Dois formatos de requisição, uma conta. Use os métodos JSON (createTask, getTaskResult, getBalance) ou os métodos clássicos de formulário (in.php, res.php). Os dois usam a chave de API da página da conta e o mesmo saldo.

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"])
        break

Mé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

Detalhes

RecaptchaV2TaskProxylessRecaptchaV2Task

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

reCAPTCHA v2 Enterprise

Detalhes

RecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

reCAPTCHA v3

Detalhes

RecaptchaV3TaskProxylessRecaptchaV3Task

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

Cloudflare Turnstile

Detalhes

TurnstileTaskProxylessTurnstileTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

GeeTest v3 / v4

Detalhes

GeeTestTaskProxylessGeeTestTask

Campos

websiteURL (obrigatório)

FunCaptcha (Arkose Labs)

Detalhes

FunCaptchaTaskProxylessFunCaptchaTask

Campos

websiteURL (obrigatório)websitePublicKey (obrigatório)

Amazon AWS WAF

Detalhes

AmazonTaskProxylessAmazonTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

MTCaptcha

Detalhes

MtCaptchaTaskProxylessMtCaptchaTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

Friendly Captcha

Detalhes

FriendlyCaptchaTaskProxylessFriendlyCaptchaTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

Lemin Cropped Captcha

Detalhes

LeminTaskProxylessLeminTask

Campos

websiteURL (obrigatório)captchaId (obrigatório)divId (obrigatório)

DataDome

Detalhes

DataDomeSliderTask

Campos

websiteURL (obrigatório)captchaUrl (obrigatório)userAgent (obrigatório)

KeyCaptcha

Detalhes

KeyCaptchaTaskProxylessKeyCaptchaTask

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)

Capy Puzzle

Detalhes

CapyTaskProxylessCapyTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

Página de desafio do Cloudflare

Detalhes

AntiCloudflareTask

Campos

websiteURL (obrigatório)

Cutcaptcha

Detalhes

CutCaptchaTaskProxylessCutCaptchaTask

Campos

websiteURL (obrigatório)

CyberSiARA

Detalhes

AntiCyberSiAraTaskProxylessAntiCyberSiAraTask

Campos

websiteURL (obrigatório)

atbCAPTCHA

Detalhes

AtbCaptchaTaskProxylessAtbCaptchaTask

Campos

websiteURL (obrigatório)

Tencent Captcha

Detalhes

TencentTaskProxylessTencentTask

Campos

websiteURL (obrigatório)

Prosopo Procaptcha

Detalhes

ProsopoTaskProxylessProsopoTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

CaptchaFox

Detalhes

CaptchaFoxTaskProxylessCaptchaFoxTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

Altcha

Detalhes

AltchaTaskProxylessAltchaTask

Campos

websiteURL (obrigatório)

NetEase Yidun

Detalhes

YidunTaskProxylessYidunTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

Yandex SmartCaptcha

Detalhes

YandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

VK Captcha

Detalhes

VKCaptchaTaskProxylessVKCaptchaTask

Campos

websiteURL (obrigatório)

Binance Captcha

Detalhes

BinanceTaskProxylessBinanceTask

Campos

websiteURL (obrigatório)websiteKey (obrigatório)

Tarefa personalizada (Imperva, Temu e outras)

Detalhes

CustomTask

Campos

class (obrigatório)

Imagem para texto

Detalhes

ImageToTextTask

Campos

body (obrigatório)

Pergunta em texto

Detalhes

TextCaptchaTask

Campos

comment (obrigatório)

Grade de imagens

Detalhes

GridTask

Campos

body (obrigatório)

Coordenadas de clique

Detalhes

CoordinatesTask

Campos

body (obrigatório)

RotateTask

Campos

body (obrigatório)

Áudio

Detalhes

AudioTask

Campos

body (obrigatório)

Caixa delimitadora

Detalhes

BoundingBoxTask

Campos

body (obrigatório)

Desenhar contorno

Detalhes

DrawAroundTask

Campos

body (obrigatório)

Arrastar e soltar

Detalhes

DragAndDropTask

Campos

Tarefa de imagem complexa

Detalhes

ComplexImageTask

Campos

class (obrigatório)

Erros

Os mesmos nomes nos dois formatos. Requisições recusadas com erro não são cobradas.

ErroO que significa e o que fazer
ERROR_KEY_DOES_NOT_EXISTA chave está errada. Copie de novo na página da conta. (in.php e res.php: ERROR_WRONG_USER_KEY)
ERROR_ZERO_BALANCEO saldo não cobre a tarefa. Adicione saldo; nada foi cobrado.
ERROR_NO_SLOT_AVAILABLEMuitas 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_SUPPORTEDO tipo de tarefa é desconhecido ou está desativado. Confira o nome do tipo.
ERROR_BAD_PARAMETERSFalta um campo obrigatório ou ele está no formato errado.
ERROR_PAGEURLwebsiteURL ou pageurl está faltando ou não é um endereço http(s) completo.
ERROR_GOOGLEKEYFalta googlekey em uma requisição de reCAPTCHA no in.php.
ERROR_BAD_PROXYUma tarefa com proxy precisa de proxyAddress e proxyPort.
ERROR_ZERO_CAPTCHA_FILESIZEA imagem está faltando ou é pequena demais.
ERROR_TOO_BIG_CAPTCHA_FILESIZEA imagem tem mais de 100 KB.
ERROR_IMAGE_TYPE_NOT_SUPPORTEDA imagem não está em base64 válido.
ERROR_WRONG_CAPTCHA_IDNão existe tarefa com este id na sua conta.
CAPCHA_NOT_READYSó in.php e res.php: a tarefa ainda está em andamento. Consulte de novo em 5 segundos.
ERROR_CAPTCHA_UNSOLVABLEA tarefa não pôde ser resolvida a tempo. O valor voltou para o seu saldo.
ERROR_TOO_MANY_REQUESTSMuitas requisições. Diminua as consultas de resultado para uma a cada 5 segundos.
ERROR_IP_NOT_ALLOWEDA requisição veio de um IP que não está na lista de permitidos da conta. Adicione o IP na página da conta.