Was this helpful?
How to solve Normal Captcha with case sensitivity
Technical engineer
Introduction
If you work with text captchas where letter case matters and encounter errors caused by incorrect capitalization, this guide is for you.
The 2Captcha service allows you to solve Normal Captcha through API v2 with support for the case parameter. This is critical for websites that reject answers when uppercase and lowercase letters do not match exactly.
This article explains how to configure and send requests using the official 2captcha-python library.
General Information
Normal Captcha is a classic image-based text captcha where the user must recognize and enter a set of characters.
The main automation issue is that many services ignore letter case by default. If the target website requires exact matching, for example aB3x instead of ab3x, the solution will be rejected.
The solution is to explicitly set the case: true parameter in the ImageToTextTask task. This signals to 2Captcha workers that letter case matters.
Environment Setup
Before you begin, make sure you have:
-
Python 3.7 or higher
-
2captcha-pythonlibrary, install or update with:bashpip install --upgrade 2captcha-python -
API key from your 2Captcha account
-
Captcha image file in JPG, PNG, or GIF format, maximum 100 KB and up to 1000 pixels per side
Page Analysis
For Normal Captcha, you do not need DOM analysis or sitekey extraction. You only need to:
- Save the captcha image locally, for example
captcha.png - Encode the image to Base64, the library does this automatically
- Determine whether the website requires exact letter case
- Prepare task parameters with
case: true
If you are unsure, check the target website documentation or test different case variations.
Implementation
python
import asyncio
import os
import sys
from twocaptcha import AsyncTwoCaptcha
api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')
solver = AsyncTwoCaptcha(api_key, defaultTimeout=60, pollingInterval=5)
async def solve_captcha():
try:
return await solver.normal(
'captcha.png',
numeric=0, # 0 = letters and numbers
minLen=4, # minimum answer length
maxLen=20, # maximum answer length
phrase=0, # 0 = single word
case=1, # IMPORTANT: case sensitivity enabled
math=0, # 0 = no calculations
lang='en', # captcha language
)
except Exception as e:
print(f'Error: {e}')
sys.exit(1)
if __name__ == '__main__':
result = asyncio.run(solve_captcha())
print('Solution code:', result.get('code'))
print('Task ID:', result.get('captchaId'))
Code Explanation
ImageToTextTask Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
type |
String | — | Always ImageToTextTask |
body |
String | — | Base64 image or Data URI |
case |
Boolean | false |
true means answer is case-sensitive |
numeric |
Integer | 0 |
0 = any, 1 = digits only, 2 = letters only, 3 = either/or, 4 = both digits and letters |
phrase |
Boolean | false |
true means answer contains spaces |
math |
Boolean | false |
true for math captchas |
minLength |
Integer | 0 |
Minimum answer length |
maxLength |
Integer | 0 |
Maximum answer length |
comment |
String | — | Hint for the worker |
Feedback on Solving Results
After receiving a response from 2Captcha and validating it on the target website, you should send feedback. This helps improve recognition quality and, in some cases, allows refunds for incorrect solutions.
If the Website Rejected the Solution
Send a POST request to the reportIncorrect endpoint.
Endpoint: https://api.2captcha.com/reportIncorrect
Method: POST
Content-Type: application/json
Example request:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Example response:
json
{
"errorId": 0,
"status": "success"
}
Important: Do not use this method if your success rate is close to zero. This often indicates an issue in your integration logic rather than captcha solutions.
If the Website Accepted the Solution
Send a POST request to the reportCorrect endpoint.
Endpoint: https://api.2captcha.com/reportCorrect
Method: POST
Content-Type: application/json
Example request:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Example response:
json
{
"errorId": 0,
"status": "success"
}
Refund Policy
- Each case is reviewed individually
- Standard captchas are checked against answer correctness
- Token-based captchas are analyzed using worker statistics
- Refunds are not guaranteed for every complaint
- Final refund amounts may differ from the number of submitted reports
Send reports honestly and only after real verification on the target website.
Using Comments for Difficult Cases
If the captcha has a non-standard format, add a hint:
python
result = await solver.normal(
'captcha.png',
case=True,
comment='enter only uppercase letters'
)
The comment will be shown to the worker and improve recognition accuracy.
Common Errors
| Error | Cause | Solution |
|---|---|---|
| Incorrect letter case in response | case: true not specified |
Add the parameter to the task |
| Authorization error | Invalid clientKey |
Verify your API key in 2Captcha account |
| File too large | Image exceeds 100 KB or 1000 px | Compress or crop the image before upload |
| Encoding error | Invalid Base64 or corrupted file | Use base64.b64encode() and verify file path |
| reportIncorrect abuse | Mass reporting with low success rate | Review integration logic before sending reports |
Additional Resources
- Normal Captcha API v2 documentation
- reportIncorrect method, report incorrect solutions
- reportCorrect method, report correct solutions
- 2captcha-python on GitHub
- Contact support
Checklist
- Latest version of
2captcha-pythoninstalled - API key retrieved and verified
- Captcha image saved in supported format and size
-
case: trueadded to the task - Solution tested on the target website
-
reportIncorrectandreportCorrectimplemented - Logging configured for debugging if needed
Conclusion
Accurate case handling in Normal Captcha is a common source of automation failures. The case: true parameter in the ImageToTextTask API v2 task allows you to explicitly specify that uppercase and lowercase letters must match exactly.
Use the official 2captcha-python library for easier integration, handle errors and timeouts properly, and your scripts will reliably solve captchas even on strict websites.
Do not forget to send feedback through reportIncorrect and reportCorrect. This improves service quality and helps recover funds for incorrect solutions.
Bypass any text captcha using Python captcha solving.