Was this helpful?
How to bypass captcha in C#
Tech builder focused on infrastructure, automation, backend systems, and scalable SaaS development
Introduction
Need to add captcha solving to your C# application? The 2captcha-csharp module is the official tool from 2Captcha that handles all the complex work of interacting with the API.
In this guide, we will explain why you should choose this library, how to connect it quickly, and what possibilities it opens for your projects.
General Information
2captcha-csharp is a native C# client for the 2Captcha API. It provides a convenient object-oriented interface for sending recognition tasks and getting results.
Why You Should Use This Module
- Single interface for all captcha types - no need to learn different endpoints, the library abstracts the details
- Full async support - use
async/awaitwithout blocking the main thread - Flexible configuration - set timeouts, polling intervals, callback notifications for your task
- Built-in error handling - clear exceptions instead of raw HTTP responses
- Proxy support - pass proxies right in the captcha object, no extra steps needed
- Up-to-date docs and support - the library is maintained by the 2Captcha team
Environment Setup
Minimum requirements:
- .NET SDK 5.0 or higher
- API key from your 2Captcha account dashboard
Install in one step via NuGet:
bash
dotnet add package 2captcha-csharp
After installation, add the needed using statements to your file:
csharp
using TwoCaptcha;
using TwoCaptcha.Captcha;
How the Module Works
Main Class: TwoCaptcha
All interactions with the service go through an instance of the TwoCaptcha class:
csharp
var solver = new TwoCaptcha("YOUR_API_KEY");
Flexible Behavior Configuration
You can configure the client for your needs:
csharp
var solver = new TwoCaptcha(apiKey)
{
DefaultTimeout = 120, // timeout for regular captchas
RecaptchaTimeout = 600, // separate timeout for reCAPTCHA
PollingInterval = 10, // result polling interval
SoftId = 123, // your software ID for statistics
Callback = "https://your.site/webhook", // URL for async notifications
ExtendedResponse = true // get response in extended JSON
};
Configuration Properties
| Property | Default | Purpose |
|---|---|---|
DefaultTimeout |
120 | Max wait time for regular tasks |
RecaptchaTimeout |
600 | Separate timeout for reCAPTCHA, since they take longer |
PollingInterval |
10 | How often to poll the server for result readiness |
Callback |
null | URL where result will be sent if you do not want to wait in code |
SoftId |
4582 | Your software identifier, helps with support and analytics |
ExtendedResponse |
false | Return more details in response, useful for debugging |
Basic Usage Pattern
Regardless of captcha type, the workflow looks the same:
csharp
using System;
using System.Threading.Tasks;
using TwoCaptcha;
using TwoCaptcha.Captcha;
class Program
{
static async Task Main(string[] args)
{
var apiKey = Environment.GetEnvironmentVariable("APIKEY_2CAPTCHA");
var solver = new TwoCaptcha(apiKey);
// 1. Create object of needed captcha type
var captcha = new YourCaptchaType();
// 2. Set parameters
captcha.SetParam("value");
try
{
// 3. Send and wait for result
await solver.Solve(captcha);
// 4. Use the response
Console.WriteLine("Result: " + captcha.Code);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
}
}
}
This template works for any captcha type, only the class and parameter set change.
Supported Captcha Types
The module covers all popular formats:
- Text based: Normal, Text, Audio
- Google: reCAPTCHA v2, reCAPTCHA v3, Invisible reCAPTCHA
- Cloudflare: Turnstile, Challenge
- Other providers: GeeTest, FunCaptcha, KeyCaptcha, Capy, Lemin, MTCaptcha, DataDome, Amazon WAF and many more
Full list with parameter examples is in the captcha types documentation.
Advanced Features
Async Mode with Callback
If you do not want to block code execution while waiting for a result, set up a Callback:
csharp
solver.Callback = "https://your.site/captcha-result";
await solver.Solve(captcha);
// Result will arrive as a separate POST request to the specified URL
Manual Flow Control
For complex scenarios, low-level control is available:
csharp
var taskId = await solver.Send(captcha); // send only
// ... your logic ...
var result = await solver.GetResult(taskId); // manual polling
Working with Proxies
Many captchas require a request from a specific IP. Pass the proxy right in the object:
csharp
captcha.SetProxy("login:pass@123.123.123.123:8000");
captcha.SetProxyType("HTTP"); // or HTTPS, SOCKS4, SOCKS5
Additional Captcha Parameters
For text and some other types, you can clarify expectations:
csharp
captcha.SetMinLen(4);
captcha.SetMaxLen(20);
captcha.SetCaseSensitive(true);
captcha.SetLang("en");
captcha.SetHintText("Enter only uppercase letters");
Error Handling
The library throws exceptions with clear messages. Always use try-catch:
csharp
try
{
await solver.Solve(captcha);
}
catch (Exception e)
{
// Log the error and decide: retry, notify, or fallback
Console.WriteLine($"Failed: {e.Message}");
}
Common Error Codes
| Code | Meaning | How to Fix |
|---|---|---|
| ERROR_WRONG_USER_KEY | Invalid API key | Check the key in your 2Captcha dashboard |
| ERROR_ZERO_BALANCE | Insufficient balance | Top up your account or enable auto-refill |
| ERROR_NO_SLOT_AVAILABLE | Queue is full | Retry later or increase your bid |
| ERROR_BAD_PARAMETERS | Missing required fields | Check the documentation for your captcha type |
| ERROR_PROXY_CONNECT_REFUSED | Could not connect via proxy | Check proxy format and availability |
| ERROR_CAPTCHA_UNSOLVABLE | Captcha not recognized | Funds are refunded automatically |
Integration Tips
- Store keys securely - use environment variables or secret managers, do not hardcode your API key
- Set timeouts for your task - complex captchas can take longer, do not set limits that are too short
- Add logging - save task IDs and response times for debugging and auditing
- Test in the sandbox - before production launch, check your integration in a test environment
- Watch your balance - set up low balance notifications to avoid downtime
Additional Resources
- Source code on GitHub - examples, issues, releases
- Full API documentation - all endpoints and parameters
- C# examples - ready snippets for each captcha type
- Error reference - explanation of all response codes
- Support - if something goes wrong
Pre-Launch Checklist
- Library installed via NuGet
- API key obtained and saved in an environment variable
- Correct captcha class selected and required parameters configured
- Timeouts and polling interval set for your load
- Exception handling and basic logging implemented
- Solution tested with real parameters from the target site
- Callback or proxy configured if needed
Conclusion
The 2captcha-csharp module is a reliable and convenient way to add captcha solving to any C# application. It hides API complexity behind a simple object-oriented interface, supports async operations, is flexible to configure, and covers all popular captcha types.
Start with basic client setup, pick the captcha type you need, and add error handling, that is enough for stable operation. And when your task grows, the library scales with you: callback notifications, manual flow control, proxies, and extended logging are all supported.
Documentation, code examples, and 2Captcha support will help you quickly handle any scenario.
Automate captcha bypass efficiently and with minimal effort using 2captcha-csharp.