$0.002 per solve

Cloudflare Turnstile
Solver API

Solve managed challenges and invisible Turnstile widgets automatically. No browser on your end. Just send the sitekey, get the token.

How it works

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.

  • Task type AntiTurnstileTaskProxyLess
  • Avg. solve time ~9 seconds
  • Success rate 99%+
  • Price $0.002 / solve
  • Proxy required No
  • Output cf-turnstile-response token
Python
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]}...")
Node.js
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);

Task parameters

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

Response format

What you get back when the solve is complete.

JSON Response
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "0.Ao3k8...",
    "userAgent": "Mozilla/5.0 ..."
  }
}

Start solving Turnstile now

Get your API key and start solving in under a minute.