Overview
Mga JSON method
Mga token task
- reCAPTCHA v2
- reCAPTCHA v2 Enterprise
- reCAPTCHA v3
- Cloudflare Turnstile
- GeeTest v3 / v4
- FunCaptcha (Arkose Labs)
- Amazon AWS WAF
- MTCaptcha
- Friendly Captcha
- Lemin Cropped Captcha
- DataDome
- KeyCaptcha
- Capy Puzzle
- Cloudflare Challenge page
- Cutcaptcha
- CyberSiARA
- atbCAPTCHA
- Tencent Captcha
- Prosopo Procaptcha
- CaptchaFox
- Altcha
- NetEase Yidun
- Yandex SmartCaptcha
- VK Captcha
- Binance Captcha
- Custom task (Imperva, Temu at iba pa)
Dokumentasyon ng UNLOCK API
Ipadala ang CAPTCHA bilang task, saka kunin ang sagot. Pareho ang mga pangalan ng method, pangalan ng task at error code ng API sa ibang solver API, kaya gagana ang karamihan ng existing code pagkatapos mong palitan ang host at ang key.
Paano gumagana ang request
- 1
createTaskGumawa ng task
POST /createTask gamit ang key mo at isang task object. Makakatanggap ka ng taskId. Kinukuha agad ang presyo sa balance.
- 2
getTaskResultI-check ang resulta
Maghintay ng mga 5 segundo, saka mag-POST /getTaskResult bawat 5 segundo hanggang ready na ang status.
- 3
solutionGamitin ang sagot
Ilagay ang token o text mula sa solution sa form ng page. Kung mag-fail ang task, babalik ang singil sa balance.
Mga pangunahing detalye
- Base URL
https://unlock-api.com- API key
- 32 character, nasa account page mo. Ipadala ito bilang clientKey (JSON) o key (in.php, res.php).
- Format
- JSON methods: POST na may JSON body. in.php at res.php: GET o POST na form fields; idagdag ang json=1 para sa JSON na sagot.
- Mga limit
- 1,200 request bawat minuto bawat account, kasama ang pag-check ng resulta. Maghintay ng mga 5 segundo pagkatapos gumawa ng task, saka mag-check bawat 5 segundo.
- Limit sa oras
- Ang task na hindi na-solve sa loob ng 5 minuto ay magfa-fail gamit ang ERROR_CAPTCHA_UNSOLVABLE at babalik ang singil nito sa balance.
- Singil
- Kinukuha ang presyo ng task kapag ginawa ang task. Awtomatikong nire-refund ang mga failed task.
Mabilis na simula
Mag-solve ng reCAPTCHA v2 gamit ang JSON methods. Palitan ang YOUR_API_KEY ng key mo.
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"])
for _ in range(60): # 60 x 5 s = the 5 minute task limit
time.sleep(5)
r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task["taskId"]}).json()
if r["errorId"]:
raise SystemExit(f"{r['errorCode']}: {r.get('errorDescription', '')}") # failed tasks are refunded
if r["status"] == "ready":
print(r["solution"]["gRecaptchaResponse"])
break
else:
raise SystemExit("timed out")const API = "https://unlock-api.com";
const KEY = "YOUR_API_KEY";
const post = (path, body) => fetch(API + path, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body) }).then((r) => r.json());
const task = await post("/createTask", {
clientKey: KEY,
task: {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"
},
});
if (task.errorId) throw new Error(task.errorCode);
let solution = null;
for (let n = 0; n < 60 && !solution; n++) { // 60 x 5 s = the 5 minute task limit
await new Promise((r) => setTimeout(r, 5000));
const r = await post("/getTaskResult", { clientKey: KEY, taskId: task.taskId });
if (r.errorId) throw new Error(r.errorCode + ": " + r.errorDescription); // failed tasks are refunded
if (r.status === "ready") solution = r.solution;
}
if (!solution) throw new Error("timed out");
console.log(solution.gRecaptchaResponse);<?php
$api = "https://unlock-api.com";
$key = "YOUR_API_KEY";
function post($url, $body) {
$c = curl_init($url);
curl_setopt_array($c, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($body)]);
return json_decode(curl_exec($c), true);
}
$task = post("$api/createTask", ["clientKey" => $key, "task" => json_decode('{"type":"RecaptchaV2TaskProxyless","websiteURL":"https://example.com/login","websiteKey":"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"}', true)]);
if ($task["errorId"]) exit($task["errorCode"]);
for ($n = 0; $n < 60; $n++) { // 60 x 5 s = the 5 minute task limit
sleep(5);
$r = post("$api/getTaskResult", ["clientKey" => $key, "taskId" => $task["taskId"]]);
if ($r["errorId"]) exit($r["errorCode"] . ": " . $r["errorDescription"]); // failed tasks are refunded
if ($r["status"] === "ready") break;
}
if ($r["status"] !== "ready") exit("timed out");
print_r($r["solution"]["gRecaptchaResponse"]);package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const api = "https://unlock-api.com"
const key = "YOUR_API_KEY"
func post(method string, body map[string]any) map[string]any {
b, _ := json.Marshal(body)
res, err := http.Post(api+"/"+method, "application/json", bytes.NewReader(b))
if err != nil {
panic(err)
}
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
return out
}
func main() {
task := post("createTask", map[string]any{
"clientKey": key,
"task": map[string]any{
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo",
},
})
if task["errorId"].(float64) != 0 {
panic(task["errorCode"])
}
for n := 0; n < 60; n++ { // 60 x 5 s = the 5 minute task limit
time.Sleep(5 * time.Second)
r := post("getTaskResult", map[string]any{"clientKey": key, "taskId": task["taskId"]})
if r["errorId"].(float64) != 0 {
panic(r["errorCode"]) // failed tasks are refunded
}
if r["status"] == "ready" {
fmt.Println(r["solution"])
return
}
}
panic("timed out")
}import java.net.URI;
import java.net.http.*;
import java.util.regex.*;
public class Solve {
static final String API = "https://unlock-api.com", KEY = "YOUR_API_KEY";
static final HttpClient HTTP = HttpClient.newHttpClient();
static String post(String method, String json) throws Exception {
var req = HttpRequest.newBuilder(URI.create(API + "/" + method))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json)).build();
return HTTP.send(req, HttpResponse.BodyHandlers.ofString()).body();
}
public static void main(String[] args) throws Exception {
String task = "{\"type\":\"RecaptchaV2TaskProxyless\",\"websiteURL\":\"https://example.com/login\",\"websiteKey\":\"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo\"}";
String created = post("createTask", "{\"clientKey\":\"" + KEY + "\",\"task\":" + task + "}");
Matcher id = Pattern.compile("\"taskId\":(\\d+)").matcher(created);
if (!id.find()) throw new RuntimeException(created);
for (int n = 0; n < 60; n++) { // 60 x 5 s = the 5 minute task limit
Thread.sleep(5000);
String r = post("getTaskResult", "{\"clientKey\":\"" + KEY + "\",\"taskId\":" + id.group(1) + "}");
if (r.contains("\"errorId\":1")) throw new RuntimeException(r); // failed tasks are refunded
if (r.contains("\"status\":\"ready\"")) { System.out.println(r); return; }
}
throw new RuntimeException("timed out");
}
}using System.Net.Http.Json;
using System.Text.Json;
const string Api = "https://unlock-api.com";
const string Key = "YOUR_API_KEY";
var http = new HttpClient();
async Task<JsonElement> Post(string method, object body) =>
await (await http.PostAsJsonAsync($"{Api}/{method}", body)).Content.ReadFromJsonAsync<JsonElement>();
var task = await Post("createTask", new {
clientKey = Key,
task = JsonSerializer.Deserialize<JsonElement>("""
{"type":"RecaptchaV2TaskProxyless","websiteURL":"https://example.com/login","websiteKey":"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"}
""")
});
if (task.GetProperty("errorId").GetInt32() != 0) throw new Exception(task.GetProperty("errorCode").GetString());
for (var n = 0; n < 60; n++) { // 60 x 5 s = the 5 minute task limit
await Task.Delay(5000);
var r = await Post("getTaskResult", new { clientKey = Key, taskId = task.GetProperty("taskId").GetInt64() });
if (r.GetProperty("errorId").GetInt32() != 0) throw new Exception(r.GetProperty("errorCode").GetString()); // failed tasks are refunded
if (r.GetProperty("status").GetString() == "ready") { Console.WriteLine(r.GetProperty("solution")); return; }
}
throw new Exception("timed out");curl -s https://unlock-api.com/createTask \
-H "Content-Type: application/json" \
-d '{"clientKey":"YOUR_API_KEY","task":{"type":"RecaptchaV2TaskProxyless","websiteURL":"https://example.com/login","websiteKey":"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"}}'
# {"errorId":0,"taskId":1001}
curl -s https://unlock-api.com/getTaskResult \
-H "Content-Type: application/json" \
-d '{"clientKey":"YOUR_API_KEY","taskId":1001}'
# {"errorId":0,"status":"processing"} then {"errorId":0,"status":"ready","solution":{...},"cost":"0.001"}Mga method
createTaskGumagawa ng task at ibinabalik ang id nito. Kinukuha sa balance ang presyo ng task type kapag tinanggap ang task, at ibinabalik kung mag-fail ang task.getTaskResultIbinabalik ang estado ng task. Habang sino-solve ito, processing ang status. Kapag tapos na, ready ang status at nasa solution ang sagot. Ang failed task ay nagbabalik ng errorId 1 kasama ang dahilan, at nakabalik na sa balance ang singil nito.getBalanceIbinabalik ang balance ng account sa US dollars.getTokenGumagawa ng task at hinihintay ang sagot sa parehong request, hanggang 50 segundo. Kung hindi pa tapos ang task pagdating doon, ang sagot ay status processing kasama ang taskId; patuloy itong i-check gamit ang getTaskResult. Hindi ipinapadala ang mga result callback para sa mga getToken task.getQueueStatsIbinabalik ang kasalukuyang queue: mga task na naghihintay, mga task na sino-solve at ang average na oras ng pag-solve sa nakaraang oras. Galing sa totoong task ang mga numero, hindi tantiya.getSpendingStatsIbinabalik ang gastos mo sa isang UTC na araw, kada oras: bilang ng task at perang nagastos. Hindi kasama ang mga failed at na-refund na task.reportCorrect, reportIncorrectMag-report ng tama o maling sagot. Tinatanggap ang mga call na ito para patuloy na gumana ang mga existing library; hindi binabago ng report ang singil.testEcho para sa debugging. Ibinabalik ang JSON body na natanggap nito, nang walang clientKey. Walang key check, walang singil.
Mga gabay
- API key at seguridadPaano ipadala ang key mo, gumamit ng higit sa isang key at payagan lang ang mga server mo.
- Limit, timing at singilMga request limit, gaano kadalas i-check ang resulta, ang limit sa oras at kailan ka sinisingil.
- Mga error codeBawat error code, ang ibig sabihin nito, ang dapat gawin at kung sinisingil ka.
- Paggamit ng proxyKailan mag-solve gamit ang sarili mong proxy at paano ito ipadala.
- Mga result callbackIpadala ang resulta sa server mo sa halip na i-check mo ito.
- Form API: in.php at res.phpAng classic na in.php at res.php request, para sa code na isinulat para sa mas lumang solver API.
Mga task type
May sariling page ang bawat type na may bawat parameter, ang solution object at mga sample.
Mga token task
- reCAPTCHA v2
RecaptchaV2TaskProxylessuserrecaptcha - reCAPTCHA v2 Enterprise
RecaptchaV2EnterpriseTaskProxylessuserrecaptcha, enterprise=1 - reCAPTCHA v3
RecaptchaV3TaskProxylessuserrecaptcha, version=v3 - Cloudflare Turnstile
TurnstileTaskProxylessturnstile - GeeTest v3 / v4
GeeTestTaskProxylessgeetest, geetest_v4 - FunCaptcha (Arkose Labs)
FunCaptchaTaskProxylessfuncaptcha - Amazon AWS WAF
AmazonTaskProxylessamazon_waf - MTCaptcha
MtCaptchaTaskProxylessmt_captcha - Friendly Captcha
FriendlyCaptchaTaskProxylessfriendly_captcha - Lemin Cropped Captcha
LeminTaskProxylesslemin - DataDome
DataDomeSliderTaskdatadome - KeyCaptcha
KeyCaptchaTaskProxylesskeycaptcha - Capy Puzzle
CapyTaskProxylesscapy - Cloudflare Challenge page
AntiCloudflareTaskcloudflare_challenge - Cutcaptcha
CutCaptchaTaskProxylesscutcaptcha - CyberSiARA
AntiCyberSiAraTaskProxylesscybersiara - atbCAPTCHA
AtbCaptchaTaskProxylessatb_captcha - Tencent Captcha
TencentTaskProxylesstencent - Prosopo Procaptcha
ProsopoTaskProxylessprosopo - CaptchaFox
CaptchaFoxTaskProxylesscaptchafox - Altcha
AltchaTaskProxylessaltcha - NetEase Yidun
YidunTaskProxylessyidun - Yandex SmartCaptcha
YandexSmartCaptchaTaskProxylessyandex - VK Captcha
VKCaptchaTaskProxylessvkcaptcha - Binance Captcha
BinanceTaskProxylessbinance - Custom task (Imperva, Temu at iba pa)
CustomTaskincapsula, temuimage, hunt, tspd, basilisk
Mga image at audio task
- Image to text
ImageToTextTaskpost, base64 - Tanong na text
TextCaptchaTasktextcaptcha - Image grid
GridTaskpost, recaptcha=1 - Click coordinates
CoordinatesTaskpost, coordinatescaptcha=1 - Rotate
RotateTaskrotatecaptcha - Audio
AudioTaskaudio - Bounding box
BoundingBoxTaskbounding_box - Gumuhit sa paligid
DrawAroundTaskpost, canvas=1 - Drag and drop
DragAndDropTask- - Complex image task
ComplexImageTask-