# Cloudflare Turnstile

> Cloudflare-Turnstile-Tokens mit YesCaptcha abrufen: TurnstileTaskProxyless, TurnstileTaskProxylessM1 und TurnstileTask mit eigenem Proxy, Parameter, Beispiele und Ergebnisformat sowie der Unterschied zur Cloudflare-Prüfseite.

Source: https://docs.yescaptcha.com/de/tasks/turnstile/ · Last verified: 2026-10-21

> This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/turnstile/

Eine Cloudflare-Turnstile-Aufgabe gibt ein Token (`token`) zurück, das Sie an die Zielwebsite senden, um die Prüfung zu bestehen. `TurnstileTaskProxyless` kostet 25 Punkte (≈ $3.75 / 1k) pro Aufgabe und arbeitet asynchron: zuerst `createTask`, dann alle 5 Sekunden `getTaskResult`. Bei fehlgeschlagenen Aufgaben und Zeitüberschreitung erfolgt automatisch eine Punkteerstattung.

- POST `https://api.yescaptcha.com/createTask` (Globaler Endpoint)
- POST `https://cn.yescaptcha.com/createTask` (China-Endpoint)

Der Request-Body ist JSON und wird mit `clientKey` authentifiziert. Fragen Sie das Ergebnis an demselben Endpoint ab, an dem Sie die Aufgabe erstellt haben.

## Einsatzszenarien

In einem Formular der Seite ist ein Cloudflare-Prüffeld (“Bestätigen Sie, dass Sie ein Mensch sind”) eingebettet, und die Seite lädt ein Skript von `challenges.cloudflare.com/turnstile`.

Wenn Cloudflare die gesamte Seite abfängt und “Einen Moment bitte…” bzw. “Ihr Browser wird überprüft” anzeigt, handelt es sich um die Cloudflare-Prüfseite und nicht um Turnstile. Verwenden Sie dafür [Cloudflare-Prüfseite](https://docs.yescaptcha.com/de/tasks/cloudflare-challenge.md). Den Unterschied erklärt [Captcha-Typ bestimmen](https://docs.yescaptcha.com/de/guides/identify-captcha.md).

## Aufgabentypen und Preise

| Aufgabentyp | Preis | Modus | Hinweise |
| --- | --- | --- | --- |
| `TurnstileTaskProxyless` | $3.75 / 1k; 25 Punkte/Aufgabe · ¥25 / 1k | Asynchron |  |
| `TurnstileTaskProxylessM1` | $4.50 / 1k; 30 Punkte/Aufgabe · ¥30 / 1k | Asynchron |  |
| `TurnstileTask` | $3.75 / 1k; 25 Punkte/Aufgabe · ¥25 / 1k | Asynchron | Eigener Proxy |

Die Preise in US-Dollar sind Schätzwerte bei 1 US$ ≈ ¥6.67; Aufgaben werden in Punkten berechnet.

-   `TurnstileTaskProxyless` und `TurnstileTaskProxylessM1` haben dieselben Parameter, nutzen aber unterschiedliche Routen und können sich gegenseitig als Ersatz dienen.
-   `TurnstileTask` lädt das Captcha über Ihren eigenen Proxy; die Proxy-Felder müssen angegeben werden.

## Request-Parameter

| Feld | Typ | Erforderlich | Beschreibung |
| --- | --- | --- | --- |
| `type` | string | Ja | Aufgabentyp; siehe „Aufgabentypen und Preise“ auf dieser Seite |
| `websiteURL` | string | Ja | Vollständige URL der Seite, auf der das Captcha angezeigt wird. Verwenden Sie die Website, auf der Sie das Captcha sehen, nicht die Domain des Captcha-Anbieters |
| `websiteKey` | string | Ja | Der Turnstile-Website-Schlüssel (sitekey), beginnt in der Regel mit 0x |
| `pageAction` | string | Nein | Die `action`, die die Seite an Turnstile übergibt (eine Option von `turnstile.render` oder `data-action` am Widget-Element), z. B. `login`. In den meisten Fällen nicht nötig; fügen Sie sie nur hinzu, wenn Aufgaben weiterhin fehlschlagen |
| `data` | string | Nein | Die `cData`, die die Seite an Turnstile übergibt (eine Option von `turnstile.render` oder `data-cdata` am Widget-Element), z. B. `c0bd4b36-7419-4e18-83c6-378699f2a9a2`. In den meisten Fällen nicht nötig; fügen Sie sie nur hinzu, wenn Aufgaben weiterhin fehlschlagen |
| `proxyType` | string | Einige Typen | Proxy-Protokoll: `http`, `https`, `socks4` oder `socks5` (Erforderlich für TurnstileTask) |
| `proxyAddress` | string | Einige Typen | IP-Adresse oder Hostname des Proxys. Lokale oder private Adressen wie 127.0.0.1 oder 192.168.x.x funktionieren nicht, da unsere Server sie nicht erreichen können (Erforderlich für TurnstileTask) |
| `proxyPort` | integer | Einige Typen | Proxy-Port (Erforderlich für TurnstileTask) |
| `proxyLogin` | string | Nein | Proxy-Benutzername, falls der Proxy eine Authentifizierung erfordert (nur TurnstileTask) |
| `proxyPassword` | string | Nein | Proxy-Passwort, falls der Proxy eine Authentifizierung erfordert (nur TurnstileTask) |
| `userAgent` | string | Nein | User-Agent des Browsers. Enthält das Ergebnis einen `userAgent`, verwenden Sie diesen Wert, wenn Sie das Token senden (nur TurnstileTask) |

`websiteKey` beginnt in der Regel mit `0x`. Wie Sie ihn finden, steht unter [Turnstile-Parameter finden](https://docs.yescaptcha.com/de/guides/find-turnstile-parameters.md).

### Wenn Aufgaben nicht bestanden werden: pageAction und data

In den meisten Fällen genügen `websiteURL` und `websiteKey`; diese beiden Parameter sind nicht nötig. Wenn Sie sicher sind, dass `websiteURL` und `websiteKey` stimmen, die Aufgabe aber trotzdem nicht bestanden wird, prüfen Sie, ob die Seite beim Aufruf von Turnstile `action` und `cData` übergibt (Parameter von `turnstile.render` oder `data-action` und `data-cdata` am Element des Prüffelds). Falls ja, übernehmen Sie die Werte unverändert:

-   `pageAction`: der `action`\-Wert der Seite, z. B. `login`
-   `data`: der `cData`\-Wert der Seite, z. B. `c0bd4b36-7419-4e18-83c6-378699f2a9a2`

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

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "TurnstileTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "0x4AAAAAAA_SITE_KEY",
    "pageAction": "login",
    "data": "c0bd4b36-7419-4e18-83c6-378699f2a9a2"
  }
}
```

## Request-Beispiel

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

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "TurnstileTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "0x4AAAAAAA_SITE_KEY"
  }
}
```

