What is Rotate Captcha?
Rotation captchas show a circular image that's been randomly rotated. The user must rotate it back to the correct orientation. Used by Baidu, TikTok (Douyin), and various Chinese platforms.
How it works
Send Task
POST your RotateTask with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Capzy's proprietary classifier returns the rotation angle (in degrees) that orients the image upright. Designed for 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": "RotateTask",
"body": "/9j/4AAQSkZJRgABAQ...",
"angle": "10"
}
}).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: Rotate — apply the angle to the captcha image control
angle = result["solution"]["angle"]
# e.g. slider.set_rotation(angle) or POST angle=<value> to the site
print(f"rotate by {angle} degrees")Task parameters
typetypestringreqyesRotateTaskbodytypestringreqyesBase64-encoded imageangletypenumberreqnoAngle step in degrees (default 10). Use 360/N where N is the number of positionsSolution response
angletypenumberThe rotation angle in degrees to align the image, clockwise from current orientation. Range 0–359.rotatetypenumberAlias of `angle` for API-shape consistency with rotate-puzzle providers that expect this field name.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": {
"angle": 187,
"rotate": 187
}
}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: RotateTask