What is Cloudflare Turnstile?
Cloudflare Turnstile is a smart captcha that replaces reCAPTCHA on millions of websites. It runs invisible behavioral checks in the background and either auto-passes or shows a simple checkbox challenge. Turnstile is embedded as a widget in forms (login, signup, checkout) and produces a token that the site validates server-side. Turnstile is used by over 25 million websites and is one of the most common captchas you'll encounter.
How It Works
Send Task
POST your AntiTurnstileTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
Capzy's proprietary solver returns valid Turnstile tokens for authorized testing and automation. Most solves complete in 2-3 seconds.
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": "AntiTurnstileTaskProxyLess",
"websiteKey": "0x4AAAAAAADnPIDROrmt1Wwj",
"websiteURL": "https://example.com/login"
}
}).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)Using Your Own Proxy
Use AntiTurnstileTask instead of AntiTurnstileTaskProxyLess to route the solve through your own proxy. This is useful when the target site checks the IP that solved the captcha matches the IP submitting the form.
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": "AntiTurnstileTask",
"proxyPort": "8080",
"proxyType": "http",
"proxyLogin": "user",
"websiteKey": "0x4AAAAAAADnPIDROrmt1Wwj",
"websiteURL": "https://example.com/login",
"proxyAddress": "123.45.67.89",
"proxyPassword": "pass"
}
}).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)additional proxy parameters
proxyTypetypestringreqyesProxy protocol: http, https, socks4, or socks5proxyAddresstypestringreqyesProxy IP address or hostnameproxyPorttypenumberreqyesProxy port numberproxyLogintypestringreqnoProxy username (if auth required)proxyPasswordtypestringreqnoProxy password (if auth required)userAgenttypestringreqnoUser-Agent string to use. Must match the UA you use when submitting the tokentask parameters.
typetypestringreqyesAntiTurnstileTaskProxyLess or AntiTurnstileTaskwebsiteURLtypestringreqyesThe page URL where Turnstile is loadedwebsiteKeytypestringreqyesThe sitekey (starts with 0x...). Found in data-sitekey attribute or JS sourcesolution response.
tokentypestringThe solved Turnstile token. Submit in cf-turnstile-response fieldFeatures
ProxyLess Task Type
AntiTurnstileTaskProxyLessWith Proxy
AntiTurnstileTaskFrequently Asked Questions
start solving cloudflare turnstile.
$0.10 in free credits — no card. ~250 free solves to test before you spend.