Developer platform

API documentation

Create CAPTCHA tasks, poll results and manage integrations through a compact JSON API.

Base URL https://solvecaptcha.net/api
JSON requests Bearer authentication Poll every 2 seconds
Quick start

One API, consistent task lifecycle

Authenticate with your API key, submit a task, then request its result until the response is ready.

  1. 01Create a task
  2. 02Store the task ID
  3. 03Poll for the result
Request limits
account-level API throughput and upgrade guidance

Each account has a default combined limit of 10 requests per second across createTask, getTaskResult and getBalance. Administrators may assign a different account limit when additional throughput is approved.

When the limit is exceeded

The API returns HTTP 429 Too Many Requests with the error code ERROR_TOO_MANY_REQUESTS. Respect the Retry-After response header before retrying. For task results, keep a polling interval of at least 2 seconds and use backoff if a 429 response is returned.

Requesting a higher limit

If your integration requires more than 10 requests per second, contact our support team before increasing traffic. Include your account email, expected requests per second, the API methods used and your expected peak hours so the team can review capacity. Contact: admin@solvecaptcha.net.

Unlimited accounts

An administrator can remove the per-account application limit for approved use cases. This does not remove infrastructure safeguards, task-result polling protection or supplier limits.

Error example

HTTP 429
{
  "error_id": 1,
  "error_code": "ERROR_TOO_MANY_REQUESTS",
  "error_description": "This account is limited to 10 requests per second.",
  "limit_per_second": 10
}
createTask
create a captcha task

Address: https://solvecaptcha.net/api/createTask
Method: POST
Content-type: application-json

Request properties

Property Type Required Purpose
YOUR_API_KEY String Yes
task Object Yes

Request example

CURL
          
            curl
              -H "Accept: application/json" \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer YOUR_API_KEY" \
              -X POST -d 
                '{
                "task":
                    {
                        "method":"RecaptchaV2Task",
                        "page_url":"https://websitehub.com/recaptcha/test.php",
                        "site_key":"6LfI9IsUAAAAAKuvopU0hfY8pWADfR_XXXXXXX"
                    },
                "affiliate_id":0
                }'
               https://solvecaptcha.net/api/createTask
            
          


Response structure

Property Type Purpose
error_id Integer Error identifier.
0 - no errors, the operation completed successfully.
Otherwise - error identifier. Error code and short description transferred in error_code and error_description properties.
error_code String
error_description String Short description of the error
task_id Integer

Response example

getTaskResult
request a task result

Address: https://solvecaptcha.net/api/getTaskResult
Method: POST
Content-type: application-json

Request properties

Property Type Required Purpose
YOUR_API_KEY String Yes
task_id Integer Yes

Request example

CURL
          
            curl
              -H "Accept: application/json" \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer YOUR_API_KEY" \
              -X POST -d 
                '{
                    "task_id":12345
                }'
               https://solvecaptcha.net/api/getTaskResult
            
          


Response structure

Property Type Purpose
error_id Integer Error identifier.
0 - no errors, the operation completed successfully.
Otherwise - error identifier. Error code and short description transferred in error_code and error_description properties.
error_code String
error_description String Short description of the error
task_id Integer

Response example

Response example

getBalance
retrieve account balance

Address: https://solvecaptcha.net/api/getBalance
Method: GET
Content-type: application-json

Request properties

Property Type Required Purpose
YOUR_API_KEY String Yes

Request example

CURL
          
            curl 
              -H "Accept: application/json" \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer YOUR_API_KEY" \
              https://solvecaptcha.net/api/getBalance
            
            


Response structure

Property Type Purpose
error_id Integer Error identifier.
0 - no errors, the operation completed successfully.
Otherwise - error identifier. Error code and short description transferred in error_code and error_description properties.
error_code String
error_description String Short description of the error
task_id Integer

Response example

