Skip to content
capzy
Temu Captcha
TemuCaptchaTaskProxyLess

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.

Avg Speed~5.0s
Success99%+
Cost / 1k$2.00
Throughput12/m

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

solve.py
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.

use_result.py
# 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"]   # click

1. 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.

solve_proxy.py
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 socks5
proxyAddresstypestringreqyesProxy IP address or hostname
proxyPorttypenumberreqyesProxy port number
proxyLogintypestringreqnoProxy username (if auth required)
proxyPasswordtypestringreqnoProxy password (if auth required)
userAgenttypestringreqnoUser-Agent string to use. Must match the UA you use when submitting the token

Task Parameters

API Spec
typetypestringreqyesTemuCaptchaTaskProxyLess (image-only, default) or TemuCaptchaTask
challengeTypetypestringreqno"swap" | "slide" | "click". Auto-detected from the images if omitted.
imagetypestringreqnoBase64 of the puzzle/challenge image
refImagetypestringreqnoSwap only — base64 of the reference (correct) image
pieceImagetypestringreqnoSlide only — base64 of the sliding piece
questiontypestringreqnoClick only — the instruction text (e.g. 'click the smaller green cylinders')
puzzleWidthtypenumberreqnoRendered puzzle width in px, so distances come back in your widget's pixels

Response Shape

coordinatestypearraySwap/click — points to click/swap as [{x, y}] in image pixels, in order
clickTargetstypearrayAlias of coordinates for click challenges
slideDistancetypenumberSlide — pixels to drag the piece
slideProportiontypenumberSlide — drag distance as a 0-1 fraction of the track
methodtypestringWhich 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

Handles swap, slide, and click variants
Image-in / answer-out — you apply the move in your own session
Auto-detects the variant from the images
No proxy required — stateless image solve

Pricing & Stats

Per 1,000 solves$2.00
Avg solve time~5.0s
Success rate99%+
Throughput12/m

Start solving temu captcha.

$0.10 in free credits — no card. ~250 free solves to test before you spend.

Frequently asked questions