Skip to content

Temu

Temu uses a custom verification challenge on its e-commerce platform to protect against automated access, scraping, and bot activity. These challenges may appear during account actions such as login, checkout, or high-frequency browsing. The uCaptcha API solves Temu verification challenges and returns a token, with or without a proxy.

TypeProxyDescription
TemuTokenProxyLessNoSolve without proxy (recommended)
TemuTokenYesSolve using your proxy
ParameterTypeRequiredDescription
typestringYesTask type from the table above
websiteURLstringYesURL of the page with the Temu challenge
websiteKeystringYesTemu verification site key

Required when using the TemuToken task type.

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "TemuTokenProxyLess",
"websiteURL": "https://www.temu.com/login",
"websiteKey": "temu_site_key_abc123"
}
}
{
"errorId": 0,
"taskId": "abc-123-def"
}
{
"token": "temu_verify_1a2b3c4d5e6f7g8h...token_value"
}
FieldTypeDescription
tokenstringThe Temu verification token to submit with the request

Once you receive the token value from the solution:

  1. API request — Include the token in your request to the Temu endpoint that triggered the challenge.
  2. Cookie / header injection — Some Temu challenges require the token to be set as a cookie or request header. Check the specific challenge context.
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": "TemuTokenProxyLess",
"websiteURL": "https://www.temu.com/login",
"websiteKey": "temu_site_key_abc123"
}
})
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: "TemuTokenProxyLess",
websiteURL: "https://www.temu.com/login",
websiteKey: "temu_site_key_abc123"
}
})
}).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": "TemuTokenProxyLess",
"websiteURL": "https://www.temu.com/login",
"websiteKey": "temu_site_key_abc123"
}
}'
# 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:

  • TemuTask
  • TemuTaskProxyless
  • CustomTask:Temu