Skip to content
CaptchAPI
API reference

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/json

Request fields

FieldTypeRequiredDescription
clientKeystringyesYour API key.
task.typestringyesOne of the supported task types. Case-insensitive.
task.websiteURLstringyesThe full URL of the page carrying the CAPTCHA, including scheme.
task.websiteKeystringusuallyThe widget sitekey. Not needed for Cloudflare full-page challenge tasks, which have no sitekey.
task.pageActionstringnoreCAPTCHA v3 action name. Send the same value the site uses, or the score will be wrong.
task.isInvisiblebooleannoSet for invisible reCAPTCHA v2 and invisible hCaptcha widgets.
task.datastringnoExtra payload some widgets require: the FunCaptcha blob, or hCaptcha rqdata.
task.funcaptchaApiJSSubdomainstringnoCustom Arkose api.js subdomain when the target uses one.
task.userAgentstringnoExact 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.proxyTypestringwith proxyhttp, https, socks4 or socks5.
task.proxyAddressstringwith proxyProxy host or IP. Must be reachable from our egress.
task.proxyPortnumberwith proxyProxy port.
task.proxyLoginstringnoProxy username, if the proxy authenticates.
task.proxyPasswordstringnoProxy password, if the proxy authenticates.

Examples

reCAPTCHA v3 with a page action
{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "ReCaptchaV3TokenProxyLess",
    "websiteURL": "https://example.com/checkout",
    "websiteKey": "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf",
    "pageAction": "checkout"
  }
}
Turnstile through your own proxy, with an exact User-Agent
{
  "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"
  }
}
Cloudflare full-page challenge — no sitekey
{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "CloudflareChallengeCookie",
    "websiteURL": "https://example.com/protected"
  }
}

Response

Accepted
{
  "errorId": 0,
  "taskId": "9f2c4b1e-6f0a-4d5e-b6c1-2f7a9d3e51c8"
}
Rejected — HTTP is still 200
{
  "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.