Solve managed challenges and invisible Turnstile widgets automatically. No browser on your end. Just send the sitekey, get the token.
Turnstile is Cloudflare's CAPTCHA replacement. It runs a series of browser challenges in the background to verify the user is human. Our solver handles the full challenge flow and returns a valid cf-turnstile-response token.
We support both managed challenges (the full-page interstitial) and widget tokens (the inline checkbox). Both return tokens you can submit server-side.
import requests, time API = "https://api.pentium.sh" KEY = "PTM-your-api-key" # Step 1: Create the task task = requests.post(f"{API}/createTask", json={ "clientKey": KEY, "task": { "type": "AntiTurnstileTaskProxyLess", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA..." } }).json() task_id = task["taskId"] # Step 2: Poll for result while True: result = requests.post(f"{API}/getTaskResult", json={ "clientKey": KEY, "taskId": task_id }).json() if result["status"] == "ready": break time.sleep(3) token = result["solution"]["token"] print(f"Token: {token[:50]}...")
const API = "https://api.pentium.sh"; const KEY = "PTM-your-api-key"; // Create the task const { taskId } = await fetch(`${API}/createTask`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ clientKey: KEY, task: { type: "AntiTurnstileTaskProxyLess", websiteURL: "https://example.com/login", websiteKey: "0x4AAAAAAA..." } }) }).then(r => r.json()); // Poll for result let solution; while (!solution) { await new Promise(r => setTimeout(r, 3000)); const res = await fetch(`${API}/getTaskResult`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ clientKey: KEY, taskId }) }).then(r => r.json()); if (res.status === "ready") solution = res.solution; } console.log("Token:", solution.token);
All the fields you need to create a Turnstile task.
| Parameter | Type | Required | Description |
|---|---|---|---|
type |
string | Yes | AntiTurnstileTaskProxyLess |
websiteURL |
string | Yes | The URL of the page with the Turnstile widget |
websiteKey |
string | Yes | The Turnstile sitekey (starts with 0x4AAAAAAA) |
action |
string | No | Custom action parameter if required by the site |
cData |
string | No | Custom data parameter if required by the site |
What you get back when the solve is complete.
{ "errorId": 0, "status": "ready", "solution": { "token": "0.Ao3k8...", "userAgent": "Mozilla/5.0 ..." } }
Get your API key and start solving in under a minute.