UNLOCK API

캡차 풀이 API 설명서

요청 형식은 두 가지, 계정은 하나예요. JSON 방식(createTask, getTaskResult, getBalance)이나 예전 폼 방식(in.php, res.php) 중 편한 쪽을 쓰세요. 둘 다 계정 화면의 API 키와 같은 잔액을 써요.

기본 정보

접속 주소
https://unlock-api.com
API 키
32자예요. 계정 화면에 있어요. JSON 방식은 clientKey, in.php와 res.php는 key로 보내요.
형식
JSON 방식은 JSON 본문으로 POST해요. in.php와 res.php는 GET이나 POST 폼 항목으로 보내고, json=1을 붙이면 JSON으로 답해요.
한도
계정 하나당 1분에 1,200번까지(결과 확인 포함). 작업을 만들고 5초쯤 기다린 뒤 5초마다 확인하세요.
시간 제한
5분 안에 못 푼 작업은 ERROR_CAPTCHA_UNSOLVABLE로 끝나고 비용이 잔액으로 돌아와요.
결제
작업이 만들어질 때 가격이 빠지고, 실패한 작업은 자동으로 환불돼요.

빠른 시작

JSON 방식으로 reCAPTCHA v2를 푸는 예시예요. YOUR_API_KEY를 내 키로 바꾸세요.

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

JSON 방식

POST /createTask 작업 만들기

본문: clientKey와 task. 다른 항목은 작업 종류마다 달라요(아래 작업 종류 참고). 답: errorId 0과 taskId, 또는 errorId 1과 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 결과 받기

본문: clientKey와 taskId. 푸는 동안에는 status processing, 끝나면 status ready와 solution, cost가 와요. 실패한 작업은 errorId 1과 오류 이름으로 답해요.

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 잔액 확인

본문: clientKey. 답: 미국 달러 잔액.

{"clientKey":"YOUR_API_KEY"}

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

틀린 답 신고

reportIncorrectRecaptcha와 reportIncorrectImageCaptcha는 clientKey와 taskId를 받아 success로 답해요. 기존 라이브러리와 맞추려고 받아 두는 호출이고, 비용은 바뀌지 않아요.

폼 방식 (in.php, res.php)

작업 보내기: in.php

항목: key, method, 그리고 캡차 종류별 항목. 답: OK|번호, json=1이면 {"status":1,"request":"번호"}. 오류는 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"}

답 받기: res.php

action=get&id=번호는 풀리면 OK|답, 푸는 중이면 CAPCHA_NOT_READY. action=get2는 비용도 함께 줘요. ids=번호1,번호2로 한 번에 100개까지 확인해요. action=getbalance는 잔액, reportbad와 reportgood도 받아요.

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

추가 호출

POST /getToken 만들고 기다리기: getToken

본문은 createTask와 같아요. 최대 50초 기다렸다가 getTaskResult와 같은 답을 돌려줘요. 그때까지 안 끝났으면 status processing과 taskId를 주니 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"}

결과 알림

createTask에 callbackUrl을(in.php는 pingback을) 넣으면 작업이 끝날 때 결과를 그 주소로 보내요. getTaskResult와 같은 JSON에 taskId가 붙고, in.php는 id=…&code=… 폼으로 보내요. 공개 주소로만 한 번, 5초 제한으로 보내고, 결과는 확인 호출로도 계속 받을 수 있어요.

{"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"}

통계

getQueueStats는 지금 대기 중·푸는 중인 작업 수와 최근 1시간 평균 풀이 시간을 줘요. getSpendingStats는 UTC 하루(date는 유닉스 시간) 동안 시간별 작업 수와 금액을 줘요. test는 받은 본문을 그대로 돌려줘요.

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}}

IP 허용 목록

계정 화면에서 IP 허용 목록을 정하면, 다른 IP에서 온 요청은 ERROR_IP_NOT_ALLOWED를 받아요.

작업 종류

모든 종류에는 프록시 없는 이름과 프록시 이름(Proxyless를 뺀 이름)이 있어요. 이름은 대소문자와 다른 풀이 API들의 표기를 가리지 않고 받아요. 프록시 작업은 proxyType(http, socks4, socks5), proxyAddress, proxyPort, 또는 http://user:[email protected]:8080 같은 proxy 문자열 하나가 더 필요해요. 여기 없는 선택 항목은 보낸 그대로 풀이 쪽에 전달해요.

reCAPTCHA v2

자세히

RecaptchaV2TaskProxylessRecaptchaV2Task

항목

websiteURL (필수)websiteKey (필수)

reCAPTCHA v2 Enterprise

자세히

RecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask

항목

websiteURL (필수)websiteKey (필수)

reCAPTCHA v3

자세히

RecaptchaV3TaskProxylessRecaptchaV3Task

항목

websiteURL (필수)websiteKey (필수)

Cloudflare Turnstile

자세히

TurnstileTaskProxylessTurnstileTask

항목

websiteURL (필수)websiteKey (필수)

GeeTest v3 / v4

자세히

GeeTestTaskProxylessGeeTestTask

항목

websiteURL (필수)

FunCaptcha (Arkose Labs)

자세히

FunCaptchaTaskProxylessFunCaptchaTask

항목

websiteURL (필수)websitePublicKey (필수)

Amazon AWS WAF

자세히

AmazonTaskProxylessAmazonTask

항목

websiteURL (필수)websiteKey (필수)

MTCaptcha

자세히

MtCaptchaTaskProxylessMtCaptchaTask

