Skip to content
voidcaptcha

Getting started

Switch from 2Captcha, CapSolver or Anti-Captcha in one line

VoidCaptcha answers the 2Captcha in.php / res.php API and the createTask / getTaskResult / getBalance API that Anti-Captcha and CapSolver share. Point your existing client at api.voidcaptcha.com, use your VoidCaptcha key, and keep the rest of your code.

The one line#

The official 2Captcha Python client, 2captcha-python, takes the host as a constructor argument:

Python · 2captcha-python
from twocaptcha import TwoCaptcha

solver = TwoCaptcha("YOUR_VOIDCAPTCHA_KEY", server="api.voidcaptcha.com")

The official CapSolver Python client, capsolver, reads its base URL from a module setting or the CAPSOLVER_API_BASE environment variable:

Python · capsolver
import capsolver

capsolver.api_base = "https://api.voidcaptcha.com"
capsolver.api_key = "YOUR_VOIDCAPTCHA_KEY"

The official Anti-Captcha Python client, anticaptchaofficial, has its host written into the library and no setting for it, so the change is three lines rather than one. Put them before your first solve:

Python · anticaptchaofficial
from anticaptchaofficial import antinetworking

_post = antinetworking.session.post
antinetworking.session.post = lambda url, **kw: _post(url.replace("api.anti-captcha.com", "api.voidcaptcha.com"), **kw)

Any other tool or library with a custom host or base URL setting works the same way. Calling the HTTP API directly, only the host changes:

Endpoints
https://2captcha.com/in.php                  ->  https://api.voidcaptcha.com/in.php
https://2captcha.com/res.php                 ->  https://api.voidcaptcha.com/res.php
https://api.anti-captcha.com/createTask      ->  https://api.voidcaptcha.com/createTask
https://api.anti-captcha.com/getTaskResult   ->  https://api.voidcaptcha.com/getTaskResult
https://api.capsolver.com/getBalance         ->  https://api.voidcaptcha.com/getBalance

These solve on our first pool. The same five endpoints under https://api.voidcaptcha.com/v2/compat/ solve on the second one, so a 2Captcha client would use server="api.voidcaptcha.com/v2/compat".

Before you switch#

Send your own proxy

Most types here solve through a proxy you send, and none of them fall back to one of ours. A proxyless task for one of those types (2Captcha’s default reCAPTCHA, or RecaptchaV2TaskProxyless, FunCaptchaTaskProxyless and the like) is refused with ERROR_PROXY_REQUIRED before anything is billed. Turnstile is the one type that needs none. HTTP and HTTPS proxies are accepted in any of the usual spellings; SOCKS proxies are refused with ERROR_PROXY_FORMAT. See Proxies.
  • Your key is your VoidCaptcha key, sent wherever the old one went (key for 2Captcha, clientKey for the JSON API). It is longer than a 2Captcha key, so a tool that checks for exactly 32 characters will refuse it.
  • Task ids are ours (vt_…), not numbers. The official clients treat them as opaque strings.
  • Results are held for ten minutes, then dropped. Collect them in the session that created them.
  • Billing, thread limits and errors are exactly those of the native API: a failed solve is never billed, and reportbad is accepted but refunds nothing because there is nothing to refund.

2Captcha methods#

methodOur task typeParameters used
userrecaptchaReCaptchaV2googlekey, pageurl, proxy. enterprise=1 gives ReCaptchaV2Enterprise.
userrecaptcha + version=v3ReCaptchaV3action is passed on. enterprise=1 gives ReCaptchaV3Enterprise. min_score is accepted and not enforced.
turnstileTurnstilesitekey, pageurl. No proxy needed; one sent is ignored. action and data are read off the page.
geetestGeetestV3gt, challenge, api_server, pageurl, proxy.
geetest_v4GeetestV4captcha_id, risk_type, pageurl, proxy.
funcaptchaFunCaptcha_Invisiblepublickey, surl, data[blob], pageurl, proxy.
amazon_wafawsTokenpageurl, challenge_script, proxy. sitekey, iv and context are not needed.
datadomedatadome_slider / datadome_Interstitialcaptcha_url (picks the variant), pageurl, userAgent, proxy.
huntHuntCaptchapageurl, api_get_lib, data, proxy.

