CaptchaFox

Solve CaptchaFox challenges and get a verification token

Overview

CaptchaFox is a GDPR-compliant, European bot-protection CAPTCHA. It runs a token-based challenge (slide, one-click, or audio) backed by proof-of-work and behavioral signals, then returns a verification token the site validates server-side.

Our API solves CaptchaFox over a pure-HTTP path and returns the token for you to submit. It works across all CaptchaFox-protected sites, including United Internet properties (mail.com, gmx.com, web.de) which use a dedicated CaptchaFox host - routing is handled automatically.

Supported Task Types

Task TypeProxy RequiredDescription
CaptchaFoxTaskProxyLessNoUses our proxy pool
CaptchaFoxTaskYesRequires your proxy

Create Task

Endpoint: POST /createTask

Request Parameters

ParameterTypeRequiredDescription
clientKeyStringYesYour API key
task.typeStringYesTask type (see table above)
task.websiteURLStringYesPage URL containing the captcha
task.websiteKeyStringYesCaptchaFox site key (sk_...)
task.proxyStringNoRequired for CaptchaFoxTask. See Proxy Format

Basic Request

{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "CaptchaFoxTaskProxyLess",
    "websiteURL": "https://signup.gmx.com/",
    "websiteKey": "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }
}

Request with Proxy

{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "CaptchaFoxTask",
    "websiteURL": "https://signup.gmx.com/",
    "websiteKey": "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "proxy": "host:port:user:pass"
  }
}

Response

{
  "errorId": 0,
  "taskId": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}

Get Task Result

Endpoint: POST /getTaskResult

Request

{
  "clientKey": "YOUR_API_KEY",
  "taskId": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}

Response (Ready)

{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "1ff8e270a3b1c4..."
  }
}

The token format differs by site (a MAM_-prefixed token on United Internet properties, a hex token elsewhere). Both are valid - submit whichever you receive without modification.

Code Examples

# Create task
curl -X POST https://api.capbypass.pro/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_API_KEY",
    "task": {
      "type": "CaptchaFoxTaskProxyLess",
      "websiteURL": "https://signup.gmx.com/",
      "websiteKey": "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
  }'

# Get result
curl -X POST https://api.capbypass.pro/getTaskResult \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID"
  }'
import requests
import time

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.capbypass.pro"

def solve_captchafox(website_url, website_key, proxy=None):
    # Create task
    task = {
        "type": "CaptchaFoxTask" if proxy else "CaptchaFoxTaskProxyLess",
        "websiteURL": website_url,
        "websiteKey": website_key,
    }
    if proxy:
        task["proxy"] = proxy  # host:port:user:pass

    response = requests.post(f"{BASE_URL}/createTask", json={
        "clientKey": API_KEY,
        "task": task,
    })
    task_id = response.json()["taskId"]

    # Poll for result
    while True:
        result = requests.post(f"{BASE_URL}/getTaskResult", json={
            "clientKey": API_KEY,
            "taskId": task_id,
        }).json()

        if result.get("status") == "ready":
            return result["solution"]["token"]

        if result.get("errorId"):
            raise Exception(f"Error: {result.get('errorDescription')}")

        time.sleep(2)

# Usage
token = solve_captchafox(
    "https://signup.gmx.com/",
    "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)
print(f"Token: {token[:50]}...")
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://api.capbypass.pro';

async function solveCaptchaFox(websiteURL, websiteKey, proxy) {
  // Create task
  const task = {
    type: proxy ? 'CaptchaFoxTask' : 'CaptchaFoxTaskProxyLess',
    websiteURL,
    websiteKey,
  };
  if (proxy) task.proxy = proxy; // host:port:user:pass

  const createRes = await fetch(`${BASE_URL}/createTask`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: API_KEY, task }),
  });
  const { taskId } = await createRes.json();

  // Poll for result
  while (true) {
    const resultRes = await fetch(`${BASE_URL}/getTaskResult`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ clientKey: API_KEY, taskId }),
    });
    const result = await resultRes.json();

    if (result.status === 'ready') {
      return result.solution.token;
    }

    await new Promise((r) => setTimeout(r, 2000));
  }
}

// Usage
const token = await solveCaptchaFox(
  'https://signup.gmx.com/',
  'sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
);

How to Find the Website Key

The site key is the sk_... value passed to the CaptchaFox widget.

  1. HTML attribute: look for the widget element's data-sitekey:
<div class="captchafox" data-sitekey="sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"></div>
  1. Script tag: the widget loads from cdn.captchafox.com/api.js. Filter the Network tab for captchafox.

  2. JavaScript render: sites that render programmatically pass it to captchafox.render():

captchafox.render('#container', { sitekey: 'sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' });

Submitting the Token

CaptchaFox writes the token into a hidden form field named cf-captcha-response. Set that field to the token you received, then submit the form (or pass the token to the widget's success callback):

document.querySelector('[name="cf-captcha-response"]').value = token;

Typical Solve Time

  • Average: 1 - 10 seconds
  • Maximum timeout: 60 seconds

Error Codes

Error CodeDescription
ERROR_KEY_DOES_NOT_EXISTInvalid API key
ERROR_ZERO_BALANCEInsufficient balance
ERROR_CAPTCHA_UNSOLVABLEChallenge could not be solved
ERROR_TASK_NOT_FOUNDTask ID not found
ERROR_INVALID_TASK_DATAMissing or invalid parameters
ERROR_PROXY_NOT_DEFINEDProxy required for a non-ProxyLess task type — use the ProxyLess variant or supply task.proxy
ERROR_PROXY_CONNECTION_FAILEDCould not connect through your proxy (refused, unreachable, or bad credentials) - check the proxy is alive and reachable
ERROR_PROXY_BANNEDThe target blocked your proxy IP (datacenter or flagged) - use a residential or mobile proxy
ERROR_INVALID_DEVELOPER_KEYThe provided developerKey is invalid or disabled
ERROR_WRONG_TASK_TYPEWrong task type for this site (e.g., standard vs enterprise)
ERROR_TIMEOUTTask exceeded timeout
ERROR_TASK_QUEUE_FULLServer is at capacity — retry in a few seconds
ERROR_TASK_TYPE_COMING_SOONTask type is not yet available
ERROR_TASK_TYPE_INACTIVETask type is currently disabled
ERROR_WORKER_CRASHEDSolver process exited mid-solve — balance refunded, safe to retry
ERROR_INTERNALInternal server error

Best Practices

Tokens are short-lived

CaptchaFox tokens expire roughly 120 seconds after issuance. Submit the token immediately after receiving the solution.

  1. Match the page URL - use the exact URL where the widget appears; the host determines challenge routing.

  2. Submit the token unmodified - do not strip the MAM_ prefix or alter the hex token.

  3. Use a proxy for geo-sensitive sites - submit CaptchaFoxTask with your own proxy when the target binds sessions to a region.

Next Steps

On this page