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.
Supported Types
Section titled “Supported Types”| Type | Proxy | Description |
|---|---|---|
GeeTestV4TokenProxyLess | No | Standard (recommended) |
GeeTestV4Token | Yes | With proxy |
Parameters
Section titled “Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Task type from the table above |
websiteURL | string | Yes | URL of the page with the captcha |
captchaId | string | Yes | GeeTest v4 captcha ID |
initParameters | object | No | Initialization parameters from the page |
Proxy Parameters
Section titled “Proxy Parameters”Required when using the GeeTestV4Token proxy task type.
| Parameter | Type | Required | Description |
|---|---|---|---|
proxyType | string | Yes | http, socks4, or socks5 |
proxyAddress | string | Yes | Proxy IP or hostname |
proxyPort | integer | Yes | Proxy port |
proxyLogin | string | No | Proxy username |
proxyPassword | string | No | Proxy password |
Create Task
Section titled “Create Task”Request
Section titled “Request”{ "clientKey": "YOUR_API_KEY", "task": { "type": "GeeTestV4TokenProxyLess", "websiteURL": "https://example.com/login", "captchaId": "e392e1d7fd421dc63325744d5a2b9c73" }}Response
Section titled “Response”{ "errorId": 0, "taskId": "abc-123-def"}Solution Object
Section titled “Solution Object”{ "captcha_id": "e392e1d7fd421dc63325744d5a2b9c73", "lot_number": "7005867dc6a20f02bc79c78284a1e8ab", "pass_token": "fdc26eb58cf4a4f6abe3ddbddcc32a560a30b...", "gen_time": "1709123456", "captcha_output": "dWsBX4E7JiIvJBkABn..."}| Field | Type | Description |
|---|---|---|
captcha_id | string | Captcha identifier (matches the input captchaId) |
lot_number | string | Lot number for validation |
pass_token | string | Pass token |
gen_time | string | Generation timestamp |
captcha_output | string | Captcha output data |
How to Use
Section titled “How to Use”Submit all five solution fields to the target site’s verification endpoint. The exact integration depends on how the site implements GeeTest v4:
- Form submission — Set hidden input fields for each solution field and submit the form.
- 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
validateAPI for verification. - JavaScript callback — Pass the solution object to the GeeTest v4 success callback function registered during widget initialization.
Code Examples
Section titled “Code Examples”Python
Section titled “Python”import requestsimport time
API_KEY = "YOUR_API_KEY"
# Create taskresponse = 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 resultwhile 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)JavaScript
Section titled “JavaScript”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));}# Create taskcurl -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" }'Provider Coverage
Section titled “Provider Coverage”- 2Captcha
- CapSolver
- Anti-Captcha
- CapMonster
Aliases
Section titled “Aliases”There are no legacy aliases for GeeTest v4 task types. Use GeeTestV4TokenProxyLess or GeeTestV4Token directly.