항목

websiteURL (필수)websiteKey (필수)

Friendly Captcha

자세히

FriendlyCaptchaTaskProxylessFriendlyCaptchaTask

항목

websiteURL (필수)websiteKey (필수)

Lemin Cropped Captcha

자세히

LeminTaskProxylessLeminTask

항목

websiteURL (필수)captchaId (필수)divId (필수)

DataDome

자세히

DataDomeSliderTask

항목

websiteURL (필수)captchaUrl (필수)userAgent (필수)

KeyCaptcha

자세히

KeyCaptchaTaskProxylessKeyCaptchaTask

항목

websiteURL (필수)s_s_c_user_id (필수)s_s_c_session_id (필수)s_s_c_web_server_sign (필수)s_s_c_web_server_sign2 (필수)

Capy Puzzle

자세히

CapyTaskProxylessCapyTask

항목

websiteURL (필수)websiteKey (필수)

Cloudflare 챌린지 페이지

자세히

AntiCloudflareTask

항목

websiteURL (필수)

Cutcaptcha

자세히

CutCaptchaTaskProxylessCutCaptchaTask

항목

websiteURL (필수)

CyberSiARA

자세히

AntiCyberSiAraTaskProxylessAntiCyberSiAraTask

항목

websiteURL (필수)

atbCAPTCHA

자세히

AtbCaptchaTaskProxylessAtbCaptchaTask

항목

websiteURL (필수)

Tencent Captcha

자세히

TencentTaskProxylessTencentTask

항목

websiteURL (필수)

Prosopo Procaptcha

자세히

ProsopoTaskProxylessProsopoTask

항목

websiteURL (필수)websiteKey (필수)

CaptchaFox

자세히

CaptchaFoxTaskProxylessCaptchaFoxTask

항목

websiteURL (필수)websiteKey (필수)

Altcha

자세히

AltchaTaskProxylessAltchaTask

항목

websiteURL (필수)

NetEase Yidun

자세히

YidunTaskProxylessYidunTask

항목

websiteURL (필수)websiteKey (필수)

Yandex SmartCaptcha

자세히

YandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask

항목

websiteURL (필수)websiteKey (필수)

VK Captcha

자세히

VKCaptchaTaskProxylessVKCaptchaTask

항목

websiteURL (필수)

Binance Captcha

자세히

BinanceTaskProxylessBinanceTask

항목

websiteURL (필수)websiteKey (필수)

범용 작업 (Imperva, Temu 등)

자세히

CustomTask

항목

class (필수)

이미지 글자

자세히

ImageToTextTask

항목

body (필수)

글자 질문

자세히

TextCaptchaTask

항목

comment (필수)

이미지 칸 고르기

자세히

GridTask

항목

body (필수)

클릭 좌표

자세히

CoordinatesTask

항목

body (필수)

이미지 회전

자세히

RotateTask

항목

body (필수)

음성

자세히

AudioTask

항목

body (필수)

영역 표시

자세히

BoundingBoxTask

항목

body (필수)

테두리 그리기

자세히

DrawAroundTask

항목

body (필수)

끌어다 놓기

자세히

DragAndDropTask

항목

복합 이미지

자세히

ComplexImageTask

항목

class (필수)

오류

두 형식 모두 이름이 같아요. 오류로 거절된 요청은 비용이 빠지지 않아요.

오류뜻과 해결 방법
ERROR_KEY_DOES_NOT_EXIST키가 틀렸어요. 계정 화면에서 다시 복사하세요. (in.php, res.php에서는 ERROR_WRONG_USER_KEY)
ERROR_ZERO_BALANCE잔액이 작업 비용보다 적어요. 충전하세요. 비용은 빠지지 않았어요.
ERROR_NO_SLOT_AVAILABLE지금 요청이 몰려 작업을 받을 수 없어요. 몇 초 뒤에 다시 보내세요. 비용은 빠지지 않았어요.
ERROR_TASK_NOT_SUPPORTED모르는 작업 종류이거나 지금 받지 않는 종류예요. 이름을 확인하세요.
ERROR_BAD_PARAMETERS필수 항목이 없거나 형식이 틀렸어요.
ERROR_PAGEURLwebsiteURL(pageurl)이 없거나 http(s)로 시작하는 전체 주소가 아니에요.
ERROR_GOOGLEKEYin.php reCAPTCHA 요청에 googlekey가 없어요.
ERROR_BAD_PROXY프록시 작업에는 proxyAddress와 proxyPort가 필요해요.
ERROR_ZERO_CAPTCHA_FILESIZE이미지가 없거나 너무 작아요.
ERROR_TOO_BIG_CAPTCHA_FILESIZE이미지가 100 KB보다 커요.
ERROR_IMAGE_TYPE_NOT_SUPPORTED이미지가 올바른 base64가 아니에요.
ERROR_WRONG_CAPTCHA_ID내 계정에 그 번호의 작업이 없어요.
CAPCHA_NOT_READYin.php, res.php 전용: 아직 푸는 중이에요. 5초 뒤에 다시 확인하세요.
ERROR_CAPTCHA_UNSOLVABLE시간 안에 못 풀었어요. 비용은 잔액으로 돌아왔어요.
ERROR_TOO_MANY_REQUESTS요청이 너무 많아요. 결과 확인을 5초 간격으로 줄이세요.
ERROR_IP_NOT_ALLOWED계정의 허용 목록에 없는 IP에서 온 요청이에요. 계정 화면에서 IP를 추가하세요.