res.php answers action=get, get2, getbalance, reportgood and reportbad, in plain text or with json=1. Every reply is HTTP 200, as 2Captcha’s are.

Anti-Captcha and CapSolver task types#

Anti-CaptchaCapSolverOur task typeFields used
RecaptchaV2Task, NoCaptchaTaskReCaptchaV2TaskReCaptchaV2websiteURL, websiteKey, proxy, userAgent
RecaptchaV2EnterpriseTaskReCaptchaV2EnterpriseTaskReCaptchaV2Enterpriseas above
RecaptchaV3TaskProxyless + a proxyReCaptchaV3TaskReCaptchaV3pageAction becomes action; isEnterprise gives ReCaptchaV3Enterprise
—ReCaptchaV3EnterpriseTaskReCaptchaV3Enterpriseas above
TurnstileTask, TurnstileTaskProxylessAntiTurnstileTaskProxyLessTurnstilewebsiteURL, websiteKey; no proxy needed
GeeTestTaskGeeTestTaskGeetestV3 / GeetestV4gt + challenge for v3; captchaId or initParameters.captcha_id for v4
FunCaptchaTaskFunCaptchaTaskFunCaptcha_InvisiblewebsitePublicKey, funcaptchaApiJSSubdomain, data.blob
AmazonTaskAntiAwsWafTaskawsTokenwebsiteURL, challengeScript / awsChallengeJS
—DatadomeSliderTaskdatadome_slider / datadome_InterstitialwebsiteURL, captchaUrl, userAgent
—AntiCloudflareTaskCFClearancewebsiteURL, proxy, userAgent

Both spellings of the proxyless suffix (Proxyless, ProxyLess) are understood. Proxies arrive as Anti-Captcha’s proxyAddress / proxyPort / proxyLogin / proxyPassword fields or as CapSolver’s proxy string. Our own task type names are accepted on this endpoint too, with our field names, so you can move to the native API one task at a time.

What comes back#

Solutions carry the field names your client reads, beside ours. Nothing of ours is removed.

Type2Captcha requestAnti-Captcha / CapSolver solution
reCAPTCHAthe tokengRecaptchaResponse, plus our token and userAgent
Turnstile, FunCaptchathe token; json=1 adds useragenttoken, userAgent
GeeTest v3geetest_challenge, geetest_validate, geetest_seccodechallenge, validate, seccode
GeeTest v4captcha_id, lot_number, pass_token, gen_time, captcha_outputthe same five fields
AWS WAF{"aws-waf-token": …}token, cookie, cookies["aws-waf-token"]
DataDomedatadome=… cookiecookie
Cloudflare Clearance—cookies.cf_clearance, token, userAgent

One difference to know: 2Captcha’s amazon_waf answers with a captcha_voucher; we answer with the aws-waf-token cookie itself, which you set on your session directly.

Not supported#

These are refused with an error that names them, never answered with a guess:

  • Image, text, audio, grid, coordinate, rotate and other recognition tasks, and the classification task types.
  • KeyCaptcha, Capy, Lemin, MTCaptcha, Cutcaptcha, Friendly Captcha, Tencent, Prosopo and the other methods not in the tables above.
  • reCAPTCHA data-s / recaptchaDataSValue / enterprisePayload.s.
  • Turnstile on a Cloudflare challenge page (pagedata, chlPageData). Use our Cloudflare Clearance type for those pages.
  • SOCKS proxies, and proxyless variants of types that need your proxy.
  • res.php with ids (several at once). Poll each id on its own.

Tip

Callbacks (pingback, callbackUrl), softId, min_score and isInvisible are accepted and ignored: they do not change the answer.

Errors#

Errors come back in your client’s own words where it has one: ERROR_KEY_DOES_NOT_EXIST, ERROR_ZERO_BALANCE, ERROR_NO_SLOT_AVAILABLE for the thread limit, ERROR_CAPTCHA_UNSOLVABLE, and on the JSON API the matching Anti-Captcha errorId. Where it has none, you get our code, listed in Errors. A poll that arrives sooner than every two seconds answers “not ready” rather than an error.

Last updated on 17 October 2026