Skip to content

Migration

Migrate From Anti-Captcha: TurnstileTask on ZeroCaptcha

Move Cloudflare Turnstile tasks from Anti-Captcha to ZeroCaptcha: the same task types, calls and field names, cData included, and what to check first.

3 min readPublished Updated

Anti-Captcha documents Turnstile with the task types TurnstileTaskProxyless and TurnstileTask on its createTask and getTaskResult calls. ZeroCaptcha accepts those same types and calls. For most clients, moving over means changing the API host and the key: the field names stay, Anti-Captcha’s cData included. This guide shows the request and the checklist.

ZeroCaptcha is not affiliated with Anti-Captcha. Facts about Anti-Captcha below come from its public pages, checked 1 October 2026.

What Anti-Captcha’s request looks like

Anti-Captcha’s TurnstileTask documentation posts to https://api.anti-captcha.com/createTask with clientKey and a task holding type, websiteURL, websiteKey, an optional action, an optional cData, and, for TurnstileTask, the proxy fields proxyType, proxyAddress, proxyPort, proxyLogin and proxyPassword.

The same request on ZeroCaptcha

{
"clientKey": "zc_live_…",
"task": {
"type": "TurnstileTask",
"websiteURL": "https://shop.example.com/login",
"websiteKey": "0x4AAAAAAAB1cD2eF3gH4iJ5",
"action": "login",
"cData": "sess_91f2c0",
"proxyType": "http",
"proxyAddress": "proxy.example.net",
"proxyPort": 8080,
"proxyLogin": "user",
"proxyPassword": "secret"
}
}

Post it to /createTask on your ZeroCaptcha API host, then poll /getTaskResult with the taskId. Every field keeps its name.

The cData field

ZeroCaptcha reads the widget’s cData from the first of these fields that is present: cdata, cData, data, turnstileCData, then metadata.cdata (or metadata.cData). Anti-Captcha’s cData is one of them, so a client written for Anti-Captcha sends it unchanged. JSON keys are case-sensitive, so a cData under any other name is ignored, and the site may then reject the token on its server. See Cloudflare Turnstile action and cData to find out whether a widget sets one.

Checking the result

Poll getTaskResult every one or two seconds with clientKey and taskId. While the task runs, the reply is {"errorId": 0, "taskId": "…", "status": "processing"}. When it is solved, status is ready and the token is in solution.token:

result = requests.post(f"{API}/getTaskResult", timeout=15,
json={"clientKey": KEY, "taskId": task_id}).json()
if result["errorId"]:
raise RuntimeError(result["errorCode"]) # such as ERROR_CAPTCHA_UNSOLVABLE
if result["status"] == "ready":
token = result["solution"]["token"] # use it within 300 seconds

The balance call is the same too: getBalance with clientKey answers {"errorId": 0, "balance": 12.3456}, in US dollars.

Other differences to check

  • Task IDs are UUIDs. A client that stores or parses them as integers needs to keep them as strings.
  • Proxy types are http and https. SOCKS proxies are not supported yet: a task with one is refused before any money is held. Solve Cloudflare Turnstile with a proxy covers the formats.
  • The ready reply carries solution.token and solution.type, plus cost, createTime, endTime, solveCount and expiresAt. A Turnstile token works once, for 300 seconds.
  • Extra fields are ignored. A userAgent in the task, for example, is accepted and not used.
  • Reports are recorded, not refunded. reportIncorrectRecaptcha and reportCorrectRecaptcha answer as Anti-Captcha’s do, and our staff read them, but every charge is final.
  • Errors come as errorId 1 with errorCode and errorDescription, always with HTTP 200. The errors reference lists every code and what it costs.

Prices

Anti-Captcha lists Cloudflare Turnstile at $2 per 1,000 on its pay-as-you-go price table on its home page (checked 1 October 2026). ZeroCaptcha’s current price per 1,000 solved tasks is on the pricing page. ZeroCaptcha holds the price when a task is created and charges it only when a token is ready.

Rolling it out

  1. Create an account, a key and a first top-up: the quickstart takes a few minutes.
  2. Point one worker at ZeroCaptcha’s API host and compare results on your pages.
  3. Move the rest once the numbers look right.

The Anti-Captcha alternative page compares the two services, and the Cloudflare Turnstile solver page has full samples in every supported language.

Questions

Do I have to rename cData?

No. ZeroCaptcha reads Anti-Captcha's cData as it is spelled, as well as cdata, data, turnstileCData and metadata.cdata.

Does TurnstileTask need a proxy on ZeroCaptcha?

Yes. TurnstileTask solves through the proxy you give, over HTTP or HTTPS; TurnstileTaskProxyless needs none.

What changes in my code?

The API host and the key. Check too that your code keeps task IDs as text: ZeroCaptcha's are UUIDs.

Read next

This guide is part of the Cloudflare Turnstile solver hub. Every task is charged only when a token is ready.

Get an API key