UNLOCK API

Referencia de la API para resolver CAPTCHA

Dos formatos de solicitud, una cuenta. Usa los métodos JSON (createTask, getTaskResult, getBalance) o los métodos clásicos de formulario (in.php, res.php). Ambos usan la clave API de tu página de cuenta y el mismo saldo.

Lo básico

URL base
https://unlock-api.com
Clave API
32 caracteres, en tu página de cuenta. Envíala como clientKey (JSON) o key (in.php, res.php).
Formato
Métodos JSON: POST con cuerpo JSON. in.php y res.php: campos de formulario por GET o POST; agrega json=1 para recibir respuestas en JSON.
Límites
1,200 solicitudes por minuto por cuenta, incluidas las consultas de resultado. Espera unos 5 segundos después de crear una tarea y luego consulta cada 5 segundos.
Tiempo límite
Una tarea que no se resuelve en 5 minutos falla con ERROR_CAPTCHA_UNSOLVABLE y su cobro vuelve al saldo.
Cobro
El precio de la tarea se descuenta cuando se crea. Las tareas fallidas se reembolsan automáticamente.

Inicio rápido

Resuelve un reCAPTCHA v2 con los métodos JSON. Reemplaza YOUR_API_KEY por tu clave.

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 Crear una tarea

Cuerpo: clientKey y un objeto task. El tipo de tarea define los demás campos; consulta Tipos de tarea. Respuesta: errorId 0 y taskId, o errorId 1 con 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 Obtener el resultado

Cuerpo: clientKey y taskId. Mientras la tarea está en curso: status processing. Cuando termina: status ready con la solución y el costo. Una tarea fallida responde errorId 1 con su 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 el saldo

Cuerpo: clientKey. Respuesta: saldo en dólares estadounidenses.

{"clientKey":"YOUR_API_KEY"}

{"errorId":0,"balance":42.5}

Reportar una respuesta incorrecta

reportIncorrectRecaptcha y reportIncorrectImageCaptcha aceptan clientKey y taskId y responden success. Se aceptan por compatibilidad con librerías existentes; un reporte no cambia el cobro.

Métodos de formulario (in.php, res.php)

Enviar una tarea: in.php

Campos: key, method y los campos del tipo de CAPTCHA. Respuesta: OK|ID, o con json=1 {"status":1,"request":"ID"}. Los errores se devuelven con su nombre, 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"}

Obtener la respuesta: res.php

action=get&id=ID devuelve OK|ANSWER cuando está resuelta y CAPCHA_NOT_READY mientras se trabaja. action=get2 agrega el costo. ids=ID1,ID2 consulta hasta 100 tareas a la vez. action=getbalance devuelve el saldo. action=reportbad y reportgood se aceptan.

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

Más métodos

POST /getToken Crear y esperar: getToken

El mismo cuerpo que createTask. La llamada espera hasta 50 segundos y devuelve la misma respuesta que getTaskResult. Si la tarea sigue en curso, la respuesta es status processing con su taskId; sigue consultando 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

Agrega callbackUrl a createTask (o pingback a in.php) y el resultado se envía ahí cuando termina la tarea: un cuerpo JSON como el de getTaskResult con taskId, o en in.php un cuerpo de formulario id=…&code=…. Solo se llama a direcciones públicas, una vez, con un tiempo límite de 5 segundos; el resultado también sigue disponible 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"}

Estadísticas

getQueueStats devuelve las tareas en espera y en resolución en este momento, y el tiempo promedio de resolución de la última hora. getSpendingStats devuelve tu volumen y gasto por hora de un día UTC (date en tiempo unix). test devuelve el cuerpo que recibe.

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 IP permitidas

Si defines una lista de IP permitidas en la página de cuenta, las solicitudes desde otras IP reciben ERROR_IP_NOT_ALLOWED.

Tipos de tarea

Cada tipo tiene un nombre sin proxy y un nombre con proxy (sin Proxyless). Los nombres se reconocen sin importar mayúsculas o minúsculas y con las variantes que usan otras APIs de resolución. Las tareas con proxy también necesitan proxyType (http, socks4, socks5), proxyAddress y proxyPort, o una cadena de proxy como http://user:[email protected]:8080. Los campos opcionales que no aparecen aquí se pasan al solver tal como se envían.

reCAPTCHA v2

Detalles

RecaptchaV2TaskProxylessRecaptchaV2Task

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

reCAPTCHA v2 Enterprise

Detalles

RecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

reCAPTCHA v3

Detalles

RecaptchaV3TaskProxylessRecaptchaV3Task

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

Cloudflare Turnstile

Detalles

TurnstileTaskProxylessTurnstileTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

GeeTest v3 / v4

Detalles

GeeTestTaskProxylessGeeTestTask

Campos

websiteURL (obligatorio)

FunCaptcha (Arkose Labs)

Detalles

FunCaptchaTaskProxylessFunCaptchaTask

Campos

websiteURL (obligatorio)websitePublicKey (obligatorio)

Amazon AWS WAF

Detalles

AmazonTaskProxylessAmazonTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

MTCaptcha

Detalles

MtCaptchaTaskProxylessMtCaptchaTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

Friendly Captcha

Detalles

FriendlyCaptchaTaskProxylessFriendlyCaptchaTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

Lemin Cropped Captcha

