Alibaba CAPTCHA
Return the verification data for your current puzzle. Use the Alibaba page that presents the puzzle. You may supply its CAPTCHA ID when you already captured it; otherwise the solver reads it from the page.
{
"clientKey": "capzy_YOUR_API_KEY",
"task": {
"type": "AntiAlibabaCaptchaTaskProxyLess",
"websiteURL": "https://login.alibaba.com/"
}
}Illustrative values. Replace the inputs with values from your current integration.
Identify the Alibaba challenge configuration.
Use the Alibaba page that presents the puzzle. You may supply its CAPTCHA ID when you already captured it; otherwise the solver reads it from the page.
Your API key authenticates Capzy.
Provider keys, challenge IDs, images, and session values belong inside task.
Capture the active puzzle configuration when available.
- Copy the full login/form URL into websiteURL.
- In Sources or the puzzle initialization Network response, locate the current captchaId when you are providing that override.
- Copy it into captchaId unchanged, or omit it to let the solver inspect the page. Keep the original application session.
{
"websiteURL": "https://login.alibaba.com/",
"captchaId": "YOUR_CAPTURED_CAPTCHA_ID"
}captchaId is optional for this page-based task; websiteURL remains required.
How Alibaba CAPTCHA works
Alibaba Cloud's captcha (used across Alibaba, AliExpress, and Alibaba Cloud consoles) is an image-restoration / slide-puzzle challenge built on the GeeTest v4 engine. The visitor slides a piece to restore an image and the widget emits a signed tuple the backend validates.
We solve the underlying GeeTest v4 puzzle natively and return the captcha_output / lot_number / pass_token / gen_time tuple Alibaba's verification endpoint expects. Not IP-bound, so no proxy is required; the proxy variant exists for callers who want a specific egress.
- Solves Alibaba's image-restoration slide puzzle natively
- Returns the exact GeeTest v4 tuple the verify endpoint expects
- ProxyLess by default — token isn't IP-bound
- Fast native solve
Know what goes in.
Choose a field to see its purpose, where to get it, and its place in the request. Optional values omitted from the example can be added when your flow uses them.
The request below follows your selected task configuration.
Request authentication
Required task inputs
Optional context
websiteURL
stringRequiredThe Alibaba page URL the captcha appears on
Copy the full page URL from the address bar or the document request in Network, including the path where this flow runs.
Open the input guidehttps://login.alibaba.com/{
"clientKey": "capzy_YOUR_API_KEY",
"task": {
"type": "AntiAlibabaCaptchaTaskProxyLess",
"websiteURL": "https://login.alibaba.com/"
}
}The selected field is highlighted when present. Preserve the declared value type and current challenge context.
Make your first request.
Create the task, keep its taskId, and poll until status is ready. Then read the selected variant's solution.
- Create the task
Send
clientKeyand the selectedtaskto/createTaskfrom your server. Keep the returnedtaskId. - Wait for the solution
Send that same key and ID to
/getTaskResult. While processing, wait two seconds before checking again. Stop on Ready or an error. - Apply the result
Submit captcha_output, lot_number, pass_token, gen_time, and captcha_id together from solution, with the original form/session context.
import json, os, time
import requests
API = "https://api.capzy.ai"
KEY = os.environ["CAPZY_API_KEY"]
task = json.loads("{\"type\":\"AntiAlibabaCaptchaTaskProxyLess\",\"websiteURL\":\"https://login.alibaba.com/\"}")
def call(path, payload):
response = requests.post(f"{API}/{path}", json={"clientKey": KEY, **payload}, timeout=30)
response.raise_for_status()
data = response.json()
if data.get("errorId", 0) or data.get("status") == "failed":
raise RuntimeError(data.get("errorDescription") or data.get("errorCode") or "Task failed")
return data
created = call("createTask", {"task": task})
for attempt in range(60):
result = call("getTaskResult", {"taskId": created["taskId"]})
if result.get("status") == "ready":
solution = result["solution"]
print(solution)
break
time.sleep(2)
else:
raise TimeoutError("Task is still processing; keep the taskId to check it later.")
Before runningReplace all illustrative inputs with your captured values. Set CAPZY_API_KEY in your environment. Install requests with pip install requests.
Polling and failuresThe example checks HTTP/API failures, uses 30-second request timeouts, and stops after 60 result checks. Retain taskId if your task is still processing.
Understand what comes back.
Follow this task from creation to completion. Response fields and usage follow your selected request variant.
Puzzle verification fields
Submit captcha_output, lot_number, pass_token, gen_time, and captcha_id together from solution, with the original form/session context.
- string
- GeeTest v4 challenge signature — submit to Alibaba's verify endpoint
- string
- GeeTest lot/session identifier
- string
- GeeTest pass token
- string
- Generation timestamp
- string
- The captchaId echoed back
{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_output": "<base64 GeeTest v4 output>",
"lot_number": "a1b2c3d4e5f6...",
"pass_token": "<pass token>",
"gen_time": "1735689600",
"captcha_id": "<captcha id>"
}
}Illustrative values. Additional metadata may be returned; only Ready contains a completed solution.
Submit all five verification fields
Keep all five fields from the same result and forward them to the original challenge verification endpoint, alongside its other application fields.
Execution context result is the parsed Ready response from the polling example. session, when referenced, is your existing requests.Session (or browser-compatible session) with the original cookie jar, headers, and solving proxy configured in session.proxies for both http and https. Keep this client for the complete flow. task is the task object you submitted. For Shape, action_body is the original protected request body as bytes or a string, with its original Content-Type in session.headers. Install curl_cffi when the fragment imports it; match the target's required browser/TLS identity.
sol = result["solution"]
payload = {name: sol[name] for name in (
"captcha_output", "lot_number", "pass_token", "gen_time", "captcha_id")}
response = session.post("https://target.example.com/verify", data=payload, timeout=30)
response.raise_for_status()When something doesn't work.
Check your captured values, the selected variant, and the response before starting another task.
How do I use the solution?
Submit the captcha_output / lot_number / pass_token / gen_time fields to Alibaba's captcha verification request in place of the widget output.
Why is it GeeTest-based?
Alibaba licenses the GeeTest v4 engine for its slide/restoration captcha, so the solution format matches our GeeTest v4 output — documented separately here for the Alibaba integration.
Connect Alibaba CAPTCHA to your workflow.
Get your Capzy API key and use this guide's integration.
AntiAlibabaCaptchaTaskProxyLess · Live configuration
Current stats are unavailable. Check the solver catalog.