Captcha bypass tutorials

Was this helpful?

How to solve Normal Captcha with case sensitivity

Kate Push

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-python library, install or update with:

    bash Copy
    pip 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:

  1. Save the captcha image locally, for example captcha.png
  2. Encode the image to Base64, the library does this automatically
  3. Determine whether the website requires exact letter case
  4. Prepare task parameters with case: true

If you are unsure, check the target website documentation or test different case variations.

Implementation

python Copy
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 Copy
{
   "clientKey": "YOUR_API_KEY",
   "taskId": 74455221488
}

Example response:

json Copy
{
    "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 Copy
{
   "clientKey": "YOUR_API_KEY",
   "taskId": 74455221488
}

Example response:

json Copy
{
    "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 Copy
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

Checklist

  • Latest version of 2captcha-python installed
  • API key retrieved and verified
  • Captcha image saved in supported format and size
  • case: true added to the task
  • Solution tested on the target website
  • reportIncorrect and reportCorrect implemented
  • 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.