Back to Documentation

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

FieldTypeRequiredDefaultDescription
urlstringYesTarget page URL (e.g. https://accounts.spotify.com/en/login)
sitekeystringYesreCAPTCHA v3 site key
proxystringYesProxy URL (e.g. socks5://user:pass@host:port)
actionstringNo"verify"reCAPTCHA action name (e.g. "login", "homepage")
enterprisebooleanNotruetrue for reCAPTCHA Enterprise, false for standard v3
titlestringNoAutoPage title. Auto-derived from domain if omitted

Supported Proxy Formats

FormatExample
HTTPhttp://user:pass@host:port
HTTPShttps://user:pass@host:port
SOCKS5socks5://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

FieldTypeDescription
data.tokenstringThe solved reCAPTCHA v3 token
data.user_agentstringUser-Agent of the browser that solved it. Use in target request
data.sec_ch_uastringSec-CH-UA header value
data.sec_ch_ua_platformstringSec-CH-UA-Platform header value
data.sec_ch_ua_mobilestringSec-CH-UA-Mobile header value
data.accept_langstringAccept-Language header value
creditsnumberRemaining 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

StatusMessageCauseSolution
400Missing required fieldsurl or sitekey emptyProvide all required fields
400Invalid URL formatMalformed URLUse full URL with scheme
400Missing required field: proxyNo proxy providedProvide a valid proxy
400Invalid proxy formatMalformed proxy URLCheck proxy format
400Bad proxyProxy not workingUse a different proxy
401Invalid API keyAuth failedCheck your API key
402Insufficient creditsBalance too lowAdd credits
429Service OverloadedConcurrency limit hitRetry after a moment
500Error fetching tokenSolve failedRetry with backoff
503Service temporarily at capacityAll solvers busyRetry shortly

Best Practices

  1. Use matching headers: Always send user_agent, sec_ch_ua, sec_ch_ua_platform etc. with your target request — they match the browser that solved the captcha
  2. Use your own proxy: Provide a proxy in the same region as your target for best scores
  3. Generate just-in-time: Tokens expire in ~2 minutes, solve right before you need it
  4. Handle errors gracefully: Implement retry logic with exponential backoff
  5. Set enterprise correctly: Use false for standard reCAPTCHA v3, true for Enterprise

Next Steps: