Temu Captcha Solver, solved in 5.0s.
Solve Temu's in-page captcha — swap-tiles, slide-gap, and click-the-object variants. Send the challenge image(s); get back coordinates or a drag distance.
Temu's captcha has three shapes: a swap puzzle (rearrange tiles into the correct image), a slide puzzle (drag a piece to fill a gap), and a semantic click ('click the smaller green cylinders'). It's a custom in-page challenge, not GeeTest.
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": "TemuCaptchaTaskProxyLess",
"challengeType": "slide",
"image": "<base64 background>",
"pieceImage": "<base64 piece>"
}
}).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)
Using the result
Temu hands back the move to make, not a token: coordinates for the swap variant, slideProportion for the slide, or clickTargets for the click. Your automation performs the drag/click in the real session, which is why detection sees your own browser.
# Step 3 — Temu returns the ANSWER to apply in your own session (not a token):
sol = result["solution"]
# swap -> coordinates: drag tile at coordinates[0] onto coordinates[1]
# slide -> slideProportion: drag piece slideProportion * trackWidth px (or slideDistance)
# click -> clickTargets: click each {x, y} in order
if "coordinates" in sol: points = sol["coordinates"] # swap
elif "slideProportion" in sol: dist = sol["slideProportion"] # slide (fraction of track)
elif "clickTargets" in sol: targets = sol["clickTargets"] # click1. Send Payload
Dispatch your TemuCaptchaTaskProxyLess to our processing cluster via the secure API endpoint.
2. Solving Engine
Image-in / answer-out: send the challenge image(s) (and, for click challenges, the instruction text) and we return click coordinates or a slide distance. Your automation performs the move in its own session, so no proxy or token binding is involved.
3. Get Result
Poll getTaskResult for the validated token, then finalize your automated request.
Using your own proxy
Use TemuCaptchaTask instead of TemuCaptchaTaskProxyLess to route the solve through your own proxy — useful when the target site checks that the solving IP matches the submitting IP.
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": "TemuCaptchaTask",
"challengeType": "slide",
"image": "<base64 background>",
"pieceImage": "<base64 piece>",
"proxyType": "http",
"proxyAddress": "123.45.67.89",
"proxyPort": "8080",
"proxyLogin": "user",
"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)
Additional proxy parameters
proxyTypetypestringreqyesProxy protocol: http, https, socks4, or socks5proxyAddresstypestringreqyesProxy 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
API SpectypetypestringreqyesTemuCaptchaTaskProxyLess (image-only, default) or TemuCaptchaTaskchallengeTypetypestringreqno"swap" | "slide" | "click". Auto-detected from the images if omitted.imagetypestringreqnoBase64 of the puzzle/challenge imagerefImagetypestringreqnoSwap only — base64 of the reference (correct) imagepieceImagetypestringreqnoSlide only — base64 of the sliding piecequestiontypestringreqnoClick only — the instruction text (e.g. 'click the smaller green cylinders')puzzleWidthtypenumberreqnoRendered puzzle width in px, so distances come back in your widget's pixelsResponse Shape
coordinatestypearraySwap/click — points to click/swap as [{x, y}] in image pixels, in orderclickTargetstypearrayAlias of coordinates for click challengesslideDistancetypenumberSlide — pixels to drag the pieceslideProportiontypenumberSlide — drag distance as a 0-1 fraction of the trackmethodtypestringWhich solver produced the answer (e.g. 'ml', 'opencv_density')Example response
{
"errorId": 0,
"status": "ready",
"solution": {
"slideDistance": 123,
"slideProportion": 0.456,
"method": "opencv_density"
}
}Error response
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Solver gave up."
}Features
Pricing & Stats
Start solving temu captcha.
$0.10 in free credits — no card. ~250 free solves to test before you spend.