Your sign-up or login POST comes back rejected because the form needs a CaptchaFox token and your script has none. The CapBypass API returns that token from two inputs, the page URL and the sk_... sitekey. Over the last 60 days CaptchaFoxTask solved 99.1% of tasks with an average of 1.5 s per token. This post covers finding the sitekey, calling the API from curl, Python and TypeScript, submitting the token, and what to check when CaptchaFox is not working.
What you need from the page
Two values, both visible in DevTools on the page that shows the widget:
-
websiteURL: the URL of that page, the one the user actually sees with the captcha. Not the API endpoint the form posts to. -
websiteKey: the CaptchaFox sitekey, a string starting withsk_. Search the page source (Ctrl+Fsk_) or the Network tab requests made by the widget.
The sitekey is tied to the site, so a key copied from a different page or a different site of the same company is the first thing to rule out when tokens get rejected.
Proxyless or your own proxy
| Task type | Proxy | When to use it |
|---|---|---|
CaptchaFoxTaskProxyLess | ours | default, nothing to configure |
CaptchaFoxTask | yours, proxy field required | the solve must come from a specific IP or country |
Two gateway rules save debugging time. A CaptchaFoxTask without a proxy field fails at createTask with ERROR_PROXY_NOT_DEFINED. A proxy sent on CaptchaFoxTaskProxyLess is dropped without an error, so if you think you are testing your proxy on the ProxyLess type, you are not. The proxy string is host:port:user:pass (other accepted forms are in the proxy format reference); anything else returns ERROR_PROXY_FORMAT.
Solving with CapBypass
Create the task, then poll getTaskResult until status is ready. With curl:
curl -s https://api.capbypass.pro/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "'"$CAPBYPASS_API_KEY"'", "task": { "type": "CaptchaFoxTaskProxyLess", "websiteURL": "https://example.com/signup", "websiteKey": "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }' # {"errorId":0,"taskId":"f47ac10b-58cc-4372-a567-0e02b2c3d479"} curl -s https://api.capbypass.pro/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "'"$CAPBYPASS_API_KEY"'", "taskId": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}' # {"errorId":0,"status":"ready","solution":{"token":"1ff8e270a3b1c4..."}} The SDKs do the create and poll in one call. Python (SDK docs), pip install capbypass-sdk, here on your own proxy:
import os from capbypass import CapBypass from capbypass.errors import SolverError client = CapBypass(api_key=os.environ["CAPBYPASS_API_KEY"]) try: solution = client.solve({ "type": "CaptchaFoxTask", "websiteURL": "https://example.com/signup", "websiteKey": "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "proxy": os.environ["MY_PROXY"], # host:port:user:pass }, timeout=60) print(solution["token"]) except SolverError as e: print("failed, create a new task:", e) TypeScript (SDK docs), npm i @capbypass/sdk:
import { CapBypassClient, TaskType } from '@capbypass/sdk'; const client = new CapBypassClient({ apiKey: process.env.CAPBYPASS_API_KEY }); const solution = await client.solve({ type: TaskType.CAPTCHA_FOX_PROXYLESS, websiteURL: 'https://example.com/signup', websiteKey: 'sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', }, 60); console.log(solution.token); A 60 s timeout is generous here. Over the last 7 days the median CaptchaFoxTask solve took 0.9 s and 95% finished within 5.3 s, so a manual loop can poll every 1 s. The polling post has the full loop with error handling.
Submitting the token
The token goes into the same request a browser would send after the widget turns green. The field name depends on the site, so copy it from that request in DevTools (solve it once by hand and look at the POST body). Then:
import requests resp = requests.post("https://example.com/api/signup", data={ "email": "user@example.com", "captcha_field_from_devtools": solution["token"], }) print(resp.status_code) Submit the token exactly as returned. Some sites issue a MAM_-prefixed token, others a plain hex string. Both are valid, and stripping or decoding the prefix breaks it. Request a new token for each submit rather than storing one.
Bonus: +5% credits on every top-up
New to CapBypass? Apply code
WELCOME_2026at checkout for an extra 5% in credits on every top-up, with no minimum and no expiry. Redeem it on the top-up page and put it toward your firstCaptchaFoxTaskProxyLesssolves.
CaptchaFox not working: what to check
Go through these in order, and change one input at a time so you know which fix worked.
-
createTaskreturns an error. ReaderrorCodebefore polling.ERROR_PROXY_NOT_DEFINEDandERROR_PROXY_FORMATare covered above. An emptywebsiteURLorwebsiteKeyis accepted atcreateTaskand then fails as a task, so check both are set before you send. - The task fails with
ERROR_CAPTCHA_UNSOLVABLE. It happened on 1.1% ofCaptchaFoxTasktasks over the last 7 days. Failed tasks are refunded, so create a new task instead of re-polling the oldtaskId. -
ERROR_PROXY_CONNECTION_FAILED. The solver could not connect through your proxy: it is down, refused the connection, or the credentials are wrong. Test it withcurl -xfrom another machine. -
ERROR_PROXY_BANNED. The site blocked your proxy IP, usually a datacenter range. Switch to a residential or mobile proxy, or toCaptchaFoxTaskProxyLess. - Token returned, site still rejects it. Check the sitekey and URL come from the page the form is on, the token is sent unmodified in the right field, and it was used within seconds. If you solved through your own proxy and the site compares IPs, send the final request through that proxy too.
Use this on sites you own or have permission to test. Field reference and error table: CaptchaFox docs. For the create, poll and submit model in general, see how a captcha-solving API works, and per-solve prices are on the pricing page.
Originally published on capbypass.pro. CapBypass is an AI-powered captcha-solving API for reCAPTCHA, hCaptcha, Cloudflare Turnstile and AWS WAF.

