NetEase Yidun
Return validation data with the challenge context intact. Read the NetEase Yidun public key, then preserve challenge and request identity from the current flow. Enterprise hcg/hct values travel together when supplied.
{
"clientKey": "capzy_YOUR_API_KEY",
"task": {
"type": "YidunTaskProxyLess",
"websiteURL": "https://dun.163.com/trial/jigsaw",
"websiteKey": "5a0e2d04ffa44caba3f740e6a8b0fa84",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
}
}Illustrative values. Replace the inputs with values from your current integration.
Read the Yidun initialization.
Read the NetEase Yidun public key, then preserve challenge and request identity from the current flow. Enterprise hcg/hct values travel together when supplied.
Your API key authenticates Capzy.
Provider keys, challenge IDs, images, and session values belong inside task.
Pair the public key with the page and User-Agent.
- In Sources, locate the Yidun widget initialization and copy its public key into websiteKey.
- Copy the full parent page URL into websiteURL. In Network, read the widget request's User-Agent into userAgent; this field is required.
- If the integration customizes its loader or API host, preserve yidunGetLib and yidunApiServerSubdomain from the matching requests.
{
"websiteURL": "https://example.com/login",
"websiteKey": "YOUR_YIDUN_PUBLIC_KEY",
"userAgent": "YOUR_CURRENT_USER_AGENT"
}A custom loader field holds the complete script URL. The API subdomain field holds the configured host.
How NetEase Yidun works
NetEase Yidun (网易易盾) is China's #2 captcha service after Tencent. It offers slider puzzles, click-in-order challenges, and icon selection. A single task type, YidunTask, auto-detects the challenge on the page so you never have to know which variant a site uses. Most commercial captcha-solving services don't support Yidun at all.
Capzy's proprietary solver auto-detects the Yidun challenge type and returns the validate token for direct submission. Designed for authorized testing and automation.
- Exclusive — no competitors support Yidun
- Solves the slider challenge reliably
- High-quality solves
- Captures validate token from network/DOM
- Capzy proprietary infrastructure — high-quality solves
- Huge Chinese market opportunity
Know what goes in.
Choose a field to see its purpose, where to get it, and its place in the request. Optional values omitted from the example can be added when your flow uses them.
The request below follows your selected task configuration.
Request authentication
Required task inputs
Optional context
websiteURL
stringRequiredThe page URL where Yidun captcha loads
Copy the full page URL from the address bar or the document request in Network, including the path where this flow runs.
Open the input guidehttps://dun.163.com/trial/jigsaw{
"clientKey": "capzy_YOUR_API_KEY",
"task": {
"type": "YidunTaskProxyLess",
"websiteURL": "https://dun.163.com/trial/jigsaw",
"websiteKey": "5a0e2d04ffa44caba3f740e6a8b0fa84",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
}
}The selected field is highlighted when present. Preserve the declared value type and current challenge context.
Make your first request.
Create the task, keep its taskId, and poll until status is ready. Then read the selected variant's solution.
- Create the task
Send
clientKeyand the selectedtaskto/createTaskfrom your server. Keep the returnedtaskId. - Wait for the solution
Send that same key and ID to
/getTaskResult. While processing, wait two seconds before checking again. Stop on Ready or an error. - Apply the result
Forward solution.validate and the accompanying solution.token through the site's verification transport, preserving solution.userAgent and the current challenge/session context.
import json, os, time
import requests
API = "https://api.capzy.ai"
KEY = os.environ["CAPZY_API_KEY"]
task = json.loads("{\"type\":\"YidunTaskProxyLess\",\"websiteURL\":\"https://dun.163.com/trial/jigsaw\",\"websiteKey\":\"5a0e2d04ffa44caba3f740e6a8b0fa84\",\"userAgent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\"}")
def call(path, payload):
response = requests.post(f"{API}/{path}", json={"clientKey": KEY, **payload}, timeout=30)
response.raise_for_status()
data = response.json()
if data.get("errorId", 0) or data.get("status") == "failed":
raise RuntimeError(data.get("errorDescription") or data.get("errorCode") or "Task failed")
return data
created = call("createTask", {"task": task})
for attempt in range(60):
result = call("getTaskResult", {"taskId": created["taskId"]})
if result.get("status") == "ready":
solution = result["solution"]
print(solution)
break
time.sleep(2)
else:
raise TimeoutError("Task is still processing; keep the taskId to check it later.")
Before runningReplace all illustrative inputs with your captured values. Set CAPZY_API_KEY in your environment. Install requests with pip install requests.
Polling and failuresThe example checks HTTP/API failures, uses 30-second request timeouts, and stops after 60 result checks. Retain taskId if your task is still processing.
Understand what comes back.
Follow this task from creation to completion. Response fields and usage follow your selected request variant.
validate + token + user-agent
Forward solution.validate and the accompanying solution.token through the site's verification transport, preserving solution.userAgent and the current challenge/session context.
- string
- The Yidun validation token. Submit to the target site's backend for server-side verification (industry-standard field name).
- string
- Same value as `token`. Legacy alias kept for clients integrated against our older response shape.
- string
- The exact User-Agent the solver used. Replay this on submission or Yidun rejects on UA mismatch.
{
"errorId": 0,
"status": "ready",
"solution": {
"token": "<long Yidun validate token, single-use>",
"validate": "<same value as token>",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
}
}Illustrative values. Additional metadata may be returned; only Ready contains a completed solution.
Use the result
Forward solution.validate and the accompanying solution.token through the site's verification transport, preserving solution.userAgent and the current challenge/session context.
Execution context result is the parsed Ready response from the polling example. session, when referenced, is your existing requests.Session (or browser-compatible session) with the original cookie jar, headers, and solving proxy configured in session.proxies for both http and https. Keep this client for the complete flow. task is the task object you submitted. For Shape, action_body is the original protected request body as bytes or a string, with its original Content-Type in session.headers. Install curl_cffi when the fragment imports it; match the target's required browser/TLS identity.
# Step 3: Yidun — submit validate token to your backend
validate = result["solution"]["validate"]
requests.post("https://target.example.com/verify", data={"validate": validate})When something doesn't work.
Check your captured values, the selected variant, and the response before starting another task.
Why don't other services support Yidun?
Yidun is primarily used in the Chinese market. Most Western captcha services focus on reCAPTCHA/hCaptcha/Turnstile. This makes it an exclusive competitive advantage for us.
Does this handle click-in-order challenges?
Currently we support the slider type (most common). Click-in-order and icon selection support is coming in a future update.
Connect NetEase Yidun to your workflow.
Get your Capzy API key and use this guide's integration.
YidunTaskProxyLess · Live configuration