What is Coordinate Click?
A generic task for captchas that require clicking at specific points on an image. Send the image and a text description of what to click, and our AI returns the (x,y) coordinates. Useful for custom captchas ('click all fire hydrants'), Chinese character selection, and icon matching puzzles.
How it works
Send Task
POST your CoordinatesTask with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Capzy's proprietary classifier returns the (x, y) coordinates that match your prompt. Useful for accessibility tooling and authorized image-analysis workflows.
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": "CoordinatesTask",
"body": "/9j/4AAQSkZJRgABAQ...",
"comment": "click all traffic lights"
}
}).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)
# Step 3: Coordinates — click each (x,y) point in your browser session
for pt in result["solution"]["coordinates"]:
# e.g. Selenium: ActionChains(driver).move_by_offset(pt["x"], pt["y"]).click().perform()
print(pt["x"], pt["y"])Task parameters
typetypestringreqyesCoordinatesTaskbodytypestringreqyesBase64-encoded imagecommenttypestringreqyesText instruction describing what to click (e.g. 'click all traffic lights')Solution response
coordinatestypearrayArray of `{x, y}` click points in image-pixel coordinates, relative to the top-left of the original image. Apply directly via mouse / touch events.clickTargetstypearrayAlias of `coordinates` — same data under the legacy field name. Use whichever your downstream code expects; we emit both.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": {
"coordinates": [
{
"x": 120,
"y": 240
},
{
"x": 280,
"y": 390
}
],
"clickTargets": [
{
"x": 120,
"y": 240
},
{
"x": 280,
"y": 390
}
]
}
}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: CoordinatesTask