Solver Cloudflare

Create Task

Code
POST https://solvercf.com/token/extension/createTask

Submits a new captcha task and returns a taskId immediately. The task itself is solved asynchronously — poll Get Task Result with the returned taskId to retrieve the token. See Overview → Task lifecycle & timeouts for how long a task stays valid.

Request

Field Type Required Description
clientKey string yes Your account API key
task object yes The task payload — see below
softId int no Accepted for CapMonster compatibility, not used by SolverCF
source string no Accepted for CapSolver compatibility, not used by SolverCF
version string no Accepted for CapSolver compatibility, not used by SolverCF

task object

Field Type Required Used by Description
type string yes all One of the task types below
websiteUrl string yes all Full URL of the page containing the challenge, including scheme (https://...)
websiteKey string yes all The site key extracted from the page — see Finding the site key
userAgent string no all User agent to solve with. If omitted, a default is used — but if the token will be submitted from a browser with a specific user agent, pass that same one here (see the warning in Get Task Result)
proxy string no all Your own proxy, format host:port:user:pass (user/pass may be omitted: host:port). If omitted, SolverCF solves directly without a proxy
pageAction string no Challenge, reCAPTCHA v3 The action name — Cloudflare's chlApiAction/interactive action, or the action parameter passed to grecaptcha.execute() for reCAPTCHA v3
data string no Challenge Cloudflare cData payload, extracted from the page's challenge script
pageData string no Challenge Cloudflare chlPageData payload, extracted from the page's challenge script
cloudflareTaskType string no Turnstile See Turnstile vs. Challenge mode below
minScore number no reCAPTCHA v3 Minimum acceptable score (0.01.0) for the returned token

websiteUrl and websiteKey are validated server-side — omitting either one returns errorId: 1 immediately without creating a task.

Turnstile vs. Challenge mode

type: "TurnstileTask" covers two different scenarios, distinguished by cloudflareTaskType:

  • Omitted / any value other than "token" — solves the plain Turnstile widget (the checkbox/invisible challenge you see embedded in a page) and returns a token.
  • "token" — solves it as a full Cloudflare challenge instead, using pageAction + data + pageData extracted from the page's own challenge script. Use this when you need to reproduce Cloudflare's own challenge flow rather than a standalone Turnstile widget. All three fields (pageAction, data, pageData) must be non-empty for this mode to trigger — if any is missing, it falls back to plain Turnstile solving.

Finding the site key

  • Turnstile: look for a <div> with a data-sitekey="0x..." attribute, or a call to turnstile.render(..., { sitekey: "0x..." }) in the page's scripts.
  • reCAPTCHA v3: look for grecaptcha.execute('SITE_KEY', { action: '...' }) in the page's scripts, or a <script src="...recaptcha/api.js?render=SITE_KEY"> tag.

Task types

type Notes
TurnstileTask Cloudflare Turnstile widget, or full Challenge mode via cloudflareTaskType: "token"
TurnstileTaskPool Same site keys as above, but served instantly from a pre-solved token pool instead of solving on demand — see Result Task Pool
RecaptchaV3Task / RecaptchaV3TaskProxyless Google reCAPTCHA v3
RecaptchaV3EnterpriseTask / RecaptchaV3EnterpriseTaskProxyless Google reCAPTCHA v3 Enterprise

Example: Turnstile

cURL
curl -X POST https://solvercf.com/token/extension/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
      "type": "TurnstileTask",
      "websiteUrl": "https://example.com",
      "websiteKey": "0x4AAAAAAAf4mfyVrG728T40"
    }
  }'
Python
import requests

response = requests.post("https://solvercf.com/token/extension/createTask", json={
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
        "type": "TurnstileTask",
        "websiteUrl": "https://example.com",
        "websiteKey": "0x4AAAAAAAf4mfyVrG728T40",
    },
})
print(response.json())
JavaScript
const response = await fetch("https://solvercf.com/token/extension/createTask", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    clientKey: "YOUR_CLIENT_KEY",
    task: {
      type: "TurnstileTask",
      websiteUrl: "https://example.com",
      websiteKey: "0x4AAAAAAAf4mfyVrG728T40",
    },
  }),
});
console.log(await response.json());
C#
using var client = new HttpClient();
var response = await client.PostAsJsonAsync("https://solvercf.com/token/extension/createTask", new
{
    clientKey = "YOUR_CLIENT_KEY",
    task = new
    {
        type = "TurnstileTask",
        websiteUrl = "https://example.com",
        websiteKey = "0x4AAAAAAAf4mfyVrG728T40",
    },
});
Console.WriteLine(await response.Content.ReadAsStringAsync());

Example: Cloudflare Challenge (Turnstile + cloudflareTaskType)

cURL
curl -X POST https://solvercf.com/token/extension/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
      "type": "TurnstileTask",
      "websiteUrl": "https://example.com",
      "websiteKey": "0x4AAAAAAAf4mfyVrG728T40",
      "cloudflareTaskType": "token",
      "pageAction": "interactive",
      "data": "…",
      "pageData": "…"
    }
  }'
Python
import requests

