Reference

API reference

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).

CapSolver style

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..."}}

2captcha style

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)

Balance

POST /getBalance  {"clientKey":"cr_xxx"}  → {"errorId":0,"balance":42.18}

Python — CapSolver client, unchanged

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.