Skip to content
../products
GeeTest v3/v4GeeTestTaskProxyLess

GeeTest v3/v4 Solver, solved in 2.0s.

Solve GeeTest slider, click, and icon challenges. Supports both v3 (gt + challenge) and v4 (captchaId) formats.

$1.20per 1,000
~2.0savg solve
99%+success
30/mthroughput
captchaId: 647f5ed2ed8acb4be36784e01556…0.00s
POST/createTask type=GeeTestTaskProxyLess
taskId tsk_nqx7kzy9
POLL/getTaskResult status=processing
status ready
token 0x60be8b0d897b9...
type: GeeTestTaskProxyLess● running on production solvers

What is GeeTest v3/v4?

GeeTest is a popular captcha used by many Chinese and international sites. It offers multiple challenge types: slider puzzles (drag to complete the image), click-in-order (click words/icons in sequence), and icon selection. GeeTest v3 uses a 'gt' key + server-generated 'challenge' value. GeeTest v4 uses a simpler 'captchaId' format.

How it works

1

Send Task

POST your GeeTestTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.

2

We Solve

Capzy's proprietary solver handles slider and click variants and returns the validation token plus session cookies needed to submit the form.

3

Get Token

Poll getTaskResult — when status is 'ready', the solution contains the token to inject into the target page.

Quick integration

solve.py
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": "GeeTestTaskProxyLess",
        "captchaId": "647f5ed2ed8acb4be36784e01556bb71",
        "websiteURL": "https://example.com"
    }
}).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)

# Step 3: Yidun — submit validate token to your backend
validate = result["solution"]["validate"]
requests.post("https://target.example.com/verify", data={"validate": validate})

Using your own proxy

Use GeeTestTask instead of GeeTestTaskProxyLess 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.

solve_proxy.py
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": "GeeTestTask",
        "captchaId": "647f5ed2ed8acb4be36784e01556bb71",
        "proxyPort": "8080",
        "proxyType": "http",
        "proxyLogin": "user",
        "websiteURL": "https://example.com",
        "proxyAddress": "123.45.67.89",
        "proxyPassword": "pass"
    }
}).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)

# Step 3: Yidun — submit validate token to your backend
validate = result["solution"]["validate"]
requests.post("https://target.example.com/verify", data={"validate": validate})

additional proxy parameters

proxyTypetypestringreqyesProxy protocol: http or https
proxyAddresstypestringreqyesProxy IP address or hostname
proxyPorttypenumberreqyesProxy port number
proxyLogintypestringreqnoProxy username (if auth required)
proxyPasswordtypestringreqnoProxy password (if auth required)
userAgenttypestringreqnoUser-Agent string to use. Must match the UA you use when submitting the token

Task parameters

typetypestringreqyesGeeTestTaskProxyLess or GeeTestTask
websiteURLtypestringreqyesThe page URL
captchaIdtypestringreqnoGeeTest v4 captcha ID (use this OR gt+challenge)
gttypestringreqnoGeeTest v3 'gt' parameter
challengetypestringreqnoGeeTest v3 'challenge' parameter (server-generated, single-use)

Solution response

tokentypestringThe combined token to submit (varies by GeeTest version).
challengetypestring[v3 only] The challenge identifier returned by GeeTest's API.
validatetypestring[v3 only] The validation token — drop into the `geetest_validate` form field.
seccodetypestring[v3 only] The seccode response value — drop into the `geetest_seccode` form field. Format `{validate}|jordan`.
captcha_idtypestring[v4 only] GeeTest v4 captcha ID for this session.
lot_numbertypestring[v4 only] GeeTest v4 lot number — uniquely identifies the challenge attempt.
pass_tokentypestring[v4 only] GeeTest v4 pass token — the actual cleared signal.
gen_timetypestring[v4 only] Unix timestamp string when the pass token was generated.
captcha_outputtypestring[v4 only] Encoded output blob — submit as `captcha_output` to the protected endpoint.

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": {
    "token": "9b6c8...",
    "gen_time": "1715299200",
    "captcha_id": "fcd636b4514741bcb0c1f7c4b2c4...",
    "lot_number": "abc1234567890abcdef1234567890",
    "pass_token": "pass_token_value_here",
    "captcha_output": "encoded_output_blob_to_submit"
  }
}

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

Supports GeeTest v3 and v4
Solves slider, click-in-order and icon challenges
~8 second average solve time
Auto-detects v3 vs v4 from parameters
Returns the validation token + session cookies

task types

proxyless: GeeTestTaskProxyLess

with proxy: GeeTestTask

Frequently asked questions

start solving geetest v3/v4.

$0.10 in free credits — no card. ~250 free solves to test before you spend.