Switching CAPTCHA solving providers shouldn't require rewriting your integration. This reference maps CaptchaAI's API endpoints, parameters, and responses against 2Captcha, Anti-Captcha, and CapMonster Cloud — so you know exactly what to change.
Base URLs
| Provider | Submit endpoint | Result endpoint |
|---|---|---|
| CaptchaAI | https://ocr.captchaai.com/in.php |
https://ocr.captchaai.com/res.php |
| 2Captcha | https://2captcha.com/in.php |
https://2captcha.com/res.php |
| Anti-Captcha | https://api.anti-captcha.com/createTask |
https://api.anti-captcha.com/getTaskResult |
| CapMonster Cloud | https://api.capmonster.cloud/createTask |
https://api.capmonster.cloud/getTaskResult |
CaptchaAI uses the same URL structure as 2Captcha. Migrating from 2Captcha requires only changing the domain.
API style
| Provider | API style | Content type | Auth |
|---|---|---|---|
| CaptchaAI | Form/query params | application/x-www-form-urlencoded |
key param |
| 2Captcha | Form/query params | application/x-www-form-urlencoded |
key param |
| Anti-Captcha | JSON body | application/json |
clientKey in body |
| CapMonster Cloud | JSON body | application/json |
clientKey in body |
reCAPTCHA v2
CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=userrecaptcha
googlekey=SITE_KEY
pageurl=PAGE_URL
json=1
Anti-Captcha / CapMonster
POST /createTask
{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
Parameter mapping
| CaptchaAI | Anti-Captcha/CapMonster | Description |
|---|---|---|
key |
clientKey |
API key |
method=userrecaptcha |
type=RecaptchaV2TaskProxyless |
Task type |
googlekey |
websiteKey |
reCAPTCHA sitekey |
pageurl |
websiteURL |
Target page URL |
invisible=1 |
isInvisible: true |
Invisible reCAPTCHA |
enterprise=1 |
type=RecaptchaV2EnterpriseTaskProxyless |
Enterprise flag |
reCAPTCHA v3
CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=userrecaptcha
googlekey=SITE_KEY
pageurl=PAGE_URL
version=v3
action=verify
min_score=0.7
Anti-Captcha / CapMonster
{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY",
"minScore": 0.7,
"pageAction": "verify"
}
}
Cloudflare Turnstile
CaptchaAI
POST /in.php
key=API_KEY
method=turnstile
sitekey=SITE_KEY
pageurl=PAGE_URL
Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
hCaptcha
CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=hcaptcha
sitekey=SITE_KEY
pageurl=PAGE_URL
Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "HCaptchaTaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
GeeTest v3
CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=geetest
gt=GT_VALUE
challenge=CHALLENGE_VALUE
pageurl=PAGE_URL
Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "GeeTestTaskProxyless",
"websiteURL": "PAGE_URL",
"gt": "GT_VALUE",
"challenge": "CHALLENGE_VALUE"
}
}
Image CAPTCHA
CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=base64
body=BASE64_IMAGE
Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "ImageToTextTask",
"body": "BASE64_IMAGE"
}
}
Polling for results
CaptchaAI / 2Captcha
GET /res.php?key=API_KEY&action=get&id=TASK_ID&json=1
Response: {"status":1,"request":"TOKEN"}
Not ready: {"status":0,"request":"CAPCHA_NOT_READY"}
Anti-Captcha / CapMonster
POST /getTaskResult
{
"clientKey": "API_KEY",
"taskId": 123456
}
Response: {"status":"ready","solution":{"gRecaptchaResponse":"TOKEN"}}
Not ready: {"status":"processing"}
Balance check
| Provider | Endpoint | Response |
|---|---|---|
| CaptchaAI | GET /res.php?key=KEY&action=getbalance |
12.345 |
| 2Captcha | GET /res.php?key=KEY&action=getbalance |
12.345 |
| Anti-Captcha | POST /getBalance {"clientKey":"KEY"} |
{"balance":12.345} |
| CapMonster | POST /getBalance {"clientKey":"KEY"} |
{"balance":12.345} |
Error codes
| Scenario | CaptchaAI / 2Captcha | Anti-Captcha |
|---|---|---|
| Wrong API key | ERROR_WRONG_USER_KEY |
ERROR_KEY_DOES_NOT_EXIST |
| Zero balance | ERROR_ZERO_BALANCE |
ERROR_ZERO_BALANCE |
| Bad sitekey | ERROR_WRONG_GOOGLEKEY |
ERROR_RECAPTCHA_INVALID_SITEKEY |
| Not ready | CAPCHA_NOT_READY |
status: "processing" |
| Rate limited | ERROR_TOO_MUCH_REQUESTS |
ERROR_TOO_MUCH_REQUESTS |
Migration checklist
- [ ] Change base URL to
ocr.captchaai.com - [ ] Update API key
- [ ] If migrating from Anti-Captcha/CapMonster: convert JSON body to form params
- [ ] Replace
clientKeywithkey - [ ] Replace task
typewithmethod - [ ] Update polling to use GET instead of POST (if from Anti-Captcha)
- [ ] Test with a single task before full migration
FAQ
Is CaptchaAI a drop-in replacement for 2Captcha?
Nearly. Change 2captcha.com to ocr.captchaai.com in your base URL and update your API key. The parameter names and response format are identical.
Do existing 2Captcha libraries work with CaptchaAI?
Yes. Most 2Captcha client libraries let you override the base URL. Set it to https://ocr.captchaai.com and they work without code changes.
Switch to CaptchaAI with minimal code changes
Get your API key at captchaai.com.
Discussions (0)
Join the conversation
Sign in to share your opinion.
Sign InNo comments yet.