response = requests.post("https://solvercf.com/token/extension/createTask", json={
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
        "type": "TurnstileTask",
        "websiteUrl": "https://example.com",
        "websiteKey": "0x4AAAAAAAf4mfyVrG728T40",
        "cloudflareTaskType": "token",
        "pageAction": "interactive",
        "data": "…",
        "pageData": "…",
    },
})
print(response.json())
JavaScript
const response = await fetch("https://solvercf.com/token/extension/createTask", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    clientKey: "YOUR_CLIENT_KEY",
    task: {
      type: "TurnstileTask",
      websiteUrl: "https://example.com",
      websiteKey: "0x4AAAAAAAf4mfyVrG728T40",
      cloudflareTaskType: "token",
      pageAction: "interactive",
      data: "…",
      pageData: "…",
    },
  }),
});
console.log(await response.json());
C#
using var client = new HttpClient();
var response = await client.PostAsJsonAsync("https://solvercf.com/token/extension/createTask", new
{
    clientKey = "YOUR_CLIENT_KEY",
    task = new
    {
        type = "TurnstileTask",
        websiteUrl = "https://example.com",
        websiteKey = "0x4AAAAAAAf4mfyVrG728T40",
        cloudflareTaskType = "token",
        pageAction = "interactive",
        data = "…",
        pageData = "…",
    },
});
Console.WriteLine(await response.Content.ReadAsStringAsync());

Example: Turnstile with your own proxy

cURL
curl -X POST https://solvercf.com/token/extension/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
      "type": "TurnstileTask",
      "websiteUrl": "https://example.com",
      "websiteKey": "0x4AAAAAAAf4mfyVrG728T40",
      "proxy": "203.0.113.10:8080:myuser:mypass"
    }
  }'
Python
import requests

response = requests.post("https://solvercf.com/token/extension/createTask", json={
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
        "type": "TurnstileTask",
        "websiteUrl": "https://example.com",
        "websiteKey": "0x4AAAAAAAf4mfyVrG728T40",
        "proxy": "203.0.113.10:8080:myuser:mypass",
    },
})
print(response.json())
JavaScript
const response = await fetch("https://solvercf.com/token/extension/createTask", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    clientKey: "YOUR_CLIENT_KEY",
    task: {
      type: "TurnstileTask",
      websiteUrl: "https://example.com",
      websiteKey: "0x4AAAAAAAf4mfyVrG728T40",
      proxy: "203.0.113.10:8080:myuser:mypass",
    },
  }),
});
console.log(await response.json());
C#
using var client = new HttpClient();
var response = await client.PostAsJsonAsync("https://solvercf.com/token/extension/createTask", new
{
    clientKey = "YOUR_CLIENT_KEY",
    task = new
    {
        type = "TurnstileTask",
        websiteUrl = "https://example.com",
        websiteKey = "0x4AAAAAAAf4mfyVrG728T40",
        proxy = "203.0.113.10:8080:myuser:mypass",
    },
});
Console.WriteLine(await response.Content.ReadAsStringAsync());

Example: reCAPTCHA v3

cURL
curl -X POST https://solvercf.com/token/extension/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
      "type": "RecaptchaV3Task",
      "websiteUrl": "https://example.com",
      "websiteKey": "6Lc...",
      "pageAction": "login",
      "minScore": 0.7
    }
  }'
Python
import requests

response = requests.post("https://solvercf.com/token/extension/createTask", json={
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
        "type": "RecaptchaV3Task",
        "websiteUrl": "https://example.com",
        "websiteKey": "6Lc...",
        "pageAction": "login",
        "minScore": 0.7,
    },
})
print(response.json())
JavaScript
const response = await fetch("https://solvercf.com/token/extension/createTask", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    clientKey: "YOUR_CLIENT_KEY",
    task: {
      type: "RecaptchaV3Task",
      websiteUrl: "https://example.com",
      websiteKey: "6Lc...",
      pageAction: "login",
      minScore: 0.7,
    },
  }),
});
console.log(await response.json());
C#
using var client = new HttpClient();
var response = await client.PostAsJsonAsync("https://solvercf.com/token/extension/createTask", new
{
    clientKey = "YOUR_CLIENT_KEY",
    task = new
    {
        type = "RecaptchaV3Task",
        websiteUrl = "https://example.com",
        websiteKey = "6Lc...",
        pageAction = "login",
        minScore = 0.7,
    },
});
Console.WriteLine(await response.Content.ReadAsStringAsync());

Example: reCAPTCHA v3 Enterprise

cURL
curl -X POST https://solvercf.com/token/extension/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
      "type": "RecaptchaV3EnterpriseTask",
      "websiteUrl": "https://example.com",
      "websiteKey": "6Lc...",
      "pageAction": "login",
      "minScore": 0.7
    }
  }'
Python
import requests

response = requests.post("https://solvercf.com/token/extension/createTask", json={
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
        "type": "RecaptchaV3EnterpriseTask",
        "websiteUrl": "https://example.com",
        "websiteKey": "6Lc...",
        "pageAction": "login",
        "minScore": 0.7,
    },
})
print(response.json())
JavaScript
const response = await fetch("https://solvercf.com/token/extension/createTask", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    clientKey: "YOUR_CLIENT_KEY",
    task: {
      type: "RecaptchaV3EnterpriseTask",
      websiteUrl: "https://example.com",
      websiteKey: "6Lc...",
      pageAction: "login",
      minScore: 0.7,
    },
  }),
});
console.log(await response.json());
C#
using var client = new HttpClient();
var response = await client.PostAsJsonAsync("https://solvercf.com/token/extension/createTask", new
{
    clientKey = "YOUR_CLIENT_KEY",
    task = new
    {
        type = "RecaptchaV3EnterpriseTask",
        websiteUrl = "https://example.com",
        websiteKey = "6Lc...",
        pageAction = "login",
        minScore = 0.7,
    },
});
Console.WriteLine(await response.Content.ReadAsStringAsync());

Response

Field Type Description
taskId string ID to use with Get Task Result
status string idle on success
errorId int 0 = success, 1 = failed
errorCode string Present when errorId is 1 — see Errors
errorDescription string Human-readable error message
JSON
{
  "taskId": "b2e1c1b0-...",
  "status": "idle",
  "errorId": 0
}

A successful response here does not mean the captcha is solved yet — it means the task was accepted into the queue. Move on to Get Task Result to retrieve the actual token.