Detalles

LeminTaskProxylessLeminTask

Campos

websiteURL (obligatorio)captchaId (obligatorio)divId (obligatorio)

DataDome

Detalles

DataDomeSliderTask

Campos

websiteURL (obligatorio)captchaUrl (obligatorio)userAgent (obligatorio)

KeyCaptcha

Detalles

KeyCaptchaTaskProxylessKeyCaptchaTask

Campos

websiteURL (obligatorio)s_s_c_user_id (obligatorio)s_s_c_session_id (obligatorio)s_s_c_web_server_sign (obligatorio)s_s_c_web_server_sign2 (obligatorio)

Capy Puzzle

Detalles

CapyTaskProxylessCapyTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

Página de desafío de Cloudflare

Detalles

AntiCloudflareTask

Campos

websiteURL (obligatorio)

Cutcaptcha

Detalles

CutCaptchaTaskProxylessCutCaptchaTask

Campos

websiteURL (obligatorio)

CyberSiARA

Detalles

AntiCyberSiAraTaskProxylessAntiCyberSiAraTask

Campos

websiteURL (obligatorio)

atbCAPTCHA

Detalles

AtbCaptchaTaskProxylessAtbCaptchaTask

Campos

websiteURL (obligatorio)

Tencent Captcha

Detalles

TencentTaskProxylessTencentTask

Campos

websiteURL (obligatorio)

Prosopo Procaptcha

Detalles

ProsopoTaskProxylessProsopoTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

CaptchaFox

Detalles

CaptchaFoxTaskProxylessCaptchaFoxTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

Altcha

Detalles

AltchaTaskProxylessAltchaTask

Campos

websiteURL (obligatorio)

NetEase Yidun

Detalles

YidunTaskProxylessYidunTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

Yandex SmartCaptcha

Detalles

YandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

VK Captcha

Detalles

VKCaptchaTaskProxylessVKCaptchaTask

Campos

websiteURL (obligatorio)

Binance Captcha

Detalles

BinanceTaskProxylessBinanceTask

Campos

websiteURL (obligatorio)websiteKey (obligatorio)

Tarea personalizada (Imperva, Temu y otros)

Detalles

CustomTask

Campos

class (obligatorio)

Imagen a texto

Detalles

ImageToTextTask

Campos

body (obligatorio)

Pregunta de texto

Detalles

TextCaptchaTask

Campos

comment (obligatorio)

Cuadrícula de imágenes

Detalles

GridTask

Campos

body (obligatorio)

Coordenadas de clic

Detalles

CoordinatesTask

Campos

body (obligatorio)

Rotación

Detalles

RotateTask

Campos

body (obligatorio)

AudioTask

Campos

body (obligatorio)

Cuadro delimitador

Detalles

BoundingBoxTask

Campos

body (obligatorio)

Dibujar contorno

Detalles

DrawAroundTask

Campos

body (obligatorio)

Arrastrar y soltar

Detalles

DragAndDropTask

Campos

Tarea de imagen compleja

Detalles

ComplexImageTask

Campos

class (obligatorio)

Errores

Los mismos nombres en ambos formatos. Las solicitudes rechazadas con un error no se cobran.

ErrorQué significa y qué hacer
ERROR_KEY_DOES_NOT_EXISTLa clave es incorrecta. Cópiala de nuevo desde la página de cuenta. (in.php y res.php: ERROR_WRONG_USER_KEY)
ERROR_ZERO_BALANCEEl saldo no alcanza para la tarea. Agrega fondos; no se cobró nada.
ERROR_NO_SLOT_AVAILABLEHay demasiadas solicitudes en este momento, por eso no se pudo aceptar la tarea. Inténtalo de nuevo en unos segundos; no se cobró nada.
ERROR_TASK_NOT_SUPPORTEDEl tipo de tarea es desconocido o está desactivado. Revisa el nombre del tipo.
ERROR_BAD_PARAMETERSFalta un campo obligatorio o tiene un formato incorrecto.
ERROR_PAGEURLFalta websiteURL o pageurl, o no es una dirección http(s) completa.
ERROR_GOOGLEKEYFalta googlekey en una solicitud de reCAPTCHA a in.php.
ERROR_BAD_PROXYUna tarea con proxy necesita proxyAddress y proxyPort.
ERROR_ZERO_CAPTCHA_FILESIZEFalta la imagen o es demasiado pequeña.
ERROR_TOO_BIG_CAPTCHA_FILESIZELa imagen pesa más de 100 KB.
ERROR_IMAGE_TYPE_NOT_SUPPORTEDLa imagen no es un base64 válido.
ERROR_WRONG_CAPTCHA_IDNo hay ninguna tarea con este id en tu cuenta.
CAPCHA_NOT_READYSolo in.php y res.php: la tarea sigue en curso. Vuelve a consultar en 5 segundos.
ERROR_CAPTCHA_UNSOLVABLELa tarea no se pudo resolver a tiempo. Su cobro ya volvió a tu saldo.
ERROR_TOO_MANY_REQUESTSDemasiadas solicitudes. Espacia las consultas de resultado a una cada 5 segundos.
ERROR_IP_NOT_ALLOWEDLa solicitud vino de una IP que no está en la lista de permitidas de la cuenta. Agrega la IP en la página de cuenta.