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
Send Task
POST your GeeTestTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Capzy's proprietary solver handles slider and click variants and returns the validation token plus session cookies needed to submit the form.
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": "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)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.
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)additional proxy parameters
proxyTypetypestringreqyesProxy protocol: http, https, socks4, or socks5proxyAddresstypestringreqyesProxy IP address or hostnameproxyPorttypenumberreqyesProxy port numberproxyLogintypestringreqnoProxy username (if auth required)proxyPasswordtypestringreqnoProxy password (if auth required)userAgenttypestringreqnoUser-Agent string to use. Must match the UA you use when submitting the tokentask parameters.
typetypestringreqyesGeeTestTaskProxyLess or GeeTestTaskwebsiteURLtypestringreqyesThe page URLcaptchaIdtypestringreqnoGeeTest v4 captcha ID (use this OR gt+challenge)gttypestringreqnoGeeTest v3 'gt' parameterchallengetypestringreqnoGeeTest v3 'challenge' parameter (server-generated, single-use)solution response.
captcha_idtypestringGeeTest v4: the captcha ID echoed backlot_numbertypestringGeeTest v4: lot numberpass_tokentypestringGeeTest v4: pass token for server validationgen_timetypestringGeeTest v4: generation timestampcaptcha_outputtypestringGeeTest v4: captcha output stringFeatures
ProxyLess Task Type
GeeTestTaskProxyLessWith Proxy
GeeTestTaskFrequently Asked Questions
start solving geetest v3/v4.
$0.10 in free credits — no card. ~250 free solves to test before you spend.