✨ NoCaptcha v2 is here — fresh look, API v2 & agentic solving.Read the changelog →
Token Tasks

Cloudflare Turnstile Task

Solve Cloudflare Turnstile and retrieve a token with the NoCaptchaAI API.

Create a task

POST https://api.nocaptchaai.com/createTask

{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "TurnstileTaskProxyLess",
    "websiteURL": "https://example.com",
    "websiteKey": "YOUR_WEBSITE_KEY"
  }
}

The API returns a taskId:

{ "errorId": 0, "status": "idle", "taskId": "CFQ2yP5DOL" }

Get the result

Poll POST https://api.nocaptchaai.com/getTaskResult until status is ready:

{ "clientKey": "YOUR_API_KEY", "taskId": "CFQ2yP5DOL" }
{
  "errorId": 0,
  "status": "ready",
  "solution": { "token": "0.WdWV79pV71mHDjQ...." }
}

Code example

# pip install requests
import requests, time

API_KEY = "YOUR_API_KEY"
BASE = "https://api.nocaptchaai.com"

task = requests.post(f"{BASE}/createTask", json={
    "clientKey": API_KEY,
    "task": {
        "type": "TurnstileTaskProxyLess",
        "websiteURL": "https://example.com",
        "websiteKey": "YOUR_WEBSITE_KEY",
    }
}).json()
task_id = task["taskId"]

while True:
    time.sleep(2)
    res = requests.post(f"{BASE}/getTaskResult", json={"clientKey": API_KEY, "taskId": task_id}).json()
    if res.get("status") == "ready":
        print(res["solution"]["token"]); break
    if res.get("status") == "failed" or res.get("errorId"):
        raise SystemExit(res)
// Node 18+
const API_KEY = "YOUR_API_KEY";
const BASE = "https://api.nocaptchaai.com";

const create = await fetch(`${BASE}/createTask`, {
  method: "POST", headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    clientKey: API_KEY,
    task: {
      type: "TurnstileTaskProxyLess",
      websiteURL: "https://example.com",
      websiteKey: "YOUR_WEBSITE_KEY",
    },
  }),
}).then(r => r.json());

let solution;
while (true) {
  await new Promise(r => setTimeout(r, 2000));
  const res = await fetch(`${BASE}/getTaskResult`, {
    method: "POST", headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ clientKey: API_KEY, taskId: create.taskId }),
  }).then(r => r.json());
  if (res.status === "ready") { solution = res.solution.token; break; }
  if (res.status === "failed" || res.errorId) throw new Error(JSON.stringify(res));
}
console.log(solution);
curl -X POST https://api.nocaptchaai.com/createTask \
  -H "Content-Type: application/json" \
  -d '{ "clientKey": "YOUR_API_KEY", "task": { "type": "TurnstileTaskProxyLess", "websiteURL": "https://example.com", "websiteKey": "YOUR_WEBSITE_KEY" } }'

Next steps

On this page

Content-Length: 0