CAPTCHA / TENCENT_ICONS

Tencent / Icons

Tencent "Click in this order" captcha: coloured icons on the image, three black ones on the strip in the required order. The response is the click points. Available through the direct API.

Input

Prepare bg.jpg, the 672×480 image (dyn_show_info.bg_elem_cfg.img_url in the cap_union_prehandle response), and sprite.jpg, the 170×50 strip (dyn_show_info.sprite_url). Send the files of one task unchanged.

Parameters

ParameterTypeRequiredDefaultDescription
imagestringYes—Source image in base64.
orderstringYes—The icon strip in base64.

Response

Recognition dataTypeDescription
confidencenumberThe lowest p score among the points.
extra.points[].indexintegerClick number, starting at 1. The order matches the icons on the strip.
extra.points[].x / ynumberClick point in pixels of the original image.
extra.points[].namestringIcon name.
extra.points[].pnumberScore of the found icon, from 0 to 1.
extra.points[].matchnumberSimilarity of the strip icon to the known icon of this name.
extra.sizeinteger[2]Width and height of the original image.

Applying the answer

Click the extra.points in order. If the original image is W×H and it is shown on the page as w×h, the coordinate relative to the image on the page is x × w / W, y × h / H.

Common mistakes

  • The image and the strip must belong to the same task.
  • Do not crop or scale the files before sending.
  • A 422 unsolvable_image (4001) response: the solver did not find the icons of this round. detail names the step and what it saw; the reserve is released. Keep the image and order you sent: they are a sample for training the model.
Scenario errors and retries →

Request example

Python · requests
import base64
from pathlib import Path
import os
import uuid
import requests

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

payload = {
    "image": image64("bg.jpg"),
    "order": image64("sprite.jpg"),
}

# One ID per task; keep it for network retries.
request_id = str(uuid.uuid4())
response = requests.post(
    "https://capi.z3n.pro/v1/solve/tencent_icons",
    headers={
        "Authorization": f"Bearer {os.environ['CAPI_API_KEY']}",
        "Content-Type": "application/json",
        "Idempotency-Key": request_id,
    },
    json=payload,
    timeout=90,
)
response.raise_for_status()
result = response.json()
for point in result["extra"]["points"]:
    print(point["index"], point["x"], point["y"])
Payment and all routes →