Base URL is this host. Point any 2captcha or CapSolver client at it — the wire format is identical. Your API key is the clientKey (2captcha calls it key).
Create a task, then poll for the result.
POST /createTask
{"clientKey":"cr_xxx","task":{"type":"ReCaptchaV2TaskProxyLess",
"websiteURL":"https://site","websiteKey":"6Lc_..."}}
→ {"errorId":0,"taskId":"<id>"}
POST /getTaskResult
{"clientKey":"cr_xxx","taskId":"<id>"}
→ {"errorId":0,"status":"ready","solution":{"gRecaptchaResponse":"03A..."}}POST /in.php key=cr_xxx&method=userrecaptcha&googlekey=6Lc_...&pageurl=https://site → OK|<id> GET /res.php?key=cr_xxx&action=get&id=<id> → OK|03A... (or CAPCHA_NOT_READY while solving)
POST /getBalance {"clientKey":"cr_xxx"} → {"errorId":0,"balance":42.18}import requests, time
B = "http://THIS_HOST"
t = requests.post(B+"/createTask", json={"clientKey":"cr_xxx","task":{
"type":"AntiTurnstileTaskProxyLess","websiteURL":"https://site",
"websiteKey":"0x4AAA..."}}).json()["taskId"]
while True:
r = requests.post(B+"/getTaskResult", json={"clientKey":"cr_xxx","taskId":t}).json()
if r.get("status") == "ready": print(r["solution"]); break
time.sleep(2)Task type names follow CapSolver (ReCaptchaV2TaskProxyLess, AntiTurnstileTaskProxyLess, HCaptchaTaskProxyLess, LeminTaskProxyLess…). 2captcha method names work too. Try them live in the playground.