**curl**

```bash
curl -s https://api.yescaptcha.com/createTask \
  -H 'Content-Type: application/json' \
  -d '{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "TurnstileTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "0x4AAAAAAA_SITE_KEY"
  }
}'

# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:
curl -s https://api.yescaptcha.com/getTaskResult \
  -H 'Content-Type: application/json' \
  -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'
```

**Python**

solve.py

```python
import os
import time

import requests

API = "https://api.yescaptcha.com"
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]  # Read the clientKey from an environment variable

def call(method, payload):
    r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30)
    data = r.json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def solve(task):
    task_id = call("createTask", {"task": task})["taskId"]
    for _ in range(36):  # Poll every 5 seconds, for up to about 3 minutes
        time.sleep(5)
        result = call("getTaskResult", {"taskId": task_id})
        if result.get("status") == "ready":
            return result["solution"]
    raise TimeoutError(task_id)

solution = solve({
    "type": "TurnstileTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "0x4AAAAAAA_SITE_KEY",
})
print(solution["token"])
```

**Node.js**

solve.mjs

```js
const API = 'https://api.yescaptcha.com';
const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable

async function call(method, payload) {
  const res = await fetch(`${API}/${method}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }),
  });
  const data = await res.json();
  if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`);
  return data;
}

async function solve(task) {
  const { taskId } = await call('createTask', { task });
  for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes
    await new Promise((r) => setTimeout(r, 5000));
    const result = await call('getTaskResult', { taskId });
    if (result.status === 'ready') return result.solution;
  }
  throw new Error(`timeout: ${taskId}`);
}

const solution = await solve({
  type: "TurnstileTaskProxyless",
  websiteURL: "https://example.com/login",
  websiteKey: "0x4AAAAAAA_SITE_KEY",
});
console.log(solution.token);
```

Ersetzen Sie `websiteURL` und `websiteKey` durch die Werte der Zielwebsite.

## Ergebnis

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "0.ufq5RgSVZd11DPSX1brdrxnEs28KcVlKj2ORchqxSy2q9yAW6ciq3hriXDF4x...",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36"
  }
}
```

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `token` | string | Das Token, das an die Zielwebsite gesendet wird. Einmalig verwendbar; senden Sie es so schnell wie möglich |
| `userAgent` | string | Der User-Agent, mit dem das Token erzeugt wurde. Verwenden Sie diesen Wert beim Senden des Tokens, auch wenn er von dem abweicht, den Sie übergeben haben |

Tragen Sie das `token` in das Feld `cf-turnstile-response` der Seite (oder in das Feld, das die Schnittstelle der Zielwebsite verlangt) ein und senden Sie es ab. Verwenden Sie dabei als User-Agent der Anfrage den zurückgegebenen `userAgent`.

Solange die Aufgabe läuft, lautet die Antwort `{"errorId": 0, "status": "processing"}`; fragen Sie nach 5 Sekunden erneut ab. Bei Fehlern gehen Sie nach `errorCode` vor, siehe [Fehlercodes](https://docs.yescaptcha.com/de/api/errors.md).

## Häufige Fragen

### Wie lange ist ein Token gültig?

Es ist nur einmal verwendbar. Senden Sie es nach Erhalt möglichst schnell ab (Turnstile-Tokens laufen in der Regel innerhalb weniger Minuten ab; das legt Cloudflare fest).

### Die Website lehnt die Übermittlung trotzdem ab

Prüfen Sie, ob `websiteURL` die Seite mit dem Prüffeld ist und `websiteKey` stimmt, und verwenden Sie beim Absenden den zurückgegebenen `userAgent`. Wenn die Seite `action` und `cData` übergibt, geben Sie diese als `pageAction` und `data` mit an, siehe oben [Wenn Aufgaben nicht bestanden werden](#if-tasks-keep-failing-pageaction-and-data). Prüft die Website zusätzlich die IP, verwenden Sie `TurnstileTask` und senden Sie über denselben Proxy ab.

## Verwandte Anleitungen

-   [Captcha-Typ bestimmen](https://docs.yescaptcha.com/de/guides/identify-captcha.md)
-   [Turnstile-Parameter finden](https://docs.yescaptcha.com/de/guides/find-turnstile-parameters.md)
