CaptchaFox is one of the newer interactive CAPTCHAs you'll see in the wild — and unlike image grids or simple checkboxes, it requires a real browser-like flow to solve. The good news? The CaptchaAI API handles the heavy lifting for you. In this post, we'll wire it all up in just a few minutes.
What is CaptchaFox?
CaptchaFox is a privacy-focused, interactive CAPTCHA that loads a challenge from its own API and expects a token back from the user. It typically appears as:
An interactive challenge rendered in the browser
A network call to
api.captchafox.comthat reveals the sitekeyA token-based response that must be submitted to the target site
A returned User-Agent that must match when you submit the token
The last point is the one that trips most people up, so pay attention.
Prerequisites
You'll need:
A CaptchaAI account — sign up here.
Your API key from the dashboard.
A working HTTP/HTTPS or SOCKS proxy (this is required for CaptchaFox).
Python 3 +
requests.
Step 1 — Extract the Sitekey
Open your browser DevTools → Network tab → trigger the CaptchaFox challenge → look for a request named challenge.
The URL will look something like:
https://api.captchafox.com/captcha/sk_bo3q016TDv4Jey6fibTVChVS9z-cYdCO/challenge
The sitekey is the segment between /captcha/ and /challenge:
sk_bo3q016TDv4Jey6fibTVChVS9z-cYdCO
Also grab the full page URL where the challenge is rendered.
Step 2 — Submit the Task to CaptchaAI
Critical: CaptchaFox requires a proxy. You must pass your own proxy in the request, and you must use the same proxy later when submitting the token.
import requests
params = {
'key': 'YOUR_API_KEY',
'method': 'captchafox',
'pageurl': 'https://example.com/login',
'sitekey': 'sk_bo3q016TDv4Jey6fibTVChVS9z-cYdCO',
'proxy': 'user:[email protected]:8080',
'proxytype': 'HTTP',
'json': '1'
}
response = requests.get('https://ocr.captchaai.com/in.php', params=params)
result = response.json()
task_id = result['request']
print('Task ID:', task_id)
A successful response looks like:
{ "status": 1, "request": "74965409378" }
Step 3 — Poll for the Solution
Wait around 15 seconds, then poll the result endpoint:
import time, requests
time.sleep(15)
params = {
'key': 'YOUR_API_KEY',
'action': 'get',
'id': task_id,
'json': '1'
}
result = requests.get('https://ocr.captchaai.com/res.php', params=params).json()
if result['status'] == 1:
token = result['request']
user_agent = result.get('user_agent')
print('Token:', token)
print('User-Agent:', user_agent)
This time, the response has two values you need:
{
"status": 1,
"request": "0cAFcWeA7RO4a8OGOwOQ9...Ew9fQvkJ46JRE8w",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 144.0.7559.96 Safari/537.36"
}request→ the CaptchaFox tokenuser_agent→ the User-Agent you must use when submitting the token
Step 4 — Submit the Token
When you POST the token back to the target site, include the user_agent in your request headers:
headers = {
'User-Agent': user_agent
}
data = {
'captchafox_token': token
}
response = requests.post('https://example.com/api/verify', headers=headers, data=data)
print(response.text)
If the User-Agent doesn't match what CaptchaAI used to solve, the verification will fail. So always reuse the returned user_agent.
Common Pitfalls
Forgot the proxy → CaptchaFox will reject the task. Always include
proxyandproxytype.User-Agent mismatch → The token is tied to the User-Agent. Use the one returned by the API.
ERROR_WRONG_CAPTCHA_ID → The sitekey is wrong, or the challenge has expired. Re-extract from a live network request.
A Few Pro Tips
Tip: Always capture the sitekey from a live network request — page source is often stale or obfuscated.
Tip: If your proxy requires authentication, use the user:password@host:port format exactly.
Tip: CaptchaFox is sensitive to IP reputation. Use residential or mobile proxies for best results.
Tip: Match the pageurl exactly, including query parameters — the challenge is bound to that context.
Wrapping Up
CaptchaFox has a few more moving parts than a simple checkbox CAPTCHA, but the loop is the same:
Extract sitekey → submit task with proxy → poll for token + User-Agent → submit token with matched User-Agent
Get that right and you'll be sailing through CaptchaFox challenges in no time.
For the complete API specification, check out the CaptchaAI API Docs and select CaptchaFox from the sidebar.
