createTask
Submit a CAPTCHA to solve and receive a task id.
Creates a solve task and returns immediately. The response carries a taskId you then poll with getTaskResult. The task price is debited from your wallet here, and credited back automatically if the task ends in failure.
POST https://api.captchapi.com/createTask
content-type: application/jsonRequest fields
| Field | Type | Required | Description |
|---|---|---|---|
clientKey | string | yes | Your API key. |
task.type | string | yes | One of the supported task types. Case-insensitive. |
task.websiteURL | string | yes | The full URL of the page carrying the CAPTCHA, including scheme. |
task.websiteKey | string | usually | The widget sitekey. Not needed for Cloudflare full-page challenge tasks, which have no sitekey. |
task.pageAction | string | no | reCAPTCHA v3 action name. Send the same value the site uses, or the score will be wrong. |
task.isInvisible | boolean | no | Set for invisible reCAPTCHA v2 and invisible hCaptcha widgets. |
task.data | string | no | Extra payload some widgets require: the FunCaptcha blob, or hCaptcha rqdata. |
task.funcaptchaApiJSSubdomain | string | no | Custom Arkose api.js subdomain when the target uses one. |
task.userAgent | string | no | Exact User-Agent to solve with. A Firefox UA is honoured by a real Gecko engine, not a spoofed header, which adds a few seconds. |
task.proxyType | string | with proxy | http, https, socks4 or socks5. |
task.proxyAddress | string | with proxy | Proxy host or IP. Must be reachable from our egress. |
task.proxyPort | number | with proxy | Proxy port. |
task.proxyLogin | string | no | Proxy username, if the proxy authenticates. |
task.proxyPassword | string | no | Proxy password, if the proxy authenticates. |
Examples
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ReCaptchaV3TokenProxyLess",
"websiteURL": "https://example.com/checkout",
"websiteKey": "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf",
"pageAction": "checkout"
}
}{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "TurnstileToken",
"websiteURL": "https://example.com/login",
"websiteKey": "0x4AAAAAAADnPIDROrmt1Wwj",
"proxyType": "http",
"proxyAddress": "203.0.113.10",
"proxyPort": 8080,
"proxyLogin": "user",
"proxyPassword": "pass",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"
}
}{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "CloudflareChallengeCookie",
"websiteURL": "https://example.com/protected"
}
}Response
{
"errorId": 0,
"taskId": "9f2c4b1e-6f0a-4d5e-b6c1-2f7a9d3e51c8"
}{
"errorId": 1,
"errorCode": "ERROR_ZERO_BALANCE",
"errorDescription": "Your wallet balance is 0.00 USD. Top up to create tasks."
}The debit happens here, before the solve. That is what lets us answer in milliseconds instead of holding your request open during a credit check. Every failed task is credited back with the same task id, so the two movements always pair up in your wallet history.