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"])
breakMé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
DetallesRecaptchaV2TaskProxylessRecaptchaV2Task
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
reCAPTCHA v2 Enterprise
DetallesRecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
reCAPTCHA v3
DetallesRecaptchaV3TaskProxylessRecaptchaV3Task
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
Cloudflare Turnstile
DetallesTurnstileTaskProxylessTurnstileTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
FunCaptcha (Arkose Labs)
DetallesFunCaptchaTaskProxylessFunCaptchaTask
Campos
websiteURL (obligatorio)websitePublicKey (obligatorio)
Amazon AWS WAF
DetallesAmazonTaskProxylessAmazonTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
MTCaptcha
DetallesMtCaptchaTaskProxylessMtCaptchaTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
Friendly Captcha
DetallesFriendlyCaptchaTaskProxylessFriendlyCaptchaTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
Lemin Cropped Captcha
DetallesLeminTaskProxylessLeminTask
Campos
websiteURL (obligatorio)captchaId (obligatorio)divId (obligatorio)
DataDome
DetallesDataDomeSliderTask
Campos
websiteURL (obligatorio)captchaUrl (obligatorio)userAgent (obligatorio)
KeyCaptcha
DetallesKeyCaptchaTaskProxylessKeyCaptchaTask
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)
Prosopo Procaptcha
DetallesProsopoTaskProxylessProsopoTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
CaptchaFox
DetallesCaptchaFoxTaskProxylessCaptchaFoxTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
NetEase Yidun
DetallesYidunTaskProxylessYidunTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
Yandex SmartCaptcha
DetallesYandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
Binance Captcha
DetallesBinanceTaskProxylessBinanceTask
Campos
websiteURL (obligatorio)websiteKey (obligatorio)
Errores
Los mismos nombres en ambos formatos. Las solicitudes rechazadas con un error no se cobran.
| Error | Qué significa y qué hacer |
|---|---|
ERROR_KEY_DOES_NOT_EXIST | La clave es incorrecta. Cópiala de nuevo desde la página de cuenta. (in.php y res.php: ERROR_WRONG_USER_KEY) |
ERROR_ZERO_BALANCE | El saldo no alcanza para la tarea. Agrega fondos; no se cobró nada. |
ERROR_NO_SLOT_AVAILABLE | Hay 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_SUPPORTED | El tipo de tarea es desconocido o está desactivado. Revisa el nombre del tipo. |
ERROR_BAD_PARAMETERS | Falta un campo obligatorio o tiene un formato incorrecto. |
ERROR_PAGEURL | Falta websiteURL o pageurl, o no es una dirección http(s) completa. |
ERROR_GOOGLEKEY | Falta googlekey en una solicitud de reCAPTCHA a in.php. |
ERROR_BAD_PROXY | Una tarea con proxy necesita proxyAddress y proxyPort. |
ERROR_ZERO_CAPTCHA_FILESIZE | Falta la imagen o es demasiado pequeña. |
ERROR_TOO_BIG_CAPTCHA_FILESIZE | La imagen pesa más de 100 KB. |
ERROR_IMAGE_TYPE_NOT_SUPPORTED | La imagen no es un base64 válido. |
ERROR_WRONG_CAPTCHA_ID | No hay ninguna tarea con este id en tu cuenta. |
CAPCHA_NOT_READY | Solo in.php y res.php: la tarea sigue en curso. Vuelve a consultar en 5 segundos. |
ERROR_CAPTCHA_UNSOLVABLE | La tarea no se pudo resolver a tiempo. Su cobro ya volvió a tu saldo. |
ERROR_TOO_MANY_REQUESTS | Demasiadas solicitudes. Espacia las consultas de resultado a una cada 5 segundos. |
ERROR_IP_NOT_ALLOWED | La 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. |