Skip to content

Yidun (NetEase)

Yidun (also known as NECaptcha) is a CAPTCHA service developed by NetEase, widely deployed across Chinese websites and applications. It presents various challenge types including slider puzzles, click-based verification, and intelligent risk assessment. The uCaptcha API solves Yidun challenges and returns a verification token, with or without a proxy.

TypeProxyDescription
YidunTokenProxyLessNoSolve without proxy (recommended)
YidunTokenYesSolve using your proxy
ParameterTypeRequiredDescription
typestringYesTask type from the table above
websiteURLstringYesURL of the page with the Yidun challenge
websiteKeystringYesYidun captcha ID (the captchaId parameter)

Required when using the YidunToken task type.

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "YidunTokenProxyLess",
"websiteURL": "https://example.cn/login",
"websiteKey": "c1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6"
}
}
{
"errorId": 0,
"taskId": "abc-123-def"
}
{
"token": "NECaptcha_validate_a1b2c3d4e5f6...verification"
}
FieldTypeDescription
tokenstringThe Yidun / NECaptcha verification token to submit with the form

Once you receive the token value from the solution:

  1. Form submission — Set the NECaptcha validate token in the hidden verification field and submit the form.
  2. API request — Include the token in the NECaptchaValidate parameter when calling the target server’s login or verification endpoint.
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": "YidunTokenProxyLess",
"websiteURL": "https://example.cn/login",
"websiteKey": "c1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6"
}
})
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":
token = result["solution"]["token"]
print("Token:", token)
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: "YidunTokenProxyLess",
websiteURL: "https://example.cn/login",
websiteKey: "c1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6"
}
})
}).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") {
console.log("Token:", result.solution.token);
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": "YidunTokenProxyLess",
"websiteURL": "https://example.cn/login",
"websiteKey": "c1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6"
}
}'
# 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"
}'
  • CapMonster

The following legacy type names are also accepted for backward compatibility:

  • YidunTask
  • YidunTaskProxyless
  • NECaptchaToken
  • NECaptchaTokenProxyLess