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.0–1.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 atoken. "token"— solves it as a full Cloudflare challenge instead, usingpageAction+data+pageDataextracted 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 adata-sitekey="0x..."attribute, or a call toturnstile.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.