Skip to content

Shopee Slider

Measure the slider answer against the original puzzle. Save the gapped background and transparent puzzle piece from one challenge. Preserve the original geometry for its returned slider proportion or offset.

POST /createTask · example
{
  "clientKey": "capzy_YOUR_API_KEY",
  "task": {
    "type": "ShopeeSliderTaskProxyLess",
    "image": "<base64 puzzle background>",
    "pieceImage": "<base64 piece>"
  }
}

Illustrative values. Replace the inputs with values from your current integration.

Background + piece + challenge modeProxyless or your own proxySlide proportion + pixel offset

Capture the puzzle and piece images.

Save the gapped background and transparent puzzle piece from one challenge. Preserve the original geometry for its returned slider proportion or offset.

Your API key authenticates Capzy.
Provider keys, challenge IDs, images, and session values belong inside task.

Keep both image responses from one puzzle.

  1. Locate the background and piece URLs in the current challenge response, then save their original bytes.
  2. Keep the piece's alpha channel and both images' original dimensions. Base64-encode the background into image and the piece into pieceImage.
  3. Use files from the same challenge and preserve its current session identifiers.
Input collection example - replace illustrative values
import base64
from pathlib import Path

def image_bytes(filename):
    return base64.b64encode(Path(filename).read_bytes()).decode("ascii")

task_inputs = {
    "image": image_bytes("background.png"),
    "pieceImage": image_bytes("piece.png")
}

Both image and pieceImage are required. A flattened or resized piece can change the detected home position.

How Shopee Slider works

Shopee uses its own slider captcha (not GeeTest): a background image with a gap and a piece you drag to fill it. It comes in two shapes — a straight line-slide and an arced curve-slide where the piece follows a rotated trajectory.

This is an image-in / answer-out solver. You extract the puzzle background + piece images from the page and send them; our proprietary solving machine locates the gap and returns the exact drag proportion / pixel offset — typically in under 50ms. Your own automation performs the drag, so no proxy or token binding is involved.

  • Handles both line-slide and curve-slide variants
  • Image-in / answer-out — you drive the drag in your own session
  • Proprietary solving machine — sub-50ms gap detection
  • No proxy required — stateless image solve

Know what goes in.

Choose a field to see its purpose, where to get it, and its place in the request. Optional values omitted from the example can be added when your flow uses them.

The request below follows your selected task configuration.

Request authentication

Required task inputs

Optional context

image

stringRequired

Base64 of the puzzle background image (the one with the gap). Alias: puzzle_image_b64.

Where it comes from

Save and base64-encode the original challenge/background image from the current response. Preserve its dimensions.

Open the input guide
Example value<base64 puzzle background>
POST /createTask · selected configuration
{
  "clientKey": "capzy_YOUR_API_KEY",
  "task": {
    "type": "ShopeeSliderTaskProxyLess",
    "image": "<base64 puzzle background>",
    "pieceImage": "<base64 piece>"
  }
}

The selected field is highlighted when present. Preserve the declared value type and current challenge context.

Make your first request.

Create the task, keep its taskId, and poll until status is ready. Then read the selected variant's solution.

More examples
  1. Create the task

    Send clientKey and the selected task to /createTask from your server. Keep the returned taskId.

  2. Wait for the solution

    Send that same key and ID to /getTaskResult. While processing, wait two seconds before checking again. Stop on Ready or an error.

  3. Apply the result

    Use solution.slideXProportion or solution.slideOffset with the actual track dimensions, checking puzzleWidth and origin metadata. Continue the original puzzle session rather than treating the answer as a token.

solve_shopee.py
import json, os, time
import requests

API = "https://api.capzy.ai"
KEY = os.environ["CAPZY_API_KEY"]
task = json.loads("{\"type\":\"ShopeeSliderTaskProxyLess\",\"image\":\"<base64 puzzle background>\",\"pieceImage\":\"<base64 piece>\"}")

def call(path, payload):
    response = requests.post(f"{API}/{path}", json={"clientKey": KEY, **payload}, timeout=30)
    response.raise_for_status()
    data = response.json()
    if data.get("errorId", 0) or data.get("status") == "failed":
        raise RuntimeError(data.get("errorDescription") or data.get("errorCode") or "Task failed")
    return data

created = call("createTask", {"task": task})
for attempt in range(60):
    result = call("getTaskResult", {"taskId": created["taskId"]})
    if result.get("status") == "ready":
        solution = result["solution"]
        print(solution)
        break
    time.sleep(2)
else:
    raise TimeoutError("Task is still processing; keep the taskId to check it later.")

Before runningReplace all illustrative inputs with your captured values. Set CAPZY_API_KEY in your environment. Install requests with pip install requests.

Polling and failuresThe example checks HTTP/API failures, uses 30-second request timeouts, and stops after 60 result checks. Retain taskId if your task is still processing.

Understand what comes back.

Follow this task from creation to completion. Response fields and usage follow your selected request variant.

Slide proportion + pixel offset

Use solution.slideXProportion or solution.slideOffset with the actual track dimensions, checking puzzleWidth and origin metadata. Continue the original puzzle session rather than treating the answer as a token.

number
How far to drag as a 0-1 fraction of the puzzle width (primary answer). Multiply by your rendered track width for pixels.
number
Pixel offset of the gap from the left edge
number
Curve variant: pixels to drag along the arced trajectory
number
Detected puzzle width in pixels (for scaling)
string
Opaque solver-engine tag (versioning only)
POST /getTaskResult · example response
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "slideXProportion": 0.4523,
    "slideOffset": 180,
    "puzzleWidth": 400,
    "engine": "cvx-2"
  }
}

Illustrative values. Additional metadata may be returned; only Ready contains a completed solution.

Apply the slide

Shopee validates the drag client-side, so the answer is the geometry — slide the piece slideOffset pixels in your own session.

Execution context result is the parsed Ready response from the polling example. session, when referenced, is your existing requests.Session (or browser-compatible session) with the original cookie jar, headers, and solving proxy configured in session.proxies for both http and https. Keep this client for the complete flow. task is the task object you submitted. For Shape, action_body is the original protected request body as bytes or a string, with its original Content-Type in session.headers. Install curl_cffi when the fragment imports it; match the target's required browser/TLS identity.

Use the result · Python

# 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()

When something doesn't work.

Check your captured values, the selected variant, and the response before starting another task.

How do I apply the answer?

Perform the drag in your own browser/automation session: move the piece by slideOffset pixels (or slideXProportion × your rendered track width). For the curve variant use pixelsFromSliderOrigin.

Why don't you return a token?

Shopee binds verification to your device and session, so a token minted on our side wouldn't validate on yours. We return the move for you to apply — which also keeps your real session doing the drag.

Can I tell you whether a solve worked?

Yes — after your session applies the drag, call POST /reportCorrectCaptcha (accepted) or /reportIncorrectCaptcha (rejected) with the taskId. It's optional and never affects pricing, but because your own browser performs the drag we can't see the outcome ourselves — your report is what lets us track and improve slider accuracy.

Connect Shopee Slider to your workflow.

Get your Capzy API key and use this guide's integration.

$2.00Per 1,000 solves
0.5sAverage solve time

ShopeeSliderTaskProxyLess · Live configuration