# reCAPTCHA v2

> YesCaptcha で reCAPTCHA v2(通常版・非表示版・Enterprise 版)の token を取得する方法。タスクタイプと料金、リクエストパラメータ、curl/Python/Node.js のサンプル、返却結果を説明します。

Source: https://docs.yescaptcha.com/ja/tasks/recaptcha-v2/ · Last verified: 2026-10-15

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

reCAPTCHA v2 のタスクは token(`gRecaptchaResponse`)を返します。この token を対象サイトに送信すれば認証を通過でき、画像をクリックする必要はありません。最もよく使う `NoCaptchaTaskProxyless` は 1 タスクあたり 15 ポイント（約 $2.25 / 1k） で、非同期で結果を返します。まず `createTask` でタスクを作成し、その後 5 秒ごとに `getTaskResult` を呼び出して結果を取得します。認識に失敗したタスクやタイムアウトしたタスクは自動的に返金されます。

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

リクエストボディは JSON で、`clientKey`(ダッシュボードの [yescaptcha.com](https://yescaptcha.com/) からコピーできます)で認証します。タスクを作成したエンドポイントと同じエンドポイントで結果を取得してください。

## 利用シーン

-   ページに「ロボットではありません」(I’m not a robot)のチェックボックスがある場合: 通常版。
-   チェックボックスがなく、送信ボタンをクリックしたあとに画像の問題が表示される場合: 非表示版。`"isInvisible": true` を追加します。
-   ページが `recaptcha/enterprise.js` を読み込んでいる、またはリクエスト URL に `enterprise` が含まれている場合: Enterprise 版。名前に `Enterprise` が付くタイプを使います。

どの種類か分からない場合は、[キャプチャの種類を判別する](https://docs.yescaptcha.com/ja/guides/identify-captcha.md)を参照してください。token 方式の通過率が思わしくない場合は、[reCAPTCHA v2 画像認識](https://docs.yescaptcha.com/ja/tasks/recaptcha-classification.md)に切り替えられます。API がクリックすべき画像を返すので、ブラウザ上で自分でクリックします。

## タイプと料金

| タスクタイプ | 価格 | 返却方式 | 備考 |
| --- | --- | --- | --- |
| `NoCaptchaTaskProxyless` | $2.25 / 1k; 15 ポイント/タスク · ¥15 / 1k | 非同期 |  |
| `RecaptchaV2TaskProxyless` | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 | NoCaptchaTaskProxyless とパラメータは同じで、経路が異なります。どちらか一方をバックアップとして使えます |
| `NoCaptchaTask` | $2.25 / 1k; 15 ポイント/タスク · ¥15 / 1k | 非同期 | プロキシ持ち込み |
| `RecaptchaV2EnterpriseTaskProxyless` | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 |  |
| `RecaptchaV2EnterpriseTask` | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 | プロキシ持ち込み |

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

-   `NoCaptchaTaskProxyless` と `RecaptchaV2TaskProxyless` はパラメータが同じで、経路が異なります。一方の通過率が思わしくない場合は、もう一方を試してください。
-   名前に `Proxyless` が付かないタイプ(`NoCaptchaTask`、`RecaptchaV2EnterpriseTask`)は、お客様自身のプロキシでキャプチャを読み込みます。`proxyType`、`proxyAddress`、`proxyPort` などのフィールドを渡す必要があります。対象サイトがアクセス元 IP を制限している場合に使います。

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

`createTask` の `task` オブジェクト:

| フィールド | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| `type` | string | はい | タスクタイプ。値はこのページの「タイプと料金」を参照してください |
| `websiteURL` | string | はい | キャプチャが表示されるページの完全な URL。キャプチャが表示されるサイトを指定し、キャプチャ提供元のドメインは指定しないでください |
| `websiteKey` | string | はい | サイトキー（sitekey）。ページのソースまたはネットワークリクエストから確認できます。通常は変わりません |
| `isInvisible` | boolean | いいえ | インビジブル版の場合は true を指定します。通常版では指定しません |
| `proxyType` | string | 一部のタイプ | プロキシのプロトコル: `http`、`https`、`socks4`、`socks5`（NoCaptchaTask、RecaptchaV2EnterpriseTask では必須） |
| `proxyAddress` | string | 一部のタイプ | プロキシの IP アドレスまたはホスト名。127.0.0.1 や 192.168.x.x のようなローカルアドレスやプライベートアドレスは、当社のサーバーから到達できないため使用できません（NoCaptchaTask、RecaptchaV2EnterpriseTask では必須） |
| `proxyPort` | integer | 一部のタイプ | プロキシのポート（NoCaptchaTask、RecaptchaV2EnterpriseTask では必須） |
| `proxyLogin` | string | いいえ | プロキシのユーザー名（プロキシが認証を必要とする場合）（NoCaptchaTask、RecaptchaV2EnterpriseTask のみ） |
| `proxyPassword` | string | いいえ | プロキシのパスワード（プロキシが認証を必要とする場合）（NoCaptchaTask、RecaptchaV2EnterpriseTask のみ） |
| `userAgent` | string | いいえ | ブラウザーの User-Agent。結果に `userAgent` が含まれている場合は、token を送信するときにその値を使用してください（NoCaptchaTask、RecaptchaV2EnterpriseTask のみ） |
| `enterprisePayload` | object | いいえ | エンタープライズ版の追加パラメータ。例: reCAPTCHA Enterprise の `s` の値 `{"s": "..."}`。ページで使われていない場合は指定しません（RecaptchaV2EnterpriseTaskProxyless、RecaptchaV2EnterpriseTask のみ） |

`websiteURL` と `websiteKey` の調べ方は、[reCAPTCHA のパラメータを調べる](https://docs.yescaptcha.com/ja/guides/find-recaptcha-parameters.md)を参照してください。

## リクエスト例

Google 公式のデモページを例にします:

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

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }
}
```

タスクの作成、5 秒ごとの結果取得、token の出力までを含む完全なコードです。実行前に clientKey を環境変数 `YESCAPTCHA_CLIENT_KEY` に設定してください:

**curl**

```bash
curl -s https://api.yescaptcha.com/createTask \
  -H 'Content-Type: application/json' \
  -d '{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }
}'

# 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": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
})
print(solution["gRecaptchaResponse"])
```

**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: "NoCaptchaTaskProxyless",
  websiteURL: "https://www.google.com/recaptcha/api2/demo",
  websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
});
console.log(solution.gRecaptchaResponse);
```

