What is Tencent Captcha?
Tencent Captcha (T-Captcha / TenDI) is a risk-based captcha from Tencent Cloud. It shows a checkbox ('I am human') that either auto-passes or escalates to image selection or slider challenges.
How it works
Send Task
POST your TencentTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Capzy's proprietary solver returns the Tencent ticket + randstr tokens needed to validate the form. Designed for authorized testing and automation.
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": "TencentTaskProxyLess",
"websiteKey": "189910271",
"websiteURL": "https://www.tencentcloud.com/products/captcha"
}
}).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)
# Step 3: Tencent T-Captcha — submit ticket + randstr to your form
sol = result["solution"]
resp = requests.post("https://target.example.com/verify", data={
"ticket": sol["ticket"],
"randstr": sol["randstr"],
})Using your own proxy
Use TencentTask instead of TencentTaskProxyLess 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": "TencentTask",
"proxyPort": "8080",
"proxyType": "http",
"proxyLogin": "user",
"websiteKey": "189910271",
"websiteURL": "https://www.tencentcloud.com/products/captcha",
"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)
# Step 3: Tencent T-Captcha — submit ticket + randstr to your form
sol = result["solution"]
resp = requests.post("https://target.example.com/verify", data={
"ticket": sol["ticket"],
"randstr": sol["randstr"],
})additional proxy parameters
proxyTypetypestringreqyesProxy protocol: http or httpsproxyAddresstypestringreqyesProxy 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
typetypestringreqyesTencentTaskProxyLess or TencentTaskwebsiteURLtypestringreqyesThe page URL where the Tencent captcha widget is loadedwebsiteKeytypestringreqyesThe CaptchaAppId (numeric string, e.g. 189910271)Solution response
tickettypestringThe verification ticketrandstrtypestringRandom string for server validationappidtypestringThe appId echoed backExample response
Full getTaskResult response shape. The fields in the table above describe what's inside solution — the outer envelope (errorId, status) is identical for every captcha type.
{
"errorId": 0,
"status": "ready",
"solution": {
"appid": "189910271",
"ticket": "tdc_RTAAyXfmW9Vy<long ticket string>",
"randstr": "@xC1"
}
}Error response
Failures use the same envelope with errorId: 1 plus errorCode + errorDescription. See the error-code reference for the full list.
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Solver gave up — automatically refunded."
}Pending response
While the solver is still working, getTaskResult returns status: "processing". Poll every 1–2 seconds until ready or failed.
{
"errorId": 0,
"status": "processing"
}Features
task types
proxyless: TencentTaskProxyLess
with proxy: TencentTask