Skip to content

CaptchaFox

A widget response aligned with your submitting IP. Read the widget's public site key and pair it with its page URL. This task requires the proxy your token submission will use.

POST /createTask · example
{
  "clientKey": "capzy_YOUR_API_KEY",
  "task": {
    "type": "CaptchaFoxTask",
    "websiteURL": "https://example.com/signup",
    "websiteKey": "sk_xxxxxxxxxxxxxxxxxxx",
    "proxyType": "http",
    "proxyAddress": "123.45.67.89",
    "proxyPort": "8080",
    "proxyLogin": "user",
    "proxyPassword": "pass"
  }
}

Illustrative values. Replace the inputs with values from your current integration.

Page URL + site key + proxyYour session proxy requiredCaptchaFox token

Find the CaptchaFox widget key.

Read the widget's public site key and pair it with its page URL. This task requires the proxy your token submission will use.

Your API key authenticates Capzy.
Provider keys, challenge IDs, images, and session values belong inside task.

Read the public site key from markup or setup.

  1. In Elements, find the CaptchaFox widget's data-sitekey. For dynamic setup, inspect the widget's initialization options in Sources.
  2. Copy the public key into websiteKey and the complete form page URL into websiteURL.
  3. If you manage the integration, compare it with the public key configured for this widget.
Input collection example - replace illustrative values
<div class="captchafox" data-sitekey="YOUR_PUBLIC_SITE_KEY"></div>

The markup illustrates the key to inspect; retain the existing site's actual widget setup.

Provider integration documentation
How CaptchaFox works

CaptchaFox is a privacy-focused captcha service. It shows a checkbox and may present slide puzzles or emoji matching challenges.

Capzy's proprietary solver returns valid CaptchaFox tokens. Fast token solve at ~1.3s on average.

  • Fast token solve
  • ~1.3s solve time
  • Standard + Enterprise variants

Know what goes in.

Choose a field to see its purpose, where to get it, and its place in the request. Optional values omitted from the example can be added when your flow uses them.

Keep your proxy exit and session identity consistent when using this result.

Request authentication

Required task inputs

Optional context

Proxy connection

websiteURL

stringRequired

The page URL

Where it comes from

Copy the full page URL from the address bar or the document request in Network, including the path where this flow runs.

Open the input guide
Example valuehttps://example.com/signup
POST /createTask · selected configuration
{
  "clientKey": "capzy_YOUR_API_KEY",
  "task": {
    "type": "CaptchaFoxTask",
    "websiteURL": "https://example.com/signup",
    "websiteKey": "sk_xxxxxxxxxxxxxxxxxxx",
    "proxyType": "http",
    "proxyAddress": "123.45.67.89",
    "proxyPort": "8080",
    "proxyLogin": "user",
    "proxyPassword": "pass"
  }
}

The selected field is highlighted when present. Preserve the declared value type and current challenge context.

Make your first request.

Create the task, keep its taskId, and poll until status is ready. Then read the selected variant's solution.

More examples
  1. Create the task

    Send clientKey and the selected task to /createTask from your server. Keep the returned taskId.

  2. Wait for the solution

    Send that same key and ID to /getTaskResult. While processing, wait two seconds before checking again. Stop on Ready or an error.

  3. Apply the result

    Place solution.token in the original cf-captcha-response field or configured callback, then submit that form through the same proxy exit used for solving.

solve_captchafox.py
import json, os, time
import requests

API = "https://api.capzy.ai"
KEY = os.environ["CAPZY_API_KEY"]
task = json.loads("{\"type\":\"CaptchaFoxTask\",\"websiteURL\":\"https://example.com/signup\",\"websiteKey\":\"sk_xxxxxxxxxxxxxxxxxxx\",\"proxyType\":\"http\",\"proxyAddress\":\"123.45.67.89\",\"proxyPort\":\"8080\",\"proxyLogin\":\"user\",\"proxyPassword\":\"pass\"}")

def call(path, payload):
    response = requests.post(f"{API}/{path}", json={"clientKey": KEY, **payload}, timeout=30)
    response.raise_for_status()
    data = response.json()
    if data.get("errorId", 0) or data.get("status") == "failed":
        raise RuntimeError(data.get("errorDescription") or data.get("errorCode") or "Task failed")
    return data

created = call("createTask", {"task": task})
for attempt in range(60):
    result = call("getTaskResult", {"taskId": created["taskId"]})
    if result.get("status") == "ready":
        solution = result["solution"]
        print(solution)
        break
    time.sleep(2)
else:
    raise TimeoutError("Task is still processing; keep the taskId to check it later.")

Before runningReplace all illustrative inputs with your captured values. Set CAPZY_API_KEY in your environment. Install requests with pip install requests.

Polling and failuresThe example checks HTTP/API failures, uses 30-second request timeouts, and stops after 60 result checks. Retain taskId if your task is still processing.

Understand what comes back.

Follow this task from creation to completion. Response fields and usage follow your selected request variant.

CaptchaFox token

Place solution.token in the original cf-captcha-response field or configured callback, then submit that form through the same proxy exit used for solving.

string
The solved CaptchaFox token
POST /getTaskResult · example response
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "<long CaptchaFox token string>"
  }
}

Illustrative values. Additional metadata may be returned; only Ready contains a completed solution.

Submit cf-captcha-response

CaptchaFox's default form field is cf-captcha-response. Keep the original form and submit the returned token for server verification.

Execution context result is the parsed Ready response from the polling example. session, when referenced, is your existing requests.Session (or browser-compatible session) with the original cookie jar, headers, and solving proxy configured in session.proxies for both http and https. Keep this client for the complete flow. task is the task object you submitted. For Shape, action_body is the original protected request body as bytes or a string, with its original Content-Type in session.headers. Install curl_cffi when the fragment imports it; match the target's required browser/TLS identity.

Use the result · Python
token = result["solution"]["token"]
# Keep the original form's action, other fields, and session.
response = session.post("https://target.example.com/submit", data={
    "cf-captcha-response": token,
    # Add the original application form fields here.
}, timeout=30)

When something doesn't work.

Check your captured values, the selected variant, and the response before starting another task.

Connect CaptchaFox to your workflow.

Get your Capzy API key and use this guide's integration.

$1.00Per 1,000 solves
5.9sAverage solve time

CaptchaFoxTask · Live configuration