Before you submit — these must be correct
If any of these are wrong, your token may be accepted by our solver but rejected or scored poorly by the target site. We can’t detect these mismatches for you.
- Submit the returned validate/seccode promptly — GeeTest tokens are short-lived.
What is Alibaba CAPTCHA?
Alibaba properties gate signup and login with a GeeTest v4-family challenge (captchaId-based). Passing the widget's captchaId, we solve the challenge and return the validation token your form submits.
How it works
Send Task
POST your AntiAlibabaCaptchaTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Send the widget's captchaId and the page URL. We drive the GeeTest v4 flow, solve the challenge, and return the validate token (with the lot_number / gen_time set your form needs). No proxy required for the solve.
Get Token
Poll getTaskResult — when status is 'ready', the solution contains the token to inject into the target page.
Quick integration
import requests, time
API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"
# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "AntiAlibabaCaptchaTaskProxyLess",
"type": "AntiAlibabaCaptchaTask",
"captchaId": "<geetest captchaId>",
"websiteURL": "https://www.example.com/register"
}
}).json()
task_id = task["taskId"]
print(f"Task created: {task_id}")
# Step 2: Poll for result
while True:
result = requests.post(f"{API}/getTaskResult", json={
"clientKey": KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
print("Solved!", result["solution"])
break
elif result["status"] == "failed":
print("Failed:", result.get("errorDescription"))
break
time.sleep(1)
Using the result
# Step 3 — GeeTest v4-family: submit these to your site's verify endpoint
sol = result["solution"]
requests.post("https://target.example.com/verify", data={
"lot_number": sol["lot_number"],
"pass_token": sol["pass_token"],
"gen_time": sol["gen_time"],
"captcha_output": sol["captcha_output"],
})Using your own proxy
Use AntiAlibabaCaptchaTask instead of AntiAlibabaCaptchaTaskProxyLess to route the solve through your own proxy. This is useful when the target site checks the IP that solved the captcha matches the IP submitting the form.
import requests, time
API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"
# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "AntiAlibabaCaptchaTask",
}
}).json()
task_id = task["taskId"]
print(f"Task created: {task_id}")
# Step 2: Poll for result
while True:
result = requests.post(f"{API}/getTaskResult", json={
"clientKey": KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
print("Solved!", result["solution"])
break
elif result["status"] == "failed":
print("Failed:", result.get("errorDescription"))
break
time.sleep(1)
additional proxy parameters
proxyTypetypestringreqnohttp, https, or socks5.proxyAddresstypestringreqyesProxy host (IP or hostname). Required — the solve is IP-bound.proxyPorttypeintegerreqyesProxy port.proxyLogintypestringreqnoProxy username, if your proxy needs auth.proxyPasswordtypestringreqnoProxy password, if your proxy needs auth.Task parameters
typetypestringreqyesAntiAlibabaCaptchaTask or AntiAlibabaCaptchaTaskProxyLess.captchaIdtypestringreqyesThe GeeTest captchaId from the Alibaba widget.websiteURLtypestringreqyesThe page hosting the captcha.Solution response
tokentypestringThe GeeTest validation payload to submit with your form.validatetypestringThe GeeTest `validate` value.seccodetypeobjectThe full encrypted validation object (captcha_output / lot_number / pass_token / gen_time).Example response
Full getTaskResult response shape. The fields in the table above describe what's inside solution — the outer envelope (errorId, status) is identical for every captcha type.
{
"errorId": 0,
"status": "ready",
"solution": {
"seccode": {
"gen_time": "…",
"lot_number": "…",
"pass_token": "…",
"captcha_output": "…"
},
"validate": "<validate token>"
}
}Error response
Failures use the same envelope with errorId: 1 plus errorCode + errorDescription. See the error-code reference for the full list.
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Solver gave up — automatically refunded."
}Pending response
While the solver is still working, getTaskResult returns status: "processing". Poll every 1–2 seconds until ready or failed.
{
"errorId": 0,
"status": "processing"
}Features
task types
proxyless: AntiAlibabaCaptchaTaskProxyLess
with proxy: AntiAlibabaCaptchaTask