# reCAPTCHA v3

> YesCaptcha で reCAPTCHA v3(Enterprise 版を含む)の token を取得する方法。pageAction の指定方法、固定スコア 0.7・0.9 のタイプ、タスクタイプと料金、パラメータ、リクエスト例、返却結果を説明します。

Source: https://docs.yescaptcha.com/ja/tasks/recaptcha-v3/ · 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-v3/

reCAPTCHA v3 にはチェックボックスも画像もなく、ページがバックグラウンドで訪問者をスコアリングします。YesCaptcha は token(`gRecaptchaResponse`)を返すので、それを対象サイトに送信してください。`RecaptchaV3TaskProxyless` は 1 タスクあたり 20 ポイント（約 $3.00 / 1k） で、非同期で結果を返します。まず `createTask` を呼び、その後 5 秒ごとに `getTaskResult` を呼びます。認識に失敗した場合やタイムアウトした場合は、自動的に返金されます。

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

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

## 利用シーン

-   ページのソースに `grecaptcha.execute(...)` がある、または `recaptcha/api.js?render=サイトキー` を読み込んでいる場合: 通常版の v3 です。
-   `grecaptcha.enterprise.execute(...)` を呼んでいる、または `recaptcha/enterprise.js` を読み込んでいる場合: Enterprise 版の v3 です。`RecaptchaV3EnterpriseTask` または `RecaptchaV3EnterpriseTaskM1` を使います。

判別方法は [キャプチャの種類を判別する](https://docs.yescaptcha.com/ja/guides/identify-captcha.md) を参照してください。

## タイプと料金

| タスクタイプ | 価格 | 返却方式 | 備考 |
| --- | --- | --- | --- |
| `RecaptchaV3TaskProxyless` | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 |  |
| `RecaptchaV3TaskProxylessM1` | $3.75 / 1k; 25 ポイント/タスク · ¥25 / 1k | 非同期 |  |
| `RecaptchaV3TaskProxylessM1S7` | $4.50 / 1k; 30 ポイント/タスク · ¥30 / 1k | 非同期 | スコア 0.7 を要求します。追加のパラメータは不要です |
| `RecaptchaV3TaskProxylessM1S9` | $5.25 / 1k; 35 ポイント/タスク · ¥35 / 1k | 非同期 | スコア 0.9 を要求します。追加のパラメータは不要です |
| `RecaptchaV3EnterpriseTask` | $3.00 / 1k; 20 ポイント/タスク · ¥20 / 1k | 非同期 |  |
| `RecaptchaV3EnterpriseTaskM1` | $3.75 / 1k; 25 ポイント/タスク · ¥25 / 1k | 非同期 |  |

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

-   `RecaptchaV3TaskProxyless` と `RecaptchaV3TaskProxylessM1` はパラメータが同じで、経路が異なります。互いのバックアップとして使えます。
-   対象サイトが高いスコアを要求する場合は、固定スコアの `RecaptchaV3TaskProxylessM1S7`(0.7)または `RecaptchaV3TaskProxylessM1S9`(0.9)を使います。追加のパラメータは不要です。

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

| フィールド | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| `type` | string | はい | タスクタイプ。値はこのページの「タイプと料金」を参照してください |
| `websiteURL` | string | はい | キャプチャが表示されるページの完全な URL。キャプチャが表示されるサイトを指定し、キャプチャ提供元のドメインは指定しないでください |
| `websiteKey` | string | はい | サイトキー（sitekey）。ページのソースまたはネットワークリクエストから確認できます。通常は変わりません |
| `pageAction` | string | いいえ | reCAPTCHA v3 の action。ページが `grecaptcha.execute` に渡す値と一致させる必要があります。一致しないと token が無効になる場合があります |

`pageAction` は、ページが `grecaptcha.execute(サイトキー, {action: '...'})` を呼ぶ際に渡す `action` と一致させる必要があります。誤っていると、token がサイトに拒否されることがあります。確認方法は [reCAPTCHA のパラメータを調べる](https://docs.yescaptcha.com/ja/guides/find-recaptcha-parameters.md) を参照してください。

## リクエスト例

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

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "RecaptchaV3TaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "pageAction": "login"
  }
}
```

**curl**

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

# 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": "RecaptchaV3TaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "pageAction": "login",
})
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: "RecaptchaV3TaskProxyless",
  websiteURL: "https://example.com/login",
  websiteKey: "SITE_KEY_OF_THE_PAGE",
  pageAction: "login",
});
console.log(solution.gRecaptchaResponse);
```

`websiteURL`、`websiteKey`、`pageAction` は、対象サイトの値に置き換えてください。

## 返却結果

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

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

処理中の場合は `{"errorId": 0, "status": "processing"}` が返るので、5 秒後に再度取得してください。エラーが返った場合は `errorCode` に従って対処します。詳しくは [エラーコード](https://docs.yescaptcha.com/ja/api/errors.md) を参照してください。取得した token の送信方法は [token で reCAPTCHA を完了する](https://docs.yescaptcha.com/ja/guides/submit-recaptcha-token.md) を参照してください。

## よくある質問

### token がサイトに受け入れられないことがあるのはなぜですか?

v3 では、対象サイトがスコアに基づいて判定します。サイト側のしきい値はいつでも変更できるため、すべての token が通るわけではありません。`pageAction` が正しいことを確認してください。サイトが高いスコアを要求する場合は `M1S7` や `M1S9` を試すか、同系統の他のタイプと比較してください。

### Enterprise 版の v3 はどう指定しますか?

通常版と同様に `websiteURL`、`websiteKey`、`pageAction` を指定し、タイプを `RecaptchaV3EnterpriseTask` または `RecaptchaV3EnterpriseTaskM1` に変更します。

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

1 回限りの使い捨てで、有効期間は約 120 秒です。60 秒以内に送信することをおすすめします。

## 関連チュートリアル

-   [キャプチャの種類を判別する](https://docs.yescaptcha.com/ja/guides/identify-captcha.md)
-   [reCAPTCHA のパラメータを調べる](https://docs.yescaptcha.com/ja/guides/find-recaptcha-parameters.md)(`pageAction` の調べ方を含む)
-   [token で reCAPTCHA を完了する](https://docs.yescaptcha.com/ja/guides/submit-recaptcha-token.md)
