API referenceReferenceUsing proxies
Using proxies
Some captchas bind their answer to the address that asked for it. For those, the solve has to run through your proxy rather than ours, or the token is worth nothing when you submit it.
When you need one
The task type string tells you, and there is no second rule. A type ending ProxyLess runs on our own addresses and takes no proxy. A type without that suffix REQUIRES one, and a request that leaves it out comes back ERROR_INVALID_TASK_DATA. Either shape below satisfies that; you do not have to use the single string.
| Task type | Proxy | Why |
|---|---|---|
ReCaptchaV2TaskProxyLess | None | The token is not address bound. |
ReCaptchaV2Task | Required | The suffix is the rule. Use this one when the site scores the asking address as well as the token. |
AntiTurnstileTaskProxyLess | None | Turnstile tokens travel. |
AntiCloudflareTask | Required | The clearance cookie is issued to one address and checked against it. |
AntiAwsWafTask | Required | Use this one when the rule set binds the token to an address. AntiAwsWafTaskProxyLess is the one that takes none. |
Two ways to pass one
As one string
Put the whole thing in proxy. Any of these parse:
JSON
"proxy": "http:192.0.2.40:8080:user:pass"
"proxy": "socks5:192.0.2.40:1080:user:pass"
"proxy": "192.0.2.40:8080:user:pass"
"proxy": "http://user:pass@192.0.2.40:8080"
"proxy": "socks5://user:pass@192.0.2.40:1080"
With no scheme, http is assumed. With no user and password, the proxy has to accept us by address instead.
As separate fields
JSON
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiCloudflareTask",
"websiteURL": "https://example.com",
"proxyType": "http",
"proxyAddress": "192.0.2.40",
"proxyPort": 8080,
"proxyLogin": "user",
"proxyPassword": "pass"
}
}| Field | Type | Required | What it is |
|---|---|---|---|
proxyType | String | Yes | http, https, socks4 or socks5. |
proxyAddress | String | Yes | Hostname or IP. A hostname is resolved at solve time. |
proxyPort | Integer | Yes | Port number. |
proxyLogin | String | No | Username, where the proxy asks for one. |
proxyPassword | String | No | Password, where the proxy asks for one. |
Pick one shape per task. Sending both is rejected with ERROR_INVALID_TASK_DATA rather than silently preferring one.
Proxies that authenticate by address
If your proxy has no username and password and instead allows a list of addresses, our solvers have to be on that list. The current set is on your dashboard under Settings, Proxy access. It changes rarely, and we give notice in the dashboard before it does.
What a bad proxy looks like
| Code | Usually means |
|---|---|
ERROR_PROXY_BANNED | The target site blocks that address. Rotate it and retry. |
ERROR_PROXY_CONNECT_REFUSED | We could not reach the proxy. Check port and firewall. |
ERROR_PROXY_AUTH_FAILED | Username or password rejected by the proxy. |
ERROR_INVALID_TASK_DATA | The proxy string did not parse. Compare it against the formats above. |
None of these are billed. A task that never reached the target site does not cost a solve.
Last updated 21 September 2026