# Cloudflare Turnstile

> YesCaptcha で Cloudflare Turnstile のトークンを取得します。TurnstileTaskProxyless、TurnstileTaskProxylessM1、独自プロキシを使う TurnstileTask のパラメーター、リクエスト例、返却結果と、Cloudflare チャレンジページとの違いを説明します。

Source: https://docs.yescaptcha.com/ja/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 タスクはトークン(`token`)を返します。これを対象サイトに送信すると検証を通過できます。`TurnstileTaskProxyless` は 1 タスクあたり 25 ポイント（約 $3.75 / 1k） で、非同期で結果を返します。まず `createTask` を呼び、その後 5 秒ごとに `getTaskResult` を呼びます。認識に失敗した場合やタイムアウトした場合は、自動で返金されます。

- POST `https://api.yescaptcha.com/createTask` (グローバルエンドポイント)
- POST `https://cn.yescaptcha.com/createTask` (中国エンドポイント)

リクエストボディは JSON で、`clientKey` で認証します。タスクを作成したエンドポイントと同じエンドポイントで結果を取得してください。

## 利用シーン

ページのフォームに Cloudflare の検証ウィジェット(「人間であることを確認します」)が埋め込まれており、ページが `challenges.cloudflare.com/turnstile` のスクリプトを読み込んでいる場合です。

ページ全体が Cloudflare に遮られ、「しばらくお待ちください…」「ブラウザを確認しています」と表示される場合は、Turnstile ではなく Cloudflare チャレンジページです。[Cloudflare チャレンジページ](https://docs.yescaptcha.com/ja/tasks/cloudflare-challenge.md)を使用してください。違いは[キャプチャの種類の見分け方](https://docs.yescaptcha.com/ja/guides/identify-captcha.md)を参照してください。

## タスクタイプと料金

| タスクタイプ | 価格 | 返却方式 | 備考 |
| --- | --- | --- | --- |
| `TurnstileTaskProxyless` | $3.75 / 1k; 25 ポイント/タスク · ¥25 / 1k | 非同期 |  |
| `TurnstileTaskProxylessM1` | $4.50 / 1k; 30 ポイント/タスク · ¥30 / 1k | 非同期 |  |
| `TurnstileTask` | $3.75 / 1k; 25 ポイント/タスク · ¥25 / 1k | 非同期 | プロキシ持ち込み |

米ドル価格は US$1 ≈ ¥6.67 での概算です。タスクはポイントで課金されます。

-   `TurnstileTaskProxyless` と `TurnstileTaskProxylessM1` はパラメーターが同じで、経路が異なります。お互いにバックアップとして使えます。
-   `TurnstileTask` は独自のプロキシでキャプチャを読み込みます。プロキシ関連のフィールドを渡す必要があります。

## リクエストパラメーター

| フィールド | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| `type` | string | はい | タスクタイプ。値はこのページの「タイプと料金」を参照してください |
| `websiteURL` | string | はい | キャプチャが表示されるページの完全な URL。キャプチャが表示されるサイトを指定し、キャプチャ提供元のドメインは指定しないでください |
| `websiteKey` | string | はい | Turnstile のサイトキー（sitekey）。通常は 0x で始まります |
| `pageAction` | string | いいえ | ページが Turnstile に渡す `action`（`turnstile.render` のオプション、またはウィジェット要素の `data-action`）。例：`login`。ほとんどの場合は不要です。タスクが失敗し続ける場合にのみ追加してください |
| `data` | string | いいえ | ページが Turnstile に渡す `cData`（`turnstile.render` のオプション、またはウィジェット要素の `data-cdata`）。例：`c0bd4b36-7419-4e18-83c6-378699f2a9a2`。ほとんどの場合は不要です。タスクが失敗し続ける場合にのみ追加してください |
| `proxyType` | string | 一部のタイプ | プロキシのプロトコル: `http`、`https`、`socks4`、`socks5`（TurnstileTask では必須） |
| `proxyAddress` | string | 一部のタイプ | プロキシの IP アドレスまたはホスト名。127.0.0.1 や 192.168.x.x のようなローカルアドレスやプライベートアドレスは、当社のサーバーから到達できないため使用できません（TurnstileTask では必須） |
| `proxyPort` | integer | 一部のタイプ | プロキシのポート（TurnstileTask では必須） |
| `proxyLogin` | string | いいえ | プロキシのユーザー名（プロキシが認証を必要とする場合）（TurnstileTask のみ） |
| `proxyPassword` | string | いいえ | プロキシのパスワード（プロキシが認証を必要とする場合）（TurnstileTask のみ） |
| `userAgent` | string | いいえ | ブラウザーの User-Agent。結果に `userAgent` が含まれている場合は、token を送信するときにその値を使用してください（TurnstileTask のみ） |

`websiteKey` は通常 `0x` で始まります。見つけ方は [Turnstile パラメーターの見つけ方](https://docs.yescaptcha.com/ja/guides/find-turnstile-parameters.md)を参照してください。

### どうしても通らない場合:pageAction と data

ほとんどの場合、`websiteURL` と `websiteKey` だけで十分で、この 2 つのパラメーターは不要です。`websiteURL` と `websiteKey` が正しいことを確認してもタスクが通らない場合は、ページが Turnstile を呼び出すときに `action` と `cData` を渡しているかを確認してください(`turnstile.render` のパラメーター、または検証ウィジェット要素の `data-action`、`data-cdata`)。渡している場合は、そのまま指定します。

-   `pageAction`:ページの `action` を指定します(例:`login`)
-   `data`:ページの `cData` を指定します(例:`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"
  }
}
```

## リクエスト例

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` と `websiteKey` は、対象サイトの値に置き換えてください。

## 返却結果

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

| フィールド | 型 | 説明 |
| --- | --- | --- |
| `token` | string | 対象サイトに送信するトークン。1 回限りの使用です。できるだけ早く送信してください |
| `userAgent` | string | トークンの取得に使用した User-Agent。トークンを送信する際はこの値を使用してください。送信した値と異なる場合もこちらが優先されます |

`token` をページの `cf-turnstile-response` フィールド(または対象サイトの API が要求するフィールド)に設定して送信します。送信リクエストの User-Agent には、返却された `userAgent` を使用してください。

処理中の場合は `{"errorId": 0, "status": "processing"}` が返るので、5 秒後に再度取得してください。エラーが発生した場合は `errorCode` に応じて対処してください。[エラーコード](https://docs.yescaptcha.com/ja/api/errors.md)を参照してください。

## よくある質問

### token の有効期間はどれくらいですか?

1 回限り有効です。取得後はできるだけ早く送信してください(Turnstile の token は通常数分以内に失効します。失効時間は Cloudflare が決定します)。

### 送信してもサイトで通過しません

`websiteURL` が検証ウィジェットの表示されるページであること、`websiteKey` が正しいことを確認し、送信時には返却された `userAgent` を使用してください。ページが `action` や `cData` を渡している場合は、`pageAction` と `data` として指定してください。上記の[どうしても通らない場合](#%E3%81%A9%E3%81%86%E3%81%97%E3%81%A6%E3%82%82%E9%80%9A%E3%82%89%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88pageaction-%E3%81%A8-data)を参照してください。サイトが IP も検査している場合は、`TurnstileTask` を使用し、送信時にも同じプロキシを経由してください。

## 関連チュートリアル

-   [キャプチャの種類の見分け方](https://docs.yescaptcha.com/ja/guides/identify-captcha.md)
-   [Turnstile パラメーターの見つけ方](https://docs.yescaptcha.com/ja/guides/find-turnstile-parameters.md)
