# Cloudflare Turnstile

> YesCaptcha ile Cloudflare Turnstile token'ı alın: TurnstileTaskProxyless, TurnstileTaskProxylessM1 ve kendi proxy'nizle çalışan TurnstileTask; parametreler, örnekler, dönen sonuç ve Cloudflare doğrulama sayfasından farkı.

Source: https://docs.yescaptcha.com/tr/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/

Cloudflare Turnstile görevi bir token (`token`) döndürür; bu token hedef siteye gönderildiğinde doğrulama geçilir. `TurnstileTaskProxyless` için görev başına ücret: 25 puan (≈ $3.75 / 1k). Görev asenkron çalışır: önce `createTask`, ardından her 5 saniyede bir `getTaskResult` çağrılır. Başarısız olan ve zaman aşımına uğrayan görevlerin puanı otomatik iade edilir.

- POST `https://api.yescaptcha.com/createTask` (Global uç nokta)
- POST `https://cn.yescaptcha.com/createTask` (Çin uç noktası)

İstek gövdesi JSON’dur ve kimlik doğrulaması `clientKey` ile yapılır. Sonucu, görevi oluşturduğunuz uç noktadan sorgulayın.

## Kullanım alanları

Sayfadaki bir formun içinde Cloudflare doğrulama kutusu (“İnsan olduğunuzu doğrulayın”) bulunur ve sayfa `challenges.cloudflare.com/turnstile` adresindeki betiği yükler.

