Was this helpful?
How to fix captcha solving errors
Technical engineer
When working with our service API, one of the most common problems is captcha validation failure: the task remains stuck in processing, returns invalid token, or the target website rejects the solution without a clear reason.
In most cases, the issue is not related to our service itself. Problems usually come from integration mistakes such as incorrectly extracted parameters, session mismatches, wrong task types, or timing issues when submitting the token.
This article covers the most common reasons why captcha solutions fail, along with practical ways to diagnose and fix them when using our API.
Incorrect websiteKey
One of the most common causes of errors is an invalid websiteKey. If the websiteKey is incorrect, our service will return ERROR_RECAPTCHA_INVALID_SITEKEY or fail to solve the captcha.
Signs of the issue:
- the API response contains errorId: 31 or ERROR_RECAPTCHA_INVALID_SITEKEY
- the task stays in processing and never reaches ready
- the target website rejects the token during verification
How to verify:
- open the page source and locate data-sitekey inside g-recaptcha or cf-turnstile elements
- for reCAPTCHA, the key may also appear in the k parameter of requests to recaptcha/api.js
- make sure the value is copied without extra spaces or characters
Incorrect websiteURL
Our service binds captcha solutions to the page URL. If websiteURL is incorrect, the token may become invalid for the target website.
This is especially important for:
- reCAPTCHA (v2, v3, enterprise)
- Cloudflare Turnstile
Best practices:
- always provide the full URL including protocol: https://example.com/page
- keep subdomains in mind: www.example.com and example.com are treated as different domains
- for dynamic websites, verify the final URL after redirects
Incorrect websiteURL often results in the ERROR_PAGEURL response.
Proxy issues
Some captcha types and websites require high-quality proxies. Our service supports two approaches:
- Proxyless tasks (for example, RecaptchaV2TaskProxyless) — proxies are handled on the service side
- Proxy tasks (for example, RecaptchaV2Task) — you provide your own proxies using proxyAddress, proxyPort, and proxyType
Common signs of proxy-related issues:
- ERROR_BAD_PROXY response
- captcha appears to be solved, but the website rejects the token
- captcha is triggered on every request
Recommendations:
- use residential or mobile proxies for complex websites
- avoid public datacenter proxy ranges
- monitor proxy stability and reputation
Expired token
Captcha tokens have a limited lifetime, usually between 1 and 2 minutes. If the token is submitted too late, it becomes invalid.
How to avoid it:
- use the token immediately after receiving ready status
- do not cache solutions between sessions
- request a new captcha through createTask if your workflow introduces delays
Polling the API too frequently
Frequent polling of getTaskResult may cause rate limits or timeouts. The recommended interval is 3–5 seconds.
Possible consequences:
- temporary IP restrictions
- timeout or rate limit errors
- increased solving time
Recommendations:
- keep a 3–5 second interval between polling requests
- use pingback callbacks for automatic result delivery
- handle processing status correctly without interrupting the polling cycle too early
Token injection and callback issues
The received token must be properly injected into the target website. Simply setting the value is not always enough.
Example for reCAPTCHA v2/v3:
javascript
document.getElementById('g-recaptcha-response').value = 'TOKEN';
document.querySelector('form').submit();
Example for Turnstile:
javascript id="jepmyl"
document.querySelector('[name="cf-turnstile-response"]').value = 'TOKEN';
If the captcha uses a callback function, you must trigger that callback instead of only assigning the value.
Signs of the issue:
- the form is not submitted
- the website returns invalid token or verification failed
- browser console errors appear
Incorrect task type
Our service supports multiple captcha types, and each requires the correct task type parameter.
| Captcha | Task Type |
|---|---|
| reCAPTCHA v2 | RecaptchaV2TaskProxyless |
| reCAPTCHA v3 | RecaptchaV3TaskProxyless |
| Cloudflare Turnstile | TurnstileTaskProxyless |
| GeeTest v3/v4 | GeeTestTaskProxyless / GeeTestV4TaskProxyless |
| FunCaptcha | FunCaptchaTaskProxyless |
If the wrong type is used, the API may return ERROR_TASK_NOT_SUPPORTED or ERROR_BAD_PARAMETERS.
How to identify the captcha type:
- inspect widget classes such as g-recaptcha or cf-turnstile
- review loaded scripts in the Network tab
- use the captcha identification guide from the documentation
Dynamically loaded captcha
Modern websites often load captcha widgets only after user interaction.
Signs of dynamic loading:
- the widget does not exist in the initial HTML
- the captcha appears after clicking or logging in
- parameters are passed through JavaScript events
Solutions:
- wait until the captcha element appears before creating the task
- monitor network requests that trigger widget loading
- use explicit waits in your automation scripts
Cookies and session issues
Some anti-bot systems bind captcha validation to the current session. If cookies or IP addresses change during the process, the token may be rejected.
Things to verify:
- the same cookies are used when submitting the token
- the session remains consistent between requests
- the same user-agent is preserved
Our service supports passing cookies using the following format:
key1=value1; key2=value2
Improper API error handling
Our service returns detailed error codes that help identify integration problems quickly.
| Error Code | Meaning | Solution |
|---|---|---|
| ERROR_KEY_DOES_NOT_EXIST | invalid API key | verify the key in your dashboard |
| ERROR_ZERO_BALANCE | insufficient balance | add funds to your account |
| ERROR_BAD_PARAMETERS | invalid task parameters | review the request structure |
| ERROR_CAPTCHA_UNSOLVABLE | captcha could not be solved | verify sitekey and page accessibility |
| ERROR_IP_NOT_ALLOWED | IP address not allowed | add the IP to your whitelist |
Always check errorId in the response: 0 means success, any other value indicates an error.
Conclusion
Most captcha-related issues are caused by integration mistakes rather than problems with the API itself. This checklist helps identify the root cause faster and reduces debugging time.
Quick troubleshooting
| Symptom | Possible Cause | Solution |
|---|---|---|
| ERROR_RECAPTCHA_INVALID_SITEKEY | invalid websiteKey | verify data-sitekey |
| ERROR_PAGEURL | incorrect URL | provide the full HTTPS URL |
| token rejected by the website | expired token or broken session | submit immediately after ready |
| ERROR_BAD_PROXY | low-quality proxy | replace the proxy or use proxyless |
| task stuck in processing | excessive polling | increase the polling interval |
| ERROR_BAD_PARAMETERS | incorrect task type | verify the selected task type |
Core integration principles
- always determine the CAPTCHA type using actual page data
- never modify extracted parameters manually
- keep the same session throughout the entire workflow
- respect API and website rate limits
- log errors and always verify errorId responses
If the issue still persists
- enable request and response logging
- test the task manually in your dashboard
- verify website accessibility from different regions
- contact support with your request payload and API response
Reliable CAPTCHA integration comes down to careful implementation and consistent session handling from start to finish.