Enterprise 版で、ページが reCAPTCHA に `s` 値を渡している場合は、`enterprisePayload` に指定します:

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

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "RecaptchaV2EnterpriseTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "enterprisePayload": {
      "s": "S_VALUE_FROM_THE_PAGE"
    }
  }
}
```

自分のプロキシを使う場合:

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

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTask",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "proxyType": "http",
    "proxyAddress": "proxy.example.com",
    "proxyPort": 8080,
    "proxyLogin": "user",
    "proxyPassword": "pass"
  }
}
```

## 返却結果

`createTask` はタスク ID を返します:

```json
{
  "errorId": 0,
  "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
```

このタスク ID で `getTaskResult` を呼び出します。処理中は `{"errorId": 0, "status": "processing"}` が返るので、5 秒後に再度取得してください。完了すると次のように返ります:

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..."
  }
}
```

| フィールド | 型 | 説明 |
| --- | --- | --- |
| `gRecaptchaResponse` | string | 対象サイトに送信するトークン。1 回限りの使用で、有効期間は約 120 秒です。60 秒以内に使用してください |

タスクの処理時間は最長で約 110 秒です。タイムアウトすると `ERROR_TASK_TIMEOUT` が返り、ポイントが返金されます。エラー時は `errorId` が 1 になるので、`errorCode` に応じて処理してください。詳しくは[エラーコード](https://docs.yescaptcha.com/ja/api/errors.md)を参照してください。token を取得したあとの送信方法は、[token で reCAPTCHA を完了する](https://docs.yescaptcha.com/ja/guides/submit-recaptcha-token.md)を参照してください。

> **ヒント:** token は 1 回限り使用でき、有効期間は約 120 秒です。取得後 60 秒以内に送信することをおすすめします。

## よくある質問

### 同じサイトなのに、token が通ったり通らなかったりするのはなぜですか?

通過できるかどうかは対象サイトが判定します。サイトは認証ごとにスコアを付けて基準値を設けており、この基準値はいつでも変更される可能性があります。そのため通過率はサイトによって異なり、すべての token が通るわけではありません。同種の別のタスクタイプで通過率を比較するか、[画像認識](https://docs.yescaptcha.com/ja/tasks/recaptcha-classification.md)に切り替えてください。

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

1 回限り使用でき、有効期間は約 120 秒です。取得後 60 秒以内の送信をおすすめします。有効期間は Google が決めています。

### 認識に失敗した場合も課金されますか?

課金されません。`ERROR_CAPTCHA_UNSOLVABLE` を返したタスクやタイムアウトしたタスクは自動的に返金されます。詳しくは[課金と返金](https://docs.yescaptcha.com/ja/getting-started/billing.md)を参照してください。

## 関連チュートリアル

-   [キャプチャの種類を判別する](https://docs.yescaptcha.com/ja/guides/identify-captcha.md)
-   [reCAPTCHA のパラメータを調べる](https://docs.yescaptcha.com/ja/guides/find-recaptcha-parameters.md)
-   [token で reCAPTCHA を完了する](https://docs.yescaptcha.com/ja/guides/submit-recaptcha-token.md)
-   [reCAPTCHA v2 画像認識によるクリックのシミュレーション(Selenium)](https://docs.yescaptcha.com/ja/guides/recaptcha-click-selenium.md)
