Skip to content

GeeTest v4

GeeTest v4, also known as CAPTCHA4, is the latest generation of the GeeTest CAPTCHA system. It features adaptive challenge types including slide, click, and icon-based puzzles, with improved security over v3. GeeTest v4 uses a captchaId instead of the gt/challenge pair used by v3, and returns a richer set of solution fields for server-side verification.

TypeProxyDescription
GeeTestV4TokenProxyLessNoStandard (recommended)
GeeTestV4TokenYesWith proxy
ParameterTypeRequiredDescription
typestringYesTask type from the table above
websiteURLstringYesURL of the page with the captcha
captchaIdstringYesGeeTest v4 captcha ID
initParametersobjectNoInitialization parameters from the page

Required when using the GeeTestV4Token proxy task type.

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GeeTestV4TokenProxyLess",
"websiteURL": "https://example.com/login",
"captchaId": "e392e1d7fd421dc63325744d5a2b9c73"
}
}
{
"errorId": 0,
"taskId": "abc-123-def"
}
{
"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73",
"lot_number": "7005867dc6a20f02bc79c78284a1e8ab",
"pass_token": "fdc26eb58cf4a4f6abe3ddbddcc32a560a30b...",
"gen_time": "1709123456",
"captcha_output": "dWsBX4E7JiIvJBkABn..."
}
FieldTypeDescription
captcha_idstringCaptcha identifier (matches the input captchaId)
lot_numberstringLot number for validation
pass_tokenstringPass token
gen_timestringGeneration timestamp
captcha_outputstringCaptcha output data

Submit all five solution fields to the target site’s verification endpoint. The exact integration depends on how the site implements GeeTest v4:

  1. Form submission — Set hidden input fields for each solution field and submit the form.
  2. API request — Include all five values in the request body sent to the site’s server-side validation endpoint. The site will forward these to GeeTest’s validate API for verification.
  3. JavaScript callback — Pass the solution object to the GeeTest v4 success callback function registered during widget initialization.
import requests
import time
API_KEY = "YOUR_API_KEY"
# Create task
response = requests.post("https://api.ucaptcha.net/createTask", json={
"clientKey": API_KEY,
"task": {
"type": "GeeTestV4TokenProxyLess",
"websiteURL": "https://example.com/login",
"captchaId": "e392e1d7fd421dc63325744d5a2b9c73"
}
})
task_id = response.json()["taskId"]
# Poll for result
while True:
result = requests.post("https://api.ucaptcha.net/getTaskResult", json={
"clientKey": API_KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
solution = result["solution"]
print("captcha_id:", solution["captcha_id"])
print("lot_number:", solution["lot_number"])
print("pass_token:", solution["pass_token"])
print("gen_time:", solution["gen_time"])
print("captcha_output:", solution["captcha_output"])
break
elif result["status"] == "failed":
print("Error:", result.get("errorDescription"))
break
time.sleep(5)
const API_KEY = "YOUR_API_KEY";
const { taskId } = await fetch("https://api.ucaptcha.net/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: "GeeTestV4TokenProxyLess",
websiteURL: "https://example.com/login",
captchaId: "e392e1d7fd421dc63325744d5a2b9c73"
}
})
}).then(r => r.json());
while (true) {
const result = await fetch("https://api.ucaptcha.net/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: API_KEY, taskId })
}).then(r => r.json());
if (result.status === "ready") {
const { captcha_id, lot_number, pass_token, gen_time, captcha_output } = result.solution;
console.log("captcha_id:", captcha_id);
console.log("lot_number:", lot_number);
console.log("pass_token:", pass_token);
console.log("gen_time:", gen_time);
console.log("captcha_output:", captcha_output);
break;
} else if (result.status === "failed") {
console.error("Error:", result.errorDescription);
break;
}
await new Promise(r => setTimeout(r, 5000));
}
Terminal window
# Create task
curl -X POST https://api.ucaptcha.net/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GeeTestV4TokenProxyLess",
"websiteURL": "https://example.com/login",
"captchaId": "e392e1d7fd421dc63325744d5a2b9c73"
}
}'
# Poll for result (replace TASK_ID with the taskId from above)
curl -X POST https://api.ucaptcha.net/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID"
}'
  • 2Captcha
  • CapSolver
  • Anti-Captcha
  • CapMonster

There are no legacy aliases for GeeTest v4 task types. Use GeeTestV4TokenProxyLess or GeeTestV4Token directly.