Skip to content

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.

POST /createTask · example
{
  "clientKey": "capzy_YOUR_API_KEY",
  "task": {
    "type": "AntiAlibabaCaptchaTaskProxyLess",
    "websiteURL": "https://login.alibaba.com/"
  }
}

Illustrative values. Replace the inputs with values from your current integration.

Page URL + captchaIdProxyless or your own proxyPuzzle verification fields

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.

  1. Copy the full login/form URL into websiteURL.
  2. In Sources or the puzzle initialization Network response, locate the current captchaId when you are providing that override.
  3. Copy it into captchaId unchanged, or omit it to let the solver inspect the page. Keep the original application session.
Input collection example - replace illustrative values
{
  "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

stringRequired

The Alibaba page URL the captcha appears on

Where it comes from

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 guide
Example valuehttps://login.alibaba.com/
POST /createTask · selected configuration
{
  "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.

More examples
  1. Create the task

    Send clientKey and the selected task to /createTask from your server. Keep the returned taskId.

  2. 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.

  3. Apply the result

    Submit captcha_output, lot_number, pass_token, gen_time, and captcha_id together from solution, with the original form/session context.

solve_alibaba.py
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
POST /getTaskResult · example response
{
  "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.

Use the result · Python
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.

UnavailablePer 1,000 solves
UnavailableAverage solve time

AntiAlibabaCaptchaTaskProxyLess · Live configuration
Current stats are unavailable. Check the solver catalog.