Before you submit — these must be correct
If any of these are wrong, your token may be accepted by our solver but rejected or scored poorly by the target site. We can’t detect these mismatches for you.
- Apply the offset in your own session — the answer is the geometry, not a token.
What is Shopee Slider?
Shopee's marketplace uses a proprietary slider captcha with line (straight drag) and curve (arced trajectory) variants: a background puzzle with a gap and a piece you must slide into place. This solver reads the images and returns where the piece goes.
How it works
Send Task
POST your ShopeeSliderTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Send the puzzle background and the piece as base64 images. We locate the gap with computer vision and return the horizontal slide offset (as a 0–1 proportion and in pixels), plus candidate offsets. No browser and no proxy — pure image analysis.
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": "ShopeeSliderTaskProxyLess",
"type": "ShopeeSliderTask",
"image": "<base64 puzzle>",
"pieceImage": "<base64 piece>",
"challengeType": "line"
}
}).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
Shopee validates the drag client-side, so the answer is the geometry — slide the piece slideOffset pixels in your own session.
# Step 3 — drag the piece by slideOffset pixels (or use the 0-1 proportion)
sol = result["solution"]
offset_px = sol["slideOffset"] # absolute px, e.g. 186
proportion = sol["slideXProportion"] # same as a 0-1 fraction of the track
# e.g. Playwright: mouse.down(); mouse.move(start_x + offset_px, y); mouse.up()Task parameters
typetypestringreqyesShopeeSliderTask (line) or ShopeeCurveTask (arced). ProxyLess variants exist.imagetypestringreqyesThe puzzle background image, base64.pieceImagetypestringreqyesThe slider piece image, base64.challengeTypetypestringreqnoline (default) or curve.Solution response
slideXProportiontypenumberHorizontal offset as a proportion of the puzzle width (0–1).slideOffsettypeintegerAbsolute horizontal offset in pixels.candidatestypearrayAlternative offsets [{x, proportion}] ranked by confidence.methodtypestringWhich path produced the answer (opencv / ml).Example 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": {
"method": "opencv",
"candidates": [
{
"x": 186,
"proportion": 0.62
}
],
"slideOffset": 186,
"slideXProportion": 0.62
}
}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: ShopeeSliderTaskProxyLess
with proxy: ShopeeSliderTask