CAPTCHA / GEETEST_ICON
GeeTest / Icon
Captcha with three icon hints: find these objects on the large picture and click them in the given order.
Input
Prepare canvas.jpg — the main picture, and hint-1.png, hint-2.png, hint-3.png — the three original hints in task order. Keep the alpha channel of the PNG hints. Send files from the same round.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| image | string | Yes | — | Source image in base64. |
| ques | string[3] | Yes | — | Array of exactly three base64 hint images. The first element is the first object to click, the second — second, the third — third. |
| method | string | No | auto | auto: use a known clean background, otherwise match contours. background: require a clean background; without one the task fails. match: search by contours without a clean background. |
| bg_id | string | No | Empty string | Clean background ID, if you know it. Takes priority over imgs. |
| imgs | string | No | Empty string | Original path of the main picture from the provider's data, e.g. /icon/<hex-id>/…. bg_id is extracted from it. |
Response
| Recognition data | Type | Description |
|---|---|---|
| extra.points | integer[][3] | Points [number, x, y]. The number starts at 1 and follows the order of ques. x and y are pixels of the original main picture. |
| extra.scores | number[] | Point match scores, in the same order. |
| extra.method | string | Method actually used: background or match. |
| extra.bg_id | string | Background ID, if known. |
| extra.background_built | boolean | Whether the background was assembled from samples accumulated by the server in this request. |
| extra.fallback_reason | string, optional | Reason for switching from the background method to match, if it happened. |
| extra.debug | object | Diagnostics of the specific method. |
Applying the answer
Read result["extra"]["points"]. Click each point in array order. If the picture is scaled, recalculate x and y first. Verification with the provider is done by the plugin or your code.
Common mistakes
- ques must contain exactly three images, not the task text or local file paths.
- The hints and canvas must belong to the same round.
- Do not start with method=background unless the server knows the background; use auto for the first request.
Request example
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("canvas.jpg"),
"ques": [image64("hint-1.png"), image64("hint-2.png"), image64("hint-3.png")],
"method": "auto",
}
# One ID per task; keep it for network retries.
request_id = str(uuid.uuid4())
response = requests.post(
"https://capi.z3n.pro/v1/solve/geetest_icon",
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 order, x, y in result["extra"]["points"]:
print(order, x, y)
capi.