NeuroCaptcha

Task type

Cloudflare Turnstile

TurnstileTaskyour proxy

Send the page parameters, receive a ready-to-use token in the same response format as every other type.

With your proxy: the task is solved through the proxy you pass, so the token matches your IP. Proxy credentials are deleted after solving.

Price

$0.80per 1,000 tasks

$0.0008 per task

Get an API key

Live metrics, 24 h

Live metrics for this type will appear on the status page after launch.

Task parameters

ParameterTyperequiredTask parameters
typestringrequiredTurnstileTask
websiteURLstringrequiredFull URL of the page with the captcha.
websiteKeystringrequiredSite key (data-sitekey or the k parameter of the anchor request).
actionstringoptionalTurnstile action (data-action), if the widget sets one.
turnstileCDatastringoptionalTurnstile cData (data-cdata), if the widget sets one.
userAgentstringoptionalUser-Agent to solve with; use the same one when submitting the token.
cookiesstringoptionalCookies for the target site in the key1=value1; key2=value2 format.
proxyTypestringrequiredhttp, socks4 or socks5.
proxyAddressstringrequiredProxy IP address or host (public addresses only).
proxyPortintegerrequiredProxy port.
proxyLoginstringoptionalProxy login, if the proxy requires authorisation.
proxyPasswordstringoptionalProxy password. Deleted after the task is solved.

Example

import time
import requests

API = "https://"
KEY = "YOUR_API_KEY"

# 1. create a task: the price is held, not charged
task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "TurnstileTask",
        "websiteURL": "https://example.com/login",
        "websiteKey": "0x4AAAAAAA-SITE-KEY",
        "proxyType": "http",
        "proxyAddress": "203.0.113.10",
        "proxyPort": 8080,
        "proxyLogin": "user",
        "proxyPassword": "pass",
    },
}).json()
if task["errorId"]:
    raise RuntimeError(task["errorCode"])

# 2. poll the result (or pass "callbackUrl" and get a signed webhook)
while True:
    time.sleep(3)
    res = requests.post(f"{API}/getTaskResult",
                        json={"clientKey": KEY, "taskId": task["taskId"]}).json()
    if res["errorId"]:
        raise RuntimeError(res["errorCode"])
    if res["status"] == "ready":
        print(res["solution"]["token"])
        break

Other task types