Sayfanın tamamı Cloudflare tarafından durdurulup “Lütfen bekleyin…” veya “Tarayıcınız kontrol ediliyor” ekranı gösteriliyorsa bu Turnstile değil, Cloudflare doğrulama sayfasıdır; bunun için [Cloudflare doğrulama sayfası](https://docs.yescaptcha.com/tr/tasks/cloudflare-challenge.md) görev türünü kullanın. Aradaki fark için [CAPTCHA türünü belirleme](https://docs.yescaptcha.com/tr/guides/identify-captcha.md) sayfasına bakın.

## Görev türleri ve fiyatlar

| Görev türü | Fiyat | Mod | Notlar |
| --- | --- | --- | --- |
| `TurnstileTaskProxyless` | $3.75 / 1k; 25 puan/görev · ¥25 / 1k | Asenkron |  |
| `TurnstileTaskProxylessM1` | $4.50 / 1k; 30 puan/görev · ¥30 / 1k | Asenkron |  |
| `TurnstileTask` | $3.75 / 1k; 25 puan/görev · ¥25 / 1k | Asenkron | Kendi proxy'niz |

ABD doları fiyatları, 1 ABD doları ≈ ¥6.67 kuruyla hesaplanan tahminlerdir; görevler puan üzerinden ücretlendirilir.

-   `TurnstileTaskProxyless` ve `TurnstileTaskProxylessM1` aynı parametreleri kullanır, hatları farklıdır; birbirinin yedeği olarak kullanılabilir.
-   `TurnstileTask`, CAPTCHA’yı kendi proxy’nizle yükler; proxy alanlarının gönderilmesi gerekir.

## İstek parametreleri

| Alan | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `type` | string | Evet | Görev türü; bu sayfadaki "Görev türleri ve fiyatlar" bölümüne bakın |
| `websiteURL` | string | Evet | CAPTCHA'nın göründüğü sayfanın tam URL'si. CAPTCHA'yı gördüğünüz siteyi yazın, CAPTCHA sağlayıcısının alan adını değil |
| `websiteKey` | string | Evet | Turnstile site anahtarı (sitekey), genellikle 0x ile başlar |
| `pageAction` | string | Hayır | Sayfanın Turnstile'a verdiği `action` değeri (`turnstile.render` seçeneği veya doğrulama kutusu öğesindeki `data-action`), örneğin `login`. Çoğu durumda gerekmez; yalnızca görevler başarısız olmaya devam ederse ekleyin |
| `data` | string | Hayır | Sayfanın Turnstile'a verdiği `cData` değeri (`turnstile.render` seçeneği veya doğrulama kutusu öğesindeki `data-cdata`), örneğin `c0bd4b36-7419-4e18-83c6-378699f2a9a2`. Çoğu durumda gerekmez; yalnızca görevler başarısız olmaya devam ederse ekleyin |
| `proxyType` | string | Bazı türler | Proxy protokolü: `http`, `https`, `socks4` veya `socks5` (TurnstileTask için zorunlu) |
| `proxyAddress` | string | Bazı türler | Proxy IP adresi veya ana bilgisayar adı. 127.0.0.1 veya 192.168.x.x gibi yerel ya da özel adresler çalışmaz, çünkü sunucularımız bunlara erişemez (TurnstileTask için zorunlu) |
| `proxyPort` | integer | Bazı türler | Proxy portu (TurnstileTask için zorunlu) |
| `proxyLogin` | string | Hayır | Proxy kullanıcı adı, proxy kimlik doğrulaması gerektiriyorsa (yalnızca TurnstileTask) |
| `proxyPassword` | string | Hayır | Proxy şifresi, proxy kimlik doğrulaması gerektiriyorsa (yalnızca TurnstileTask) |
| `userAgent` | string | Hayır | Tarayıcı User-Agent bilgisi. Sonuçta `userAgent` varsa, token'ı gönderirken bu değeri kullanın (yalnızca TurnstileTask) |

`websiteKey` genellikle `0x` ile başlar. Nasıl bulunacağı için [Turnstile parametrelerini bulma](https://docs.yescaptcha.com/tr/guides/find-turnstile-parameters.md) sayfasına bakın.

### Sorun devam ederse: pageAction ve data

Çoğu durumda yalnızca `websiteURL` ve `websiteKey` yeterlidir; bu iki parametreye gerek yoktur. `websiteURL` ve `websiteKey` değerlerinin doğru olduğundan eminseniz ve görev yine de geçmiyorsa, sayfanın Turnstile’ı çağırırken `action` ve `cData` gönderip göndermediğine bakın (`turnstile.render` parametreleri veya doğrulama kutusu öğesindeki `data-action`, `data-cdata`). Gönderiyorsa aynen ekleyin:

-   `pageAction`: sayfadaki `action` değeri, örneğin `login`
-   `data`: sayfadaki `cData` değeri, örneğin `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"
  }
}
```

## İstek örneği

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);
```

`websiteURL` ve `websiteKey` değerlerini hedef sitenin değerleriyle değiştirin.

## Dönen sonuç

```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"
  }
}
```

| Alan | Tür | Açıklama |
| --- | --- | --- |
| `token` | string | Hedef siteye gönderilecek token. Tek kullanımlıktır; mümkün olan en kısa sürede gönderin |
| `userAgent` | string | Token'ı almak için kullanılan User-Agent. Token'ı gönderirken bu değeri kullanın; sizin gönderdiğinizden farklı olsa bile bu değer geçerlidir |

`token` değerini sayfadaki `cf-turnstile-response` alanına (veya hedef sitenin API’sinin istediği alana) yazıp gönderin; gönderim isteğinde User-Agent olarak dönen `userAgent` değerini kullanın.

İşlem sürerken `{"errorId": 0, "status": "processing"}` döner; 5 saniye sonra tekrar sorgulayın. Hata durumunda `errorCode` değerine göre işlem yapın; ayrıntılar için [Hata kodları](https://docs.yescaptcha.com/tr/api/errors.md) sayfasına bakın.

## Sık sorulan sorular

### Token ne kadar süre geçerlidir?

Tek kullanımlıktır; alır almaz göndermeniz önerilir (Turnstile token’ları genellikle birkaç dakika içinde sona erer, süreyi Cloudflare belirler).

### Gönderimden sonra site hâlâ kabul etmiyor

`websiteURL` değerinin doğrulama kutusunun göründüğü sayfa olduğundan ve `websiteKey` değerinin doğru olduğundan emin olun; gönderirken dönen `userAgent` değerini kullanın. Sayfa `action` ve `cData` gönderiyorsa bunları `pageAction` ve `data` olarak ekleyin; bkz. [Sorun devam ederse](#sorun-devam-ederse-pageaction-ve-data). Site IP adresini de kontrol ediyorsa `TurnstileTask` kullanın ve gönderimi aynı proxy üzerinden yapın.

## İlgili eğitimler

-   [CAPTCHA türünü belirleme](https://docs.yescaptcha.com/tr/guides/identify-captcha.md)
-   [Turnstile parametrelerini bulma](https://docs.yescaptcha.com/tr/guides/find-turnstile-parameters.md)