Error Types
list of API Errors
Code Description
ERROR_KEY_DOES_NOT_EXIST Account authorization key not found in the system or has incorrect format (length is not )
ERROR_ZERO_CAPTCHA_FILESIZE The size of the captcha you are uploading is less than 100 bytes
ERROR_TOO_BIG_CAPTCHA_FILESIZE The size of the captcha you are uploading is more than 50,000 bytes
ERROR_ZERO_BALANCE Account has zero balance
ERROR_IP_NOT_ALLOWED Request with current account key is not allowed from your IP
ERROR_CAPTCHA_UNSOLVABLE This type of captchas is not supported by the service or the image does not contain an answer, perhaps it is too noisy. It could also mean that the image is corrupted or was incorrectly rendered
ERROR_NO_SUCH_CAPCHA_ID, WRONG_CAPTCHA_ID The captcha that you are requesting was not found. Make sure you are requesting a status update only within 5 minutes of uploading
CAPTCHA_NOT_READY The captcha has not yet been solved
ERROR_IP_BANNED You have exceeded the limit of requests with the wrong api key, check the correctness of your api key in the control panel and after some time, try again
ERROR_NO_SUCH_METHOD This method is not supported or empty
ERROR_TOO_MUCH_REQUESTS You have exceeded the limit of requests to receive an answer for one task. Try to request the result of the task no more than 1 time in 2 seconds
RecaptchaV2TaskProxyless
Solve reCAPTCHA V2 with built-in or customer proxy.
reCAPTCHA V2RecaptchaV2TaskProxyless
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Elements / Sources
<div class="g-recaptcha" data-sitekey="6Lc...Key"></div>\ngrecaptcha.execute("6Lc...Key", { action: "login" })

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Inspect the CAPTCHA containerRight-click the widget and choose Inspect. Copy data-sitekey from the <div class="g-recaptcha"> element; copy data-s too when the page sets it.
  3. Or read the sitekey from the networkIn Network, filter for recaptcha and open the anchor request: its k query parameter is the sitekey.
  4. Find the action for score-based variantsSearch Sources for grecaptcha.execute; the action string passed there is page_action.
  5. Note whether the widget is invisibleAn element carrying size="invisible" means you should send is_invisible: true.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// RecaptchaV2TaskProxyless — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  const el = document.querySelector('.g-recaptcha[data-sitekey], [data-sitekey]');
  const task = { method: "RecaptchaV2TaskProxyless", page_url: location.href, site_key: el?.getAttribute('data-sitekey') || null };

  if (el?.getAttribute('data-s')) task.data_s = el.getAttribute('data-s');
  if (el?.getAttribute('data-size') === 'invisible') task.is_invisible = true;

  // Fall back to the anchor request, which always carries k=<sitekey>.
  if (!task.site_key) {
    const anchor = performance.getEntriesByType('resource')
      .map((entry) => entry.name)
      .find((name) => name.includes('/recaptcha/') && name.includes('k='));
    if (anchor) task.site_key = new URL(anchor).searchParams.get('k');
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

data_s Fresh value

data-s / rqdata

Elements → data-s, or initialization payload

This value can be short-lived; capture it for each rendered challenge.

is_invisible Usually stable

Invisible widget

Elements → size="invisible"

Set true when the widget renders no checkbox and validates silently.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

cookies Fresh value

Cookies

Application → Cookies / Network headers

Send only cookies required by the current CAPTCHA flow.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: RecaptchaV2Task

Compatibility alias: this historical method remains accepted and is mapped internally to RecaptchaV2Task.

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesRecaptchaV2TaskProxyless
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
data_sNoOptional task-specific value.
is_invisibleNoOptional task-specific value.
user_agentNoOptional task-specific value.
cookiesNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "RecaptchaV2TaskProxyless",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
RecaptchaV2Task
Solve reCAPTCHA V2 with built-in or customer proxy.
reCAPTCHA V2RecaptchaV2Task
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Elements / Sources
<div class="g-recaptcha" data-sitekey="6Lc...Key"></div>\ngrecaptcha.execute("6Lc...Key", { action: "login" })

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Inspect the CAPTCHA containerRight-click the widget and choose Inspect. Copy data-sitekey from the <div class="g-recaptcha"> element; copy data-s too when the page sets it.
  3. Or read the sitekey from the networkIn Network, filter for recaptcha and open the anchor request: its k query parameter is the sitekey.
  4. Find the action for score-based variantsSearch Sources for grecaptcha.execute; the action string passed there is page_action.
  5. Note whether the widget is invisibleAn element carrying size="invisible" means you should send is_invisible: true.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// RecaptchaV2Task — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  const el = document.querySelector('.g-recaptcha[data-sitekey], [data-sitekey]');
  const task = { method: "RecaptchaV2Task", page_url: location.href, site_key: el?.getAttribute('data-sitekey') || null };

  if (el?.getAttribute('data-s')) task.data_s = el.getAttribute('data-s');
  if (el?.getAttribute('data-size') === 'invisible') task.is_invisible = true;

  // Fall back to the anchor request, which always carries k=<sitekey>.
  if (!task.site_key) {
    const anchor = performance.getEntriesByType('resource')
      .map((entry) => entry.name)
      .find((name) => name.includes('/recaptcha/') && name.includes('k='));
    if (anchor) task.site_key = new URL(anchor).searchParams.get('k');
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

data_s Fresh value

data-s / rqdata

Elements → data-s, or initialization payload

This value can be short-lived; capture it for each rendered challenge.

is_invisible Usually stable

Invisible widget

Elements → size="invisible"

Set true when the widget renders no checkbox and validates silently.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

cookies Fresh value

Cookies

Application → Cookies / Network headers

Send only cookies required by the current CAPTCHA flow.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: RecaptchaV2Task

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesRecaptchaV2Task
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
data_sNoOptional task-specific value.
is_invisibleNoOptional task-specific value.
user_agentNoOptional task-specific value.
cookiesNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "RecaptchaV2Task",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
RecaptchaV3TaskProxyless
Solve score-based reCAPTCHA V3.
reCAPTCHA V3RecaptchaV3TaskProxyless
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Elements / Sources
<div class="g-recaptcha" data-sitekey="6Lc...Key"></div>\ngrecaptcha.execute("6Lc...Key", { action: "login" })

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Inspect the CAPTCHA containerRight-click the widget and choose Inspect. Copy data-sitekey from the <div class="g-recaptcha"> element; copy data-s too when the page sets it.
  3. Or read the sitekey from the networkIn Network, filter for recaptcha and open the anchor request: its k query parameter is the sitekey.
  4. Find the action for score-based variantsSearch Sources for grecaptcha.execute; the action string passed there is page_action.
  5. Note whether the widget is invisibleAn element carrying size="invisible" means you should send is_invisible: true.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// RecaptchaV3TaskProxyless — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  const el = document.querySelector('.g-recaptcha[data-sitekey], [data-sitekey]');
  const task = { method: "RecaptchaV3TaskProxyless", page_url: location.href, site_key: el?.getAttribute('data-sitekey') || null };

  if (el?.getAttribute('data-s')) task.data_s = el.getAttribute('data-s');
  if (el?.getAttribute('data-size') === 'invisible') task.is_invisible = true;

  // Fall back to the anchor request, which always carries k=<sitekey>.
  if (!task.site_key) {
    const anchor = performance.getEntriesByType('resource')
      .map((entry) => entry.name)
      .find((name) => name.includes('/recaptcha/') && name.includes('k='));
    if (anchor) task.site_key = new URL(anchor).searchParams.get('k');
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

min_score Usually stable

Minimum score

Target-site scoring policy

Request 0.3, 0.7 or 0.9 depending on how strict the protected action is.

page_action Usually stable

Page action

Sources search → grecaptcha.execute, or turnstile.render

Copy the action string used by the page, for example login, checkout or managed.

is_enterprise Usually stable

Enterprise mode

Sources → grecaptcha.enterprise

Set true when the page loads the enterprise reCAPTCHA build instead of the standard one.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: RecaptchaV3TaskProxyless

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesRecaptchaV3TaskProxyless
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
min_scoreNoOptional task-specific value.
page_actionNoOptional task-specific value.
is_enterpriseNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "RecaptchaV3TaskProxyless",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
FunCaptchaTask
Solve Arkose Labs FunCaptcha.
FunCaptchaFunCaptchaTask
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Network
https://client-api.arkoselabs.com/fc/gc/?token=...|pk=PUBLIC_KEY|...

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Open DevTools before the widget loadsPress F12, switch to the Network tab and reload so the first requests are captured.
  3. Read the public keyFind the Arkose request to /fc/gc/ or the widget iframe URL; its pk parameter is the value to send as site_key.
  4. Note the service subdomainThe host serving that request is sub_domain when it differs from the Arkose default.
  5. Copy blob data when presentSome integrations add a blob or rqdata value; send it as data.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// FunCaptchaTask — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  const task = { method: "FunCaptchaTask", page_url: location.href };
  const arkose = performance.getEntriesByType('resource')
    .map((entry) => entry.name)
    .find((name) => name.includes('arkoselabs') && name.includes('pk='));

  if (arkose) {
    const url = new URL(arkose);
    task.site_key = url.searchParams.get('pk');
    task.sub_domain = url.host;
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

data Fresh value

Challenge data

Widget callback or initialization object

For Cloudflare this is commonly cData; for other types inspect the provider-specific payload.

data_s Fresh value

data-s / rqdata

Elements → data-s, or initialization payload

This value can be short-lived; capture it for each rendered challenge.

sub_domain Usually stable

FunCaptcha API subdomain

Widget iframe hostname / Network

Copy the Arkose service hostname used by the page.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

cookies Fresh value

Cookies

Application → Cookies / Network headers

Send only cookies required by the current CAPTCHA flow.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: FunCaptchaTask

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Customer proxy strongly recommended. The upstream provider documents a proxy as mandatory for this type. Requests without proxy_type, proxy_address and proxy_port are accepted but frequently fail upstream.

Request properties

PropertyRequiredPurpose
methodYesFunCaptchaTask
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
dataNoOptional task-specific value.
data_sNoOptional task-specific value.
sub_domainNoOptional task-specific value.
user_agentNoOptional task-specific value.
cookiesNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "FunCaptchaTask",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
FunCaptchaTaskProxyless
Solve Arkose Labs FunCaptcha.
FunCaptchaFunCaptchaTaskProxyless
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Network
https://client-api.arkoselabs.com/fc/gc/?token=...|pk=PUBLIC_KEY|...

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Open DevTools before the widget loadsPress F12, switch to the Network tab and reload so the first requests are captured.
  3. Read the public keyFind the Arkose request to /fc/gc/ or the widget iframe URL; its pk parameter is the value to send as site_key.
  4. Note the service subdomainThe host serving that request is sub_domain when it differs from the Arkose default.
  5. Copy blob data when presentSome integrations add a blob or rqdata value; send it as data.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// FunCaptchaTaskProxyless — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  const task = { method: "FunCaptchaTaskProxyless", page_url: location.href };
  const arkose = performance.getEntriesByType('resource')
    .map((entry) => entry.name)
    .find((name) => name.includes('arkoselabs') && name.includes('pk='));

  if (arkose) {
    const url = new URL(arkose);
    task.site_key = url.searchParams.get('pk');
    task.sub_domain = url.host;
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

data Fresh value

Challenge data

Widget callback or initialization object

For Cloudflare this is commonly cData; for other types inspect the provider-specific payload.

data_s Fresh value

data-s / rqdata

Elements → data-s, or initialization payload

This value can be short-lived; capture it for each rendered challenge.

sub_domain Usually stable

FunCaptcha API subdomain

Widget iframe hostname / Network

Copy the Arkose service hostname used by the page.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

cookies Fresh value

Cookies

Application → Cookies / Network headers

Send only cookies required by the current CAPTCHA flow.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: FunCaptchaTask

Compatibility alias: this historical method remains accepted and is mapped internally to FunCaptchaTask.

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Customer proxy strongly recommended. The upstream provider documents a proxy as mandatory for this type. Requests without proxy_type, proxy_address and proxy_port are accepted but frequently fail upstream.

Request properties

PropertyRequiredPurpose
methodYesFunCaptchaTaskProxyless
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
dataNoOptional task-specific value.
data_sNoOptional task-specific value.
sub_domainNoOptional task-specific value.
user_agentNoOptional task-specific value.
cookiesNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "FunCaptchaTaskProxyless",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
GeeTestTask
Solve GeeTest V3 or V4 using one stable public contract.
GeeTest V3 / V4GeeTestTask
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Network / Sources
initGeetest({ gt: "GT_KEY", challenge: "FRESH_CHALLENGE" })\n/load?captcha_id=CAPTCHA_ID&risk_type=slide

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Open DevTools before the widget loadsPress F12, switch to the Network tab and reload so the first requests are captured.
  3. Find the bootstrap requestFilter for load or captcha and look at responses from the target site itself: they carry gt and, for V3, challenge.
  4. Take challenge before the widget initialisesOnce api.geetest.com/gettype.php has fired, that challenge is spent. Capture it from the site response, or from the get.php / ajax.php query string while blocking that request.
  5. Identify the versionA captcha_id in the initialisation means V4: send it as gt with version: 4 and omit challenge.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// GeeTestTask — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  // Read the bootstrap request the site made before GeeTest started.
  const task = { method: "GeeTestTask", page_url: location.href };
  const hit = performance.getEntriesByType('resource')
    .map((entry) => entry.name)
    .find((name) => name.includes('gt=') && name.includes('challenge='));

  if (hit) {
    const query = new URL(hit).searchParams;
    task.gt = query.get('gt');
    task.challenge = query.get('challenge');
    task.version = 3;
  } else {
    console.warn('No gt/challenge seen yet. Reload with the Network tab open, or use the Playwright collector which blocks the GeeTest request before it spends the challenge.');
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

gt Usually stable

GeeTest ID

Network → load/gettype, or initGeetest()

For V3 copy gt. For V4 copy captcha_id and send it as gt.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

challenge Fresh value

GeeTest challenge

Target-site bootstrap response before GeeTest initializes

Capture a fresh value before the widget sends gettype/load requests.

version Usually stable

CAPTCHA version

Loaded script and Network request shape

Use 3 for gt + challenge; use 4 when the integration exposes captcha_id.

api_subdomain Usually stable

API subdomain

Widget requests in Network

Use the hostname contacted by the widget when it differs from the provider default.

get_lib Usually stable

Widget library URL

Network → JavaScript

Copy the script URL used by this CAPTCHA instance.

init_parameters Fresh value

Initialization parameters

Network → load payload / widget initialization object

Copy required V4 values such as riskType without renaming nested keys.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: GeeTestTask

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Customer proxy required. Provide proxy_type, proxy_address and proxy_port; credentials are optional when the proxy does not require authentication.

Request properties

PropertyRequiredPurpose
methodYesGeeTestTask
page_urlYes Value extracted from the target CAPTCHA page.
gtYes Value extracted from the target CAPTCHA page.
site_keyNoOptional task-specific value.
challengeNoOptional task-specific value.
versionNoOptional task-specific value.
api_subdomainNoOptional task-specific value.
get_libNoOptional task-specific value.
init_parametersNoOptional task-specific value.
user_agentNoOptional task-specific value.

GeeTest versions: version: 3 requires challenge. For version: 4, omit challenge and optionally send init_parameters. The public response preserves GeeTest solution fields such as captcha_output, lot_number, pass_token and gen_time.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "GeeTestTask",
        "page_url": "PAGE_URL",
        "gt": "GT",
        "version": 4,
        "init_parameters": {
            "riskType": "slide"
        },
        "proxy_type": "http",
        "proxy_address": "192.0.2.10",
        "proxy_port": 8080
    }
}
GeeTestTaskProxyless
Solve GeeTest V3 or V4 using one stable public contract.
GeeTest V3 / V4GeeTestTaskProxyless
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Network / Sources
initGeetest({ gt: "GT_KEY", challenge: "FRESH_CHALLENGE" })\n/load?captcha_id=CAPTCHA_ID&risk_type=slide

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Open DevTools before the widget loadsPress F12, switch to the Network tab and reload so the first requests are captured.
  3. Find the bootstrap requestFilter for load or captcha and look at responses from the target site itself: they carry gt and, for V3, challenge.
  4. Take challenge before the widget initialisesOnce api.geetest.com/gettype.php has fired, that challenge is spent. Capture it from the site response, or from the get.php / ajax.php query string while blocking that request.
  5. Identify the versionA captcha_id in the initialisation means V4: send it as gt with version: 4 and omit challenge.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// GeeTestTaskProxyless — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  // Read the bootstrap request the site made before GeeTest started.
  const task = { method: "GeeTestTaskProxyless", page_url: location.href };
  const hit = performance.getEntriesByType('resource')
    .map((entry) => entry.name)
    .find((name) => name.includes('gt=') && name.includes('challenge='));

  if (hit) {
    const query = new URL(hit).searchParams;
    task.gt = query.get('gt');
    task.challenge = query.get('challenge');
    task.version = 3;
  } else {
    console.warn('No gt/challenge seen yet. Reload with the Network tab open, or use the Playwright collector which blocks the GeeTest request before it spends the challenge.');
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

gt Usually stable

GeeTest ID

Network → load/gettype, or initGeetest()

For V3 copy gt. For V4 copy captcha_id and send it as gt.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

challenge Fresh value

GeeTest challenge

Target-site bootstrap response before GeeTest initializes

Capture a fresh value before the widget sends gettype/load requests.

version Usually stable

CAPTCHA version

Loaded script and Network request shape

Use 3 for gt + challenge; use 4 when the integration exposes captcha_id.

api_subdomain Usually stable

API subdomain

Widget requests in Network

Use the hostname contacted by the widget when it differs from the provider default.

get_lib Usually stable

Widget library URL

Network → JavaScript

Copy the script URL used by this CAPTCHA instance.

init_parameters Fresh value

Initialization parameters

Network → load payload / widget initialization object

Copy required V4 values such as riskType without renaming nested keys.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: GeeTestTask

Compatibility alias: this historical method remains accepted and is mapped internally to GeeTestTask.

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesGeeTestTaskProxyless
page_urlYes Value extracted from the target CAPTCHA page.
gtYes Value extracted from the target CAPTCHA page.
site_keyNoOptional task-specific value.
challengeNoOptional task-specific value.
versionNoOptional task-specific value.
api_subdomainNoOptional task-specific value.
get_libNoOptional task-specific value.
init_parametersNoOptional task-specific value.
user_agentNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

GeeTest versions: version: 3 requires challenge. For version: 4, omit challenge and optionally send init_parameters. The public response preserves GeeTest solution fields such as captcha_output, lot_number, pass_token and gen_time.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "GeeTestTaskProxyless",
        "page_url": "PAGE_URL",
        "gt": "GT",
        "version": 4,
        "init_parameters": {
            "riskType": "slide"
        }
    }
}
TurnstileTask
Solve a standard Cloudflare Turnstile widget.
Cloudflare TurnstileTurnstileTask
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Sources
turnstile.render("#captcha", { sitekey: "0x4...", action: "managed", cData, chlPageData })

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Open DevTools before the widget loadsPress F12, switch to the Network tab and reload so the first requests are captured.
  3. Read the sitekeyCopy data-sitekey from the Turnstile container, or the sitekey argument passed to turnstile.render in Sources.
  4. Capture the challenge valuesturnstile.render receives an options object holding action, cData and chlPageData. Send them as page_action, data and page_data.
  5. Collect them per rendercData and chlPageData expire with the challenge; capture them immediately before creating the task.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// TurnstileTask — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  // turnstile.render receives everything the task needs. Reload the
  // page after pasting this so the hook is in place before it runs.
  const task = { method: "TurnstileTask", page_url: location.href };
  const el = document.querySelector('[data-sitekey]');
  if (el) task.site_key = el.getAttribute('data-sitekey');

  if (window.turnstile && !window.turnstile.__hooked) {
    const render = window.turnstile.render.bind(window.turnstile);
    window.turnstile.render = (container, options = {}) => {
      Object.assign(task, {
        site_key: options.sitekey || task.site_key,
        page_action: options.action,
        data: options.cData,
        page_data: options.chlPageData,
      });
      console.log('captured:', JSON.stringify(task, null, 2));
      return render(container, options);
    };
    window.turnstile.__hooked = true;
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

page_action Usually stable

Page action

Sources search → grecaptcha.execute, or turnstile.render

Copy the action string used by the page, for example login, checkout or managed.

data Fresh value

Challenge data

Widget callback or initialization object

For Cloudflare this is commonly cData; for other types inspect the provider-specific payload.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: TurnstileTask

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesTurnstileTask
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
page_actionNoOptional task-specific value.
dataNoOptional task-specific value.
user_agentNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "TurnstileTask",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
TurnstileTaskProxyless
Solve a standard Cloudflare Turnstile widget.
Cloudflare TurnstileTurnstileTaskProxyless
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Sources
turnstile.render("#captcha", { sitekey: "0x4...", action: "managed", cData, chlPageData })

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Open DevTools before the widget loadsPress F12, switch to the Network tab and reload so the first requests are captured.
  3. Read the sitekeyCopy data-sitekey from the Turnstile container, or the sitekey argument passed to turnstile.render in Sources.
  4. Capture the challenge valuesturnstile.render receives an options object holding action, cData and chlPageData. Send them as page_action, data and page_data.
  5. Collect them per rendercData and chlPageData expire with the challenge; capture them immediately before creating the task.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// TurnstileTaskProxyless — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  // turnstile.render receives everything the task needs. Reload the
  // page after pasting this so the hook is in place before it runs.
  const task = { method: "TurnstileTaskProxyless", page_url: location.href };
  const el = document.querySelector('[data-sitekey]');
  if (el) task.site_key = el.getAttribute('data-sitekey');

  if (window.turnstile && !window.turnstile.__hooked) {
    const render = window.turnstile.render.bind(window.turnstile);
    window.turnstile.render = (container, options = {}) => {
      Object.assign(task, {
        site_key: options.sitekey || task.site_key,
        page_action: options.action,
        data: options.cData,
        page_data: options.chlPageData,
      });
      console.log('captured:', JSON.stringify(task, null, 2));
      return render(container, options);
    };
    window.turnstile.__hooked = true;
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

page_action Usually stable

Page action

Sources search → grecaptcha.execute, or turnstile.render

Copy the action string used by the page, for example login, checkout or managed.

data Fresh value

Challenge data

Widget callback or initialization object

For Cloudflare this is commonly cData; for other types inspect the provider-specific payload.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: TurnstileTask

Compatibility alias: this historical method remains accepted and is mapped internally to TurnstileTask.

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesTurnstileTaskProxyless
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
page_actionNoOptional task-specific value.
dataNoOptional task-specific value.
user_agentNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "TurnstileTaskProxyless",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
RecaptchaV2EnterpriseTask
Solve Google reCAPTCHA V2 Enterprise.
reCAPTCHA V2 EnterpriseRecaptchaV2EnterpriseTask
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Elements / Sources
<div class="g-recaptcha" data-sitekey="6Lc...Key"></div>\ngrecaptcha.execute("6Lc...Key", { action: "login" })

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Inspect the CAPTCHA containerRight-click the widget and choose Inspect. Copy data-sitekey from the <div class="g-recaptcha"> element; copy data-s too when the page sets it.
  3. Or read the sitekey from the networkIn Network, filter for recaptcha and open the anchor request: its k query parameter is the sitekey.
  4. Find the action for score-based variantsSearch Sources for grecaptcha.execute; the action string passed there is page_action.
  5. Note whether the widget is invisibleAn element carrying size="invisible" means you should send is_invisible: true.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// RecaptchaV2EnterpriseTask — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  const el = document.querySelector('.g-recaptcha[data-sitekey], [data-sitekey]');
  const task = { method: "RecaptchaV2EnterpriseTask", page_url: location.href, site_key: el?.getAttribute('data-sitekey') || null };

  if (el?.getAttribute('data-s')) task.data_s = el.getAttribute('data-s');
  if (el?.getAttribute('data-size') === 'invisible') task.is_invisible = true;

  // Fall back to the anchor request, which always carries k=<sitekey>.
  if (!task.site_key) {
    const anchor = performance.getEntriesByType('resource')
      .map((entry) => entry.name)
      .find((name) => name.includes('/recaptcha/') && name.includes('k='));
    if (anchor) task.site_key = new URL(anchor).searchParams.get('k');
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

page_action Usually stable

Page action

Sources search → grecaptcha.execute, or turnstile.render

Copy the action string used by the page, for example login, checkout or managed.

enterprise_payload Fresh value

Enterprise payload

Network / grecaptcha.enterprise initialization

Preserve the complete object and its original key casing.

api_domain Usually stable

API domain

Network → script host

Send it only when the page loads reCAPTCHA from recaptcha.net instead of google.com.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

cookies Fresh value

Cookies

Application → Cookies / Network headers

Send only cookies required by the current CAPTCHA flow.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: RecaptchaV2EnterpriseTask

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesRecaptchaV2EnterpriseTask
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
page_actionNoOptional task-specific value.
enterprise_payloadNoOptional task-specific value.
api_domainNoOptional task-specific value.
user_agentNoOptional task-specific value.
cookiesNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "RecaptchaV2EnterpriseTask",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}
RecaptchaV2EnterpriseTaskProxyless
Solve Google reCAPTCHA V2 Enterprise.
reCAPTCHA V2 EnterpriseRecaptchaV2EnterpriseTaskProxyless
Identify → collect → submit

Collect the values from the current widget

Use DevTools on a page you are authorized to integrate. Static identifiers can be reused; values marked Fresh value must be captured again for every rendered challenge.

  1. 1Open DevTools before the CAPTCHA loads.
  2. 2Inspect Elements, Sources and Network.
  3. 3Send dynamic values immediately.

Visual DevTools example

Elements / Sources
<div class="g-recaptcha" data-sitekey="6Lc...Key"></div>\ngrecaptcha.execute("6Lc...Key", { action: "login" })

How to find all parameters required to create a task

Manually

  1. Open the page in a browserLoad the page where the CAPTCHA appears, on a site you are authorised to integrate.
  2. Inspect the CAPTCHA containerRight-click the widget and choose Inspect. Copy data-sitekey from the <div class="g-recaptcha"> element; copy data-s too when the page sets it.
  3. Or read the sitekey from the networkIn Network, filter for recaptcha and open the anchor request: its k query parameter is the sitekey.
  4. Find the action for score-based variantsSearch Sources for grecaptcha.execute; the action string passed there is page_action.
  5. Note whether the widget is invisibleAn element carrying size="invisible" means you should send is_invisible: true.

Automatically

The first snippet reports the values. The two Playwright scripts collect them from a live page and solve them through this API in one run — replace YOUR_API_KEY and PAGE_URL.

paste into DevTools → Console

Run this on the page with the CAPTCHA. It prints the task body to copy into your request.

// RecaptchaV2EnterpriseTaskProxyless — collect the task parameters from this page.
// Paste into DevTools → Console on the page showing the CAPTCHA.
(() => {
  const el = document.querySelector('.g-recaptcha[data-sitekey], [data-sitekey]');
  const task = { method: "RecaptchaV2EnterpriseTaskProxyless", page_url: location.href, site_key: el?.getAttribute('data-sitekey') || null };

  if (el?.getAttribute('data-s')) task.data_s = el.getAttribute('data-s');
  if (el?.getAttribute('data-size') === 'invisible') task.is_invisible = true;

  // Fall back to the anchor request, which always carries k=<sitekey>.
  if (!task.site_key) {
    const anchor = performance.getEntriesByType('resource')
      .map((entry) => entry.name)
      .find((name) => name.includes('/recaptcha/') && name.includes('k='));
    if (anchor) task.site_key = new URL(anchor).searchParams.get('k');
  }

  console.log(JSON.stringify({ task }, null, 2));
  return task;
})();

What each value is and where it lives

page_url Usually stable

Page URL

Address bar / Network → Referer

Use the exact URL where the widget is initialized, without relying on a post-login redirect.

site_key Usually stable

Site key

Elements → data-sitekey, or Network → k/sitekey

Inspect the CAPTCHA container first; if absent, inspect the widget iframe or initialization request.

page_action Usually stable

Page action

Sources search → grecaptcha.execute, or turnstile.render

Copy the action string used by the page, for example login, checkout or managed.

enterprise_payload Fresh value

Enterprise payload

Network / grecaptcha.enterprise initialization

Preserve the complete object and its original key casing.

api_domain Usually stable

API domain

Network → script host

Send it only when the page loads reCAPTCHA from recaptcha.net instead of google.com.

user_agent Usually stable

Browser User-Agent

Console → navigator.userAgent

Use the same browser identity when submitting the returned solution.

cookies Fresh value

Cookies

Application → Cookies / Network headers

Send only cookies required by the current CAPTCHA flow.

Address: https://solvecaptcha.net/api/createTask
Method: POST
Default provider task type: RecaptchaV2EnterpriseTask

Compatibility alias: this historical method remains accepted and is mapped internally to RecaptchaV2EnterpriseTask.

Response fields use snake_case. Token-based tasks include solution.token; existing reCAPTCHA integrations also continue to receive solution.gRecaptchaResponse.

Request properties

PropertyRequiredPurpose
methodYesRecaptchaV2EnterpriseTaskProxyless
page_urlYes Value extracted from the target CAPTCHA page.
site_keyYes Value extracted from the target CAPTCHA page.
page_actionNoOptional task-specific value.
enterprise_payloadNoOptional task-specific value.
api_domainNoOptional task-specific value.
user_agentNoOptional task-specific value.
cookiesNoOptional task-specific value.
proxy_type, proxy_address, proxy_portNoUse a customer proxy when the target rejects built-in provider proxies.

Working example

Replace YOUR_API_KEY with the key from your account settings and the uppercase placeholders with the values you collected above. Each snippet creates the task, polls until it is solved and prints the solution.

{
    "task": {
        "method": "RecaptchaV2EnterpriseTaskProxyless",
        "page_url": "PAGE_URL",
        "site_key": "SITE_KEY"
    }
}