ReCAPTCHA v3
Universal reCAPTCHA v3 solver — standard & enterprise
ReCAPTCHA v3 API
Solve reCAPTCHA v3 challenges (standard & enterprise) for any website. Provide the target URL, sitekey, and your proxy — get back a valid token with matching browser fingerprint headers.
Endpoint
POST https://castlebreaker.cc/getRecaptchaV3
Authentication
Requires X-API-Key header with your API key.
Request
Content-Type: application/json
Body Parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Yes | — | Target page URL (e.g. https://accounts.spotify.com/en/login) |
sitekey | string | Yes | — | reCAPTCHA v3 site key |
proxy | string | Yes | — | Proxy URL (e.g. socks5://user:pass@host:port) |
action | string | No | "verify" | reCAPTCHA action name (e.g. "login", "homepage") |
enterprise | boolean | No | true | true for reCAPTCHA Enterprise, false for standard v3 |
title | string | No | Auto | Page title. Auto-derived from domain if omitted |
Supported Proxy Formats
| Format | Example |
|---|---|
| HTTP | http://user:pass@host:port |
| HTTPS | https://user:pass@host:port |
| SOCKS5 | socks5://user:pass@host:port |
Response Format
Success Response
{
"status": "success",
"data": {
"token": "03AFcWeA5_...<long recaptcha token>",
"user_agent": "Mozilla/5.0 (Linux; Android 14; SM-S928B ...) Chrome/145.0.0.0",
"sec_ch_ua": "\"Chromium\";v=\"145\", \"Google Chrome\";v=\"145\"",
"sec_ch_ua_platform": "\"Android\"",
"sec_ch_ua_mobile": "?1",
"accept_lang": "en-US,en;q=0.9"
},
"credits": 9.00
}
Error Response
{
"status": "error",
"data": {
"message": "insufficient credits"
},
"credits": 0.00
}
Response Fields
| Field | Type | Description |
|---|---|---|
data.token | string | The solved reCAPTCHA v3 token |
data.user_agent | string | User-Agent of the browser that solved it. Use in target request |
data.sec_ch_ua | string | Sec-CH-UA header value |
data.sec_ch_ua_platform | string | Sec-CH-UA-Platform header value |
data.sec_ch_ua_mobile | string | Sec-CH-UA-Mobile header value |
data.accept_lang | string | Accept-Language header value |
credits | number | Remaining credits in your account |
Example Usage
Python
import requests
API_KEY = "your_api_key"
BASE_URL = "https://castlebreaker.cc"
resp = requests.post(
f"{BASE_URL}/getRecaptchaV3",
headers={
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
json={
"url": "https://antcpt.com/score_detector/",
"sitekey": "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf",
"action": "homepage",
"enterprise": False,
"proxy": "http://user:pass@proxy.example.com:8080",
"title": "Score detector for reCAPTCHA v3",
},
)
print(f"Status: {resp.status_code}")
data = resp.json()
if data["status"] == "success":
solve = data["data"]
print(f"Token: {solve['token'][:80]}...")
print(f"User-Agent: {solve.get('user_agent', '')}")
print(f"Sec-CH-UA: {solve.get('sec_ch_ua', '')}")
print(f"Credits remaining: {data['credits']}")
else:
print(f"Error: {data['data']['message']}")
Node.js
const resp = await fetch("https://castlebreaker.cc/getRecaptchaV3", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "your_api_key",
},
body: JSON.stringify({
url: "https://antcpt.com/score_detector/",
sitekey: "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf",
action: "homepage",
enterprise: false,
proxy: "http://user:pass@proxy.example.com:8080",
title: "Score detector for reCAPTCHA v3",
}),
});
const { status, data, credits } = await resp.json();
if (status === "success") {
console.log("Token:", data.token);
console.log("User-Agent:", data.user_agent);
console.log("Credits:", credits);
}
cURL
curl -X POST "https://castlebreaker.cc/getRecaptchaV3" \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://antcpt.com/score_detector/",
"sitekey": "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf",
"action": "homepage",
"enterprise": false,
"proxy": "http://user:pass@proxy.example.com:8080",
"title": "Score detector for reCAPTCHA v3"
}'
Integration Example
Use the returned token and browser fingerprint headers in your target request for best results:
import requests
API_KEY = "your_api_key"
# Step 1: Solve reCAPTCHA
solve_resp = requests.post(
"https://castlebreaker.cc/getRecaptchaV3",
headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
json={
"url": "https://accounts.spotify.com/en/login",
"sitekey": "6LfCVLAUAAAAALFwwRnnCJ12DalriUGbj8FW_J39",
"action": "accounts/login",
"enterprise": True,
"proxy": "socks5://user:pass@proxy.example.com:1080",
},
)
solve = solve_resp.json()["data"]
# Step 2: Use token + fingerprint headers in target request
target_headers = {
"User-Agent": solve["user_agent"],
"Sec-CH-UA": solve["sec_ch_ua"],
"Sec-CH-UA-Platform": solve["sec_ch_ua_platform"],
"Sec-CH-UA-Mobile": solve["sec_ch_ua_mobile"],
"Accept-Language": solve["accept_lang"],
}
login_resp = requests.post(
"https://accounts.spotify.com/api/login",
headers=target_headers,
data={
"username": "user@example.com",
"password": "secretpass",
"recaptchaToken": solve["token"],
},
)
print(login_resp.status_code)
Error Handling
import time
def solve_recaptcha(url, sitekey, proxy, max_retries=3, **kwargs):
for attempt in range(max_retries):
try:
resp = requests.post(
"https://castlebreaker.cc/getRecaptchaV3",
headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
json={"url": url, "sitekey": sitekey, "proxy": proxy, **kwargs},
timeout=30,
)
data = resp.json()
if data["status"] == "success":
return data["data"]
elif "insufficient credits" in data["data"].get("message", "").lower():
print("Error: Please add credits to your account")
return None
else:
print(f"Attempt {attempt + 1} failed: {data['data'].get('message')}")
except Exception as e:
print(f"Attempt {attempt + 1} error: {e}")
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
return None
Common Errors
| Status | Message | Cause | Solution |
|---|---|---|---|
400 | Missing required fields | url or sitekey empty | Provide all required fields |
400 | Invalid URL format | Malformed URL | Use full URL with scheme |
400 | Missing required field: proxy | No proxy provided | Provide a valid proxy |
400 | Invalid proxy format | Malformed proxy URL | Check proxy format |
400 | Bad proxy | Proxy not working | Use a different proxy |
401 | Invalid API key | Auth failed | Check your API key |
402 | Insufficient credits | Balance too low | Add credits |
429 | Service Overloaded | Concurrency limit hit | Retry after a moment |
500 | Error fetching token | Solve failed | Retry with backoff |
503 | Service temporarily at capacity | All solvers busy | Retry shortly |
Best Practices
- Use matching headers: Always send
user_agent,sec_ch_ua,sec_ch_ua_platformetc. with your target request — they match the browser that solved the captcha - Use your own proxy: Provide a proxy in the same region as your target for best scores
- Generate just-in-time: Tokens expire in ~2 minutes, solve right before you need it
- Handle errors gracefully: Implement retry logic with exponential backoff
- Set enterprise correctly: Use
falsefor standard reCAPTCHA v3,truefor Enterprise
Next Steps:
- Learn about Castle Tokens
- Try TLS Bypass
- See Python Examples