«SolveCaptcha» API documentation

Captcha solver API

Service is a human-powered and AI recognition service. Service provides low prices and high accuracy for bypass CAPTCHAs. The service workers human labor for recognition tasks and can recognize any captcha readable by a human. The service supports recognition of various captcha types, including Google reCAPTCHA, FunCaptcha, Cloudflare bypass (Cloudflare Turnstile, Cloudflare Challenge), and others. Discover seamless automatic captcha solving with AI-powered auto web unblock technology!

  • Customer uploading a captcha to a service You send a captcha on service
  • Service generating and returning a captcha ID Server stores your captcha and returns you the ID of your request
  • Worker solving the captcha task Service solves the captcha and sends the answer back to service
  • Customer requesting the captcha solution using the ID You are sending a request to a server using the ID to get the answer
  • «SolveCaptcha» API integration Easy Integration

    Comprehensive API documentation and ready-to-use libraries make integration a breeze. We offer libraries for popular programming languages, with new ones continuously added to expand support.

  • «SolveCaptcha» is a cheap service Cheap

    Service combines AI and human solvers, offering the most cheap bypass service.

  • «SolveCaptcha» is a reliable service Reliability

    With 99.99% uptime, our API is trusted by over 100 companies daily, ensuring you have uninterrupted service whenever you need it.

  • «SolveCaptcha» browser Extension Browser Extension

    Solve CAPTCHAs automatically in the background without coding knowledge. Ideal for non-technical users and perfect for those using Puppeteer for automation.

Image CAPTCHA» logo Image CAPTCHA Pricing $0.5 - $1 Speed 4 sec.
«Arkose Labs Captcha (FunCaptcha)» logo Arkose Labs Captcha (FunCaptcha) Pricing $2.99 - $50 Speed 27 sec.
«GeeTest CAPTCHA» logo GeeTest CAPTCHA Pricing $2.99 Speed 14 sec.
«Cloudflare Turnstile» logo Cloudflare Turnstile Pricing $1.45 Speed 15 sec.

SOLVECAPTCHA.com API

SolveCaptcha is a human-powered image and CAPTCHA recognition service. SolveCaptcha's main purpose is solving your CAPTCHAs in a quick an accurate way by human employees, but the service is not limited only to CAPTCHA solving. You can convert to text any image that a human can recognize.

Introduction

We provide an API that allows you to automate the process and integrate your software with our service.

There are few simple steps to solve your captcha or recognize the image:

  1. Send your image or captcha to our server.
  2. Get the ID of your task.
  3. Start a cycle that checks if your task is completed.
  4. Get the result.

Rates

Our rates depend on type of captcha that you want to solve and the method used. Rate for image captcha also depends on current service load.

Type of captcha/method Rate per 1000 Description
Image Captcha
Text Captcha
$0.5-$1 The rate is flexible and depends on current load of the service. You can see current rate and limit max rate in your account settings.
Big Captcha $1 Big captcha is an image that has sum of height and width more than 400px. The method is the same as for Image Captcha.
Grid method
Canvas method
ClickCaptcha
$1.2 The rate applies to any captcha where you need to click images.
RotateCaptcha $0.5 The rate applies to any captcha where you need to rotate images.
reCAPTCHA V2 $2.99 The rate applies to Google's reCAPTCHA V2 solved via token.
reCAPTCHA V3 $2.99 The rate applies to reCAPTCHA V3 solved via token.
hCaptcha $2.99 The rate applies to hCaptcha solved via token.
Cloudflare Turnstile $2.99 The rate applies to Cloudflare Turnstile solved via token.
FunCaptcha $2.99 The rate applies to FunCaptcha solved via token.
GeeTest
GeeTest v4
$2.99 The rate applies to Geetest and Geetest V4 solved via token.
KeyCaptcha $2.99 The rate applies to KeyCaptcha.

Solving Captchas

The process of solving captchas with SolveCaptcha is really easy and it's mostly the same for all types of captchas:

  1. Get your API key from your account settings page. Each user is given a uniqe authentication token, we call it API key. It's a 32-characters string that looks like: 1abc234de56fab7c89012d34e56fa7b8 This key will be used for all your requests to our server.
  2. Submit a HTTP POST request to our API URL: https://api.solvecaptcha.com/in.php with parameters corresponding to the type of your captcha.
    Server will return captcha ID or an error code if something gone wrong.
  3. Make a timeout: 20 seconds for reCAPTCHA, 5 seconds for other types of captchas.
  4. Submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.
    If captha is already solved server will return the answer in format corresponding to the type of your captcha.
    By default answers are returned as plain text like: OK|Your answer. But answer can also be returned as JSON {"status":1,"request":"TEXT"} if json parameter is used.
    If captcha is not solved yet server will return CAPCHA_NOT_READY result. Retry your request after 5 seconds.
    If something gone wrong server will return an error code.

Image Captcha

Image Captcha is an image that contains distored but human-readable text. To solve the captcha user have to type the text from the image.

To solve the captcha with our service you have to submit the image with HTTP POST request to our API URL: https://api.solvecaptcha.com/in.php
Server accepts images in multipart or base64 format.

Multipart sample form

<form method="post" action="https://api.solvecaptcha.com/in.php" enctype="multipart/form-data">
<input type="hidden" name="method" value="post">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
The CAPTCHA file:
<input type="file" name="file">
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY is Your API key.

Base64 sample form

<form method="post" action="https://api.solvecaptcha.com/in.php">
<input type="hidden" name="method" value="base64">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
The CAPTCHA file body in base64 format:
<textarea name="body">BASE64_FILE</textarea>
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY is your API key.

BASE64_FILE is base64-encoded image body.

You can provide additional parameters with your request to define what kind of captcha you're sending and to help workers to solve your captcha correctly. You can find the full list of parameters in the table below.

If everything is fine server will return the ID of your captcha as plain text, like: OK|2122988149 or as JSON {"status":1,"request":"2122988149"} if json parameter was used.

If something gone wrong server will return an error. See Error Handling chapter for the list of errors.

Make a 5 seconds timeout and submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php providing the captcha ID. The list of parameters is in the table below.

If everything is fine and your captcha is solved server will return the answer as plain text, like: OK|TEXT or as JSON {"status":1,"request":"TEXT"} if json parameter was used.

Otherwise server will return CAPCHA_NOT_READY that means that your captcha is not solved yet. Just repeat your request in 5 seconds.

If something gone wrong server will return an error. See Error Handling chapter for the list of errors.

List of POST request parameters for https://api.solvecaptcha.com/in.php

POST parameter Type Required Description
key String Yes your API key
method String Yes post - defines that you're sending an image with multipart form
base64 - defines that you're sending a base64 encoded image
phrase Integer
Default: 0
No 0 - captcha contains one word
1 - captcha contains two or more words
regsense Integer
Default: 0
No 0 - captcha in not case sensitive
1 - captcha is case sensitive
numeric Integer
Default: 0
No 0 - not specified
1 - captcha contains only numbers
2 - captcha contains only letters
3 - captcha contains only numbers OR only letters
4 - captcha contains both numbers AND letters
calc Integer
Default: 0
No 0 - not specified
1 - captcha requires calculation (like type the result 4 + 8 = )
min_len Integer
Default: 0
No 0 - not specified
1..20 - minimal number of symbols in captcha
max_len Integer
Default: 0
No 0 - not specified
1..20 - maximal number of symbols in captcha
language Integer
Default: 0
No 0 - not specified
1 - Cyrillic captcha
2 - Latin captcha
textinstructions String
Max 140 characters
Endcoding: UTF-8
No Text will be shown to worker to help him to solve the captcha correctly.
For example: type red symbols only.
imginstructions Image
Max 100x100px, 25 kB
No Image will be shown to worker to help him to solve the captcha correctly.
Server accepts images from multipart form or base64-encoded.
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled res.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications.

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

Text Captcha

Text Captcha is a type of captcha that is represented as text and doesn't contain images. Usually you have to answer a question to pass the verification.

For example: "If tomorrow is Saturday, what day is today?".

To solve text captcha with our service you have to submit the text as a value of textcaptcha parameter with HTTP POST request to our API URL: https://api.solvecaptcha.com/in.php

Sample form for Text Captcha


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

<body>
<form method="post" action="https://api.solvecaptcha.com/in.php" enctype="multipart/form-data" accept-charset="UTF-8">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
<input type="text" name="textcaptcha" value="If tomorrow is Saturday, what day is today?">
<input type="submit" value="Send and get the ID">
</form>
</body>
</html>

YOUR_APIKEY is your API key.

You can provide additional parameters with your request to tell us more about your captcha and to help workers to solve it correctly. You can find the full list of parameters in the table below.

If everything is fine server will return the ID of your captcha as plain text, like: OK|2122988149 or as JSON {"status":1,"request":"2122988149"} if json parameter was used.

If something gone wrong server will return an error. See Error Handling chapter for the list of errors.

Make a 5 seconds timeout and submit a GET request to our API URL: https://api.solvecaptcha.com/res.php providing the captcha ID. The list of parameters is in the table below.

If everything is fine and your captcha is solved server will return the answer as plain text, like: OK|TEXT or as JSON {"status":1,"request":"TEXT"} if json parameter was used.

Otherwise server will return CAPCHA_NOT_READY that means that your captcha is not solved yet. Just repeat your request in 5 seconds.

If something gone wrong server will return an error. See Error Handling chapter for the list of errors.

List of POST request parameters for https://api.solvecaptcha.com/in.php

POST parameter Type Required Description
key String Yes your API key
language Integer
Default: 0
No 0 - not specified
1 - Cyrillic (Russian) captcha
2 - Latin captcha
textcaptcha String
Max 140 characters
Endcoding: UTF-8
No Text will be shown to worker to help him to solve the captcha correctly.
For example: type red symbols only.
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled res.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications.

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

reCAPTCHA V2

reCAPTCHA V2 also known as I'm not a robot reCAPTCHA is a very popular type of captcha that looks like this:

Solving reCAPTCHA V2 with our new method is pretty simple:

  • Look at the element's code at the page where you found reCAPTCHA.

  • Find a link that begins with www.google.com/recaptcha/api2/anchor or find data-sitekey parameter.

  • Copy the value of k parameter of the link (or value of data-sitekey parameter).

  • Submit a HTTP GET or POST request to our API URL: https://api.solvecaptcha.com/in.php with method set to userrecaptcha and provide the value found on previous step as value for googlekey and full page URL as value for pageurl. Sending proxies is not obligatory ar the moment but it's recommended.
    You can find the full list of parameters in the table below.

    Request URL example:

    https://api.solvecaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=userrecaptcha&googlekey=6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-&pageurl=http://mysite.com/page/with/recaptcha?appear=1&here=now
  • If everything is fine server will return the ID of your captcha as plain text, like: OK|2122988149 or as JSON {"status":1,"request":"2122988149"} if json parameter was used.
    Otherwise server will return an error code.

  • Make a 15-20 seconds timeout then submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.
    The full list of parameters is in the table below.

    If captha is already solved server will respond in plain text or JSON and return the answer token that looks like:

    03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB-50GQHPEBJUHNnhJyDzwRoRAkVzrf7UkV8wKCdTwrrWqiYDgbrzURfHc2ESsp020MicJTasSiXmNRgryt-gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3-egcplD1uLGh79wC34RF49Ui3eHwua4S9XHpH6YBe7gXzz6_mv-o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q

    If captcha is not solved yet server will return CAPCHA_NOT_READY result. Retry your request after 5 seconds.

    If something gone wrong server will return an error code.

  • Locate the element with id g-recaptcha-response and make it visible deleting display:none parameter.

    Please note: sometimes content on the page is generated dynamically and you will not see this element in html source.
    In such cases you have to explore javascript code that generates the content. "Inspect" option in Google Chrome can help in that.

    As an alternative you can just use javascript to set the value of g-recaptcha-response field:

    document.getElementById("g-recaptcha-response").innerHTML="TOKEN_FROM_SOLVECAPTCHA";

  • An input field will appear on the page. And you just have to paste the answer token to that field and submit the form.

  • Congratulations, you've passed the recaptha

reCAPTCHA Callback

Sometimes there's no submit button and a callback function is used isntead of this. The function is executed when reCAPTCHA is solved.

Callback function is usually defined in data-callback parameter of reCAPTCHA, for example:

data-callback="myCallbackFunction"

Or sometimes it's defined as callback parameter of grecaptcha.render function, for example:

grecaptcha.render('example', {
  'sitekey' : 'someSitekey',
  'callback' : myCallbackFunction,
  'theme' : 'dark'
});

Also there's another way to find the callback function - open javascript console of your browser and explore reCAPTCHA configuration object:

___grecaptcha_cfg.clients[0].aa.l.callback

Note that aa.l may change and there can be multiple clients so you have to check clients[1], clients[2] too.

Finally all you have to do is to call that function:

myCallbackFunction();

Or even this way:

___grecaptcha_cfg.clients[0].aa.l.callback();

Sometimes it is required to provide an argument and in most cases you should put the token there. For example:

myCallbackFunction('TOKEN');

Invisible reCAPTCHA V2

reCAPTCHA V2 also has an invisible version.
You can check how it looks like here: https://www.google.com/recaptcha/api2/demo?invisible=true
Also recently we noticed some changes in invisible reCAPTCHA algorithms on few websites and added new parameter invisible=1 that should be used for invisible reCAPTCHA.
Read more about invisible reCAPTCHA below.

Invisible reCAPTCHA is located on a DIV layer positioned -10 000 px from top that makes it invisible for user.

reCAPTCHA is activated on page load or on user's actions like click somewhere or submit a form - that depends on the website. If user’s cookies are good enough then he will just pass it automatically without any additional action. Otherwise user will see standard reCAPTCHA form with a challenge.

In most cases when challenge is completed a callback function is executed. You can read more about callback here.

If you are still not sure - there are few ways to determine that reCAPTCHA is in invisible mode:

  • You don't see "I'm not a robot" checkbox on the page but getting recaptcha challenge when making some actions there
  • reCAPTCHA's iframe link contains parameter size=invisible
  • reCAPTCHA's configuration object contains parameter size that is set to invisible, for example ___grecaptcha_cfg.clients[0].aa.l.size is equal to invisible

How to bypass invisible reCAPTCHA in browser?


Method 1: using javascript:

  • Change the value of g-recaptcha-response element to the answer token you received from our server:
  • document.getElementById("g-recaptcha-response").innerHTML="TOKEN_FROM_SOLVECAPTCHA";
    
  • Execute the action that needs to be performed on the page after solving reCAPTCHA.

  • Usually there's a form that should be submitted and you need to identify the form by id or name or any other attribute and then submit the form. Here are few examples:

    document.getElementById("recaptcha-demo-form").submit(); //by id "recaptcha-demo-form"
    document.getElementsByName("myFormName")[0].submit(); //by element name "myFormName"
    document.getElementsByClassName("example").submit(); //by class name "example"
    

    Or sometimes there's a callback function executed when reCAPTCHA is solved.

    Callback function is usually defined in data-callback parameter of reCAPTCHA, for example:

    data-callback="myCallbackFunction"

    Or sometimes it's defined as callback parameter of grecaptcha.render function, for example:

    grecaptcha.render('example', {
      'sitekey' : 'someSitekey',
      'callback' : myCallbackFunction,
      'theme' : 'dark'
    });

    And all you have to do is to call that function:

    myCallbackFunction();
  • Voila! You've done that with just 2 strings of code.

Method 2: changing HTML:

  • Cut the div containing reCAPTCHA from page body.
  • <div style="visibility: hidden; position: absolute; width:100%; top: -10000px; left: 0px; right: 0px; transition: visibility 0s linear 0.3s, opacity 0.3s linear; opacity: 0;">
    <div style="width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 2000000000; background-color: #fff; opacity: 0.5;  filter: alpha(opacity=50)">
    </div>
    <div style="margin: 0 auto; top: 0px; left: 0px; right: 0px; position: absolute; border: 1px solid #ccc; z-index: 2000000000; background-color: #fff; overflow: hidden;">
    <iframe src="https://www.google.com/recaptcha/api2/bframe?hl=en&amp;v=r20170213115309&amp;k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs#zglq3yifgkmj" title="recaptcha challenge" style="width: 100%; height: 100%;" scrolling="no" name="zglq3yifgkmj" frameborder="0"></iframe>
    </div>
    </div>
    
  • Cut the whole block:
  • <div class=""><!-- BEGIN: ReCAPTCHA implementation example. -->
    <div id="recaptcha-demo" class="g-recaptcha" data-sitekey="6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs" data-callback="onSuccess" data-bind="recaptcha-demo-submit"><div class="grecaptcha-badge" style="width: 256px; height: 60px; transition: right 0.3s ease 0s; position: fixed; bottom: 14px; right: -186px; box-shadow: 0px 0px 5px gray;"><div class="grecaptcha-logo"><iframe src="https://www.google.com/recaptcha/api2/anchor?k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs&amp;co=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbTo0NDM.&amp;hl=en&amp;v=r20170213115309&amp;size=invisible&amp;cb=uror1hlow5a" title="recaptcha widget" scrolling="no" name="undefined" width="256" height="60" frameborder="0"></iframe></div><div class="grecaptcha-error"></div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none;  display: none; "></textarea></div></div>
    <script>
    var onSuccess = function(response) {
      var errorDivs = document.getElementsByClassName("recaptcha-error");
      if (errorDivs.length) {
        errorDivs[0].className = "";
      }
      var errorMsgs = document.getElementsByClassName("recaptcha-error-message");
      if (errorMsgs.length) {
        errorMsgs[0].parentNode.removeChild(errorMsgs[0]);
      }
      document.getElementById("recaptcha-demo-form").submit();};
    </script><!-- Optional noscript fallback. --><!-- END: ReCAPTCHA implementation example. --></div>
    
  • Put the following code instead of the block you’ve just cut:
  • <input type="submit">
    <textarea name="g-recaptcha-response">%g-recaptcha-response%</textarea>
    
    Where %g-recaptcha-response% - is an answer token you’ve got from our service.
  • You will see “Submit query” button.
    Press the button to submit the form with g-recaptcha-response and all other form data to the website.

List of GET/POST request parameters for https://api.solvecaptcha.com/in.php

Parameter Type Required Description
key String Yes your API key
method String Yes userrecaptcha - defines that you're sending a reCAPTCHA V2 with new method
googlekey String Yes Value of k or data-sitekey parameter you found on page
pageurl String Yes Full URL of the page where you see the reCAPTCHA
invisible Integer
Default: 0
No 1 - means that reCAPTCHA is invisible. 0 - normal reCAPTCHA.
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.
proxy String No Format: login:[email protected]:3128
You can find more info about proxies here.
proxytype String No Type of your proxy: HTTP, HTTPS, SOCKS4, SOCKS5.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

reCAPTCHA V3

reCAPTCHA V3 is a modern version of Google's CAPTCHA that evaluates the user's "humanity" based on their behavior and does not require any actions from the user.

The new version of reCAPTCHA retains many similarities with reCAPTCHA V2, as its core mechanism remains unchanged. The user receives a token from the reCAPTCHA API, which is then sent in a POST request to the website's server. The server then verifies the token's validity using the reCAPTCHA API.

However, during token verification, the reCAPTCHA API now returns a numerical "humanity" score, ranging from 0.1 to 0.9. Based on this score, the website independently decides how to proceed with processing the request.

Additionally, a new parameter called action has been introduced, allowing different user actions on the website to be processed differently. During token verification, the reCAPTCHA API returns the name of the action performed by the user.

Instructions for solving reCAPTCHA V3 using our service:

  1. Before starting to work with reCAPTCHA V3, ensure that the website uses this specific version. This can be identified by the following signs:

    1. Invisibility to the user. reCAPTCHA V3 is completely hidden from the user and does not require tasks such as selecting images or clicking on elements.

    2. The website's source code includes the reCAPTCHA API script with a render parameter specifying the site's public key (sitekey).
      Example: <script src="https://www.google.com/recaptcha/api.js?render=6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE">

    3. In the configuration object ___grecaptcha_cfg, the clients array uses an element with the index 100000, which can be accessed via ___grecaptcha_cfg.clients[100000].

  2. To bypass reCAPTCHA V3 using our API, you need to define the values for two required parameters:

    pageurl - Specify the full URL of the page where reCAPTCHA V3 needs to be solved.

    sitekey - It can be found in the HTML code within the render parameter when loading the api.js file, in the k parameter inside the URL of the iframe that loads reCAPTCHA, in the JavaScript code via the grecaptcha.execute function call, or in the configuration object ___grecaptcha_cfg.

  3. After obtaining all the required parameters, you can send a request to our API.

  4. Send an HTTP POST request to our API:
    https://api.solvecaptcha.com/in.php
    with your personal API key and the method parameter corresponding to your CAPTCHA type, , in this case — userrecaptcha. Also, provide the value you copied earlier in the googlekey parameter. Specify the full URL of the page where you want to solve reCAPTCHA in the pageurl parameter.

    A complete list of parameters for the request can be found in the table below.

    Example of a multipart form for submitting reCAPTCHA V3:

    <form method="post" action="https://api.solvecaptcha.com/in.php" enctype="multipart/form-data">
    <input type="hidden" name="method" value="userrecaptcha">
    <input type="hidden" name="version" value="v3">
    <input type="text" name="key" value="YOUR_APIKEY">
    <input type="text" name="googlekey" value="6LfZil0UAAAAAAdm1Dpzsw9q0F11-bmervx9g5fE">
    <input type="text" name="pageurl" value="http://mysite.com/page/containing/recaptcha">
    <input type="text" name="action" value="verify">
    <input type="text" name="min_score" value="0.4">
    <input type="submit" value="Upload and Get Captcha ID">
    </form>

    The complete list of parameters for the request can be found in the table below.

    Code examples for submitting reCAPTCHA V3 using cURL, Python, JavaScript, and Go are described below.

  5. If you have sent a valid request, the server will return the ID of your CAPTCHA as plain text, for example: OK|2122988149, or in JSON format: {"status":1,"request":"2122988149"} if you included the `json` parameter in your request.

  6. Wait for 15–20 seconds and send an HTTP GET request to our API: https://api.solvecaptcha.com/res.php to retrieve the result.
    The complete list of parameters for the request can be found in the table below.

    If your CAPTCHA has already been solved, the server will return a response as plain text or JSON. The response contains the token. An example of a JSON response:

    
    {
      "status": 1,
      "request": "03AFcWeA5dCJ-2OQqwd0-2IHmBX3ItBl76Z4WGMT-3WxkoYqSKrpU48GZhe4jRk1un_TyFoZ6aYIlPn1J9w6HnPjgRdjWGQbczPsztmMl84sGXgZLWzxhSN0KKpo20G3X5LO66s9NuMOKzXnGB19ddYnDyapbna9vV-dtCNiimX9A6u-f0twWGglQVjsB9dVK6pGAYxnyE-3NMneIpXCV0i163lucSxT1aUDDpTh-0y4gWPFmcQmq58zgOJGOSQNgL2pABFrz7yKq-V0L3bjLDK7FFjiR3lAJ11Ec1t5KDFk6IXtkeWVwS8iSVT6ntb_YhRC9bei-Q5ZUXxt7HQJr9TYBAuc5g_hhsPEFsX7iby7xfnCq9XHY7mxhDE3IWCem-4Hve58_ja39NUGDobrhSxLLairPpTLaod_HispzbnWKy_G1Mb1n30uqVuWkQ3eBDLMjm0huPf0eXaPnGPpEo6rsNj2q4YcxdzxT5pURcPs8X6vpw3ke5R-oVLXK5nkhSeW2BL1euNwlLz0JCIDBeffzhHMZDx3Sydbf4wdtaWB05rp8YijuT1j9ivlV-Xbf7iLGc6rct89mZxbxTmH2QNJW3PeL2SQMunEs9ZXIkkm-3om5uy1ih53MEvYVR9fEiO5my5XL9LNjNtWOL6gjJqlpr4pryonotiW3ukcTHYn6yGTbBwBNcIqG4MT1eQWv4owxsr-Ufbvs_Av5h0snd8RK3lVzMYkXKdIm8oZRD_p4BL1uMMaFLaGorChVuyNelC_D1Wyh2I27GbD-NXhsfajZ1NyFfNXqJO1RGccfkiIl4hYpl2rD4G5b9sqWWmX_U4WVNBT5yHouiJJiFlBAnPukecSacVyfyKj1HeA3G8qTrYUOpElNQ9tOX1E9LDneJ6vvNdsb1w6jnMxSr1zevJS29CvwYOw0K--Y18XAJByMFLMs36jRCEdlntEOPumAyoDzjRpGj9riQ"
    }
    
    

    If your CAPTCHA has not yet been solved, the server will return the code CAPCHA_NOT_READY. In this case, repeat your request after 5 seconds.

    Example of a request URL:

    
    https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&json=1&id=248734
    
    

  7. Use the received token on the target page.

    The best way to understand how to do this is to observe the requests sent to the website when you interact with it as a regular visitor. Most browsers make this easy using the developer console, typically under the "Network" tab.

    The token is usually sent in the parameters of a POST request. It could be g-recaptcha-response as in reCAPTCHA V2, g-recaptcha-response-100000, or another parameter. Therefore, carefully review the request parameters to identify how the token is transmitted, and then construct a similar request.

  8. After using the token on the website and determining whether it worked or not, you can inform us about it. This helps us collect and analyze statistics for this type of CAPTCHA to optimize our solving algorithms further.

    More details about submitting reports can be found in the response report section.

List of parameters for POST requests to https://api.solvecaptcha.com/in.php

Parameter Type Required Description
key String Yes your API key
method String Yes userrecaptcha — defines that you're sending a reCAPTCHA
version String Yes v3 — defines that you're sending a reCAPTCHA V3
googlekey String Yes Value of sitekey parameter you found on page
pageurl String Yes Full URL of the page where you see the reCAPTCHA
header_acao Integer
Default: 0
No 0 — disabled
1 — enabled.
If enabled in.php will include Access-Control-Allow-Origin:*: header in the response. Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved. URL should be registered on the server. More info here..
json Integer
Default: 0
No 0 — server will send the response as plain text
1 — tells the server to send the response as JSON
soft_id Integer No Software developer ID. Developers who have integrated their software with our service receive 10% of the cost of each such request.

List of GET request parameters for https://api.solvecaptcha.com/res.php

Parameter Type Required Description
key String Yes your API key
action String Yes get — get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
header_acao Integer
Default: 0
No 0 — disabled
1 — enabled.
If enabled res.php will include Access-Control-Allow-Origin:* header in the response. Used for cross-domain AJAX requests in web applications.
json Integer
Default: 0
No 0 — server will send the response as plain text
1 — tells the server to send the response as JSON

Code examples for send reCAPTCHA V3:

cURL

curl --location 'https://api.solvecaptcha.com/in.php' \
--form 'key="YOUR_API_KEY"' \
--form 'method="userrecaptcha"' \
--form 'version="v3"' \
--form 'googlekey="6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu"' \
--form 'pageurl="http://mysite.com/page/containing/recaptcha"' \
--form 'domain="www.recaptcha.net"' \
--form 'action="test"' \
--form 'min_score="0.5"' \
--form 'soft_id="1234"' \
--form 'json="1"'
Python

import requests

url = "https://api.solvecaptcha.com/in.php"

payload = {'key': 'YOUR_API_KEY',
'method': 'userrecaptcha',
'version': 'v3',
'googlekey': '6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu',
'pageurl': 'http://mysite.com/page/containing/recaptcha',
'domain': 'www.recaptcha.net',
'action': 'test',
'min_score': '0.5',
'soft_id': '1234',
'json': '1'}
files=[

]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
JavaScript (Node.js)

var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://api.solvecaptcha.com/in.php',
  'headers': {
  },
  formData: {
    'key': 'YOUR_API_KEY',
    'method': 'userrecaptcha',
    'version': 'v3',
    'googlekey': '6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu',
    'pageurl': 'https://mysite.com/page/containing/recaptcha-v3',
    'domain': 'www.recaptcha.net',
    'action': 'test',
    'min_score': '0.5',
    'json': '1'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
Go

package main

import (
  "fmt"
  "bytes"
  "mime/multipart"
  "net/http"
  "io"
)

func main() {

  url := "https://api.solvecaptcha.com/in.php"
  method := "POST"

  payload := &bytes.Buffer{}
  writer := multipart.NewWriter(payload)
  _ = writer.WriteField("key", "YOUR_API_KEY")
  _ = writer.WriteField("method", "userrecaptcha")
  _ = writer.WriteField("version", "v3")
  _ = writer.WriteField("googlekey", "6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu")
  _ = writer.WriteField("pageurl", "http://mysite.com/page/containing/recaptcha")
  _ = writer.WriteField("domain", "www.recaptcha.net")
  _ = writer.WriteField("action", "test")
  _ = writer.WriteField("min_score", "0.5")
  _ = writer.WriteField("soft_id", "1234")
  _ = writer.WriteField("json", "1")
  err := writer.Close()
  if err != nil {
    fmt.Println(err)
    return
  }


  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Set("Content-Type", writer.FormDataContentType())
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}

hCaptcha

hCaptcha is a quite new type of captcha that is really similar to reCAPTCHA and looks like this:

hCaptcha

To solve hCaptcha you need to extract the value of sitekey parameter from the source code of the page and send a request to our API containing the extracted sitekey and full page URL.

When you received the response, set the returned useragent value for your browser/HTTP client and place the token into h-captcha-response and g-recaptcha-response hidden elements. Then submit the form or make the corresponding request to your target website. Please note, hCaptcha also has a callback. If there is no form to submit, you MUST explore the website code and find the callback.

List of GET/POST request parameters for https://api.solvecaptcha.com/in.php
Parameter Type Required Description
key String Yes your API key
method String Yes hcaptcha - defines that you're sending hCaptcha
sitekey String Yes Value of data-sitekey parameter you found on the page
pageurl String Yes Full URL of the page where you bypass the captcha
invisible Number
Default: 0
No Use 1 for invisible version of hCaptcha. Currently it is a very rare case.
domain String
Default: hcaptcha.com
No Domain used to load the captcha: hcaptcha.com or js.hcaptcha.com
data String No Custom data that is used in some implementations of hCaptcha, mostly wit invisible=1. In most cases, you see it as rqdata inside network requests.
Example: "data": "rqDataValue"
userAgent String No Deprecated. Use the User-Agent value of our worker returned with the token by our API.
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled. Adds Access-Control-Allow-Origin:* header for cross-domain AJAX requests.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
json Integer
Default: 0
No 0 - server sends plain text response
1 - server sends JSON response.
soft_id Integer No ID of software developer. Developers get a 10% reward for usage.
proxy String No Format: login:[email protected]:3128.
proxytype String No Type of your proxy: HTTP, HTTPS, SOCKS4, SOCKS5.

Request example:


https://api.solvecaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=hcaptcha&sitekey=10000000-ffff-ffff-ffff-000000000001&pageurl=https://mysite.com/register&json=1

Response example:


{
  "status": 1,
  "request": "74327409378"
}
List of GET request parameters for https://api.solvecaptcha.com/res.php
GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the answer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
Yes Always set to 1 for hCaptcha to get the response as JSON containing the User-Agent value.

Request example:


https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

Response example:


{
  "status": 1,
  "request": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1N2jhFN3RGDMze...j-IL_kQPLccHF33x7Egia34Rbo6HENy0-qRJOc",
  "useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
  "respKey": "E0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRh...Si8Tj9ta6mylZHPH8Al1uEuqpcfhN9sRpzOnoGc"
}

Code examples for send hCaptcha:

cURL

curl --location 'https://api.solvecaptcha.com/in.php' \
--form 'key="YOUR_API_KEY"' \
--form 'method="hcaptcha"' \
--form 'sitekey="10000000-ffff-ffff-ffff-000000000001"' \
--form 'pageurl="https://mysite.com/register"' \
--form 'json="1"
Python

import requests

url = "https://api.solvecaptcha.com/in.php"

payload = {'key': 'YOUR_API_KEY',
'method': 'hcaptcha',
'sitekey': '10000000-ffff-ffff-ffff-000000000001',
'pageurl': 'https://mysite.com/register',
'json': '1'}
files=[

]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
JavaScript (Node.js)

var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://api.solvecaptcha.com/in.php',
  'headers': {
  },
  formData: {
    'key': 'YOUR_API_KEY',
    'method': 'hcaptcha',
    'sitekey': '10000000-ffff-ffff-ffff-000000000001',
    'pageurl': 'http://mysite.com/register',
    'json': '1'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
Go

package main

import (
  "fmt"
  "bytes"
  "mime/multipart"
  "net/http"
  "io"
)

func main() {

  url := "https://api.solvecaptcha.com/in.php"
  method := "POST"

  payload := &bytes.Buffer{}
  writer := multipart.NewWriter(payload)
  _ = writer.WriteField("key", "YOUR_API_KEY")
  _ = writer.WriteField("method", "hcaptcha")
  _ = writer.WriteField("sitekey", "10000000-ffff-ffff-ffff-000000000001")
  _ = writer.WriteField("pageurl", "https://mysite.com/register")
  _ = writer.WriteField("json", "1")
  err := writer.Close()
  if err != nil {
    fmt.Println(err)
    return
  }


  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Set("Content-Type", writer.FormDataContentType())
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}

Cloudflare Turnstile

Cloudflare Turnstile is a CAPTCHA system developed by Cloudflare designed to protect web forms and pages from automated submissions or malicious activity.

Turnstile is used in two scenarios:

  1. As a standalone CAPTCHA widget embedded on a webpage to safeguard forms against automated submissions. In this setup, the sitekey is retrieved and sent to the API alongside the full page URL. The resulting token is then added to the cf-turnstile-response and g-recaptcha-response fields before form submission. Optionally, a callback can be defined in the turnstile.render method.
  2. On Cloudflare-proxied websites where the Turnstile Challenge page appears. In this case, specific parameters (cData, chlPageData, and action) must be extracted, along with the User-Agent value provided by the API.
Standalone Turnstile captcha

Request example:

https://mysite.com/in.php?method=turnstile&key=YOUR_API_KEY&sitekey=0x4AAAAAAAVrOwQWPlm3Bnr5&pageurl=https%3A%2F%2Fmysite.com%2Fregister&json=1

Response example:

{
  "status": 1,
  "request": "74327409378"
}

The returned ID can be used to retrieve the CAPTCHA solution by sending a request to the res.php endpoint of the API.

Turnstile captcha on Cloudflare Challenge pages
Turnstile Challenge Page

To bypass the Turnstile CAPTCHA on Cloudflare Challenge pages, you must include the following additional parameters in your request:

  • action: The action parameter value extracted from the page.
  • data: The cData value passed to the turnstile.render method or defined in the data-cdata attribute.
  • pagedata: The chlPageData value passed to the turnstile.render method.
How to extract the required parameters

To extract the required parameters, you can redefine the turnstile.render method to capture the parameters passed to it during execution. This involves injecting JavaScript code into the page before the Turnstile widget is initialized. Below is an example of how to achieve this:

const i = setInterval(() => {
  if (window.turnstile) {
    clearInterval(i);
    window.turnstile.render = (a, b) => {
      let p = {
        method: "turnstile",
        key: "YOUR_API_KEY",
        sitekey: b.sitekey,
        pageurl: window.location.href,
        data: b.cData,
        pagedata: b.chlPageData,
        action: b.action,
        userAgent: navigator.userAgent,
        json: 1
      };
      console.log(JSON.stringify(p));
      window.tsCallback = b.callback;
      return 'foo';
    };
  }
}, 50);

Request example:


https://api.solvecaptcha.com/in.php?key=YOUR_API_KEY&method=turnstile&sitekey=0x0AAAAAAADnPIDROzbs0Aaj&data=7fab0000b0e0ff00&pagedata=3gAFo2...0ME1UVT0=&pageurl=https://mysite.com/&action=managed&json=1

Response example:

{
  "status": 1,
  "request": "74327409378"
}

Use the returned ID to request the result from res.php endpoint of our API:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=74327409378&json=1

Result example:

{
  "status": 1,
  "request": "0.4uMMZZdSfsVM8...610cd090",
  "useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
List of GET/POST request parameters for https://api.solvecaptcha.com/in.php
Parameter Type Required Description
key String Yes Your API key
method String Yes turnstile - defines that you're sending Cloudflare Turnstile
sitekey String Yes Value of sitekey parameter you found on the page
pageurl String Yes Full URL of the page where you see the captcha
action String No* Value of optional action parameter you found on the page, can be defined in data-action attribute or passed to turnstile.render call
data String No* The value of cData passed to turnstile.render call. Also can be defined in data-cdata attribute
pagedata String No* The value of chlPageData passed to turnstile.render call
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled, in.php will include Access-Control-Allow-Origin: * header in the response. Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when the captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
proxy String No Format: login:[email protected]:3128
You can find more info about proxies here.
proxytype String No Type of your proxy: HTTP, HTTPS, SOCKS4, SOCKS5.

* - parameters required to bypass Turnstile on Cloudflare Challenge pages

List of GET request parameters for https://api.solvecaptcha.com/res.php
GET Parameter Type Required Description
key String Yes Your API key
action String Yes get - get the answer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

Code examples for send Cloudflare Turnstile:

cURL

curl --location 'https://api.solvecaptcha.com/in.php' \
--form 'key="YOUR_API_KEY"' \
--form 'method="turnstile"' \
--form 'sitekey="0x1AAAAAAAAkg0s2VIOD34y5"' \
--form 'pageurl="https://mysite.com/register"' \
--form 'json="1"'
Python

import requests

url = "https://api.solvecaptcha.com/in.php"

payload = {'key': 'YOUR_API_KEY',
'method': 'turnstile',
'sitekey': '0x1AAAAAAAAkg0s2VIOD34y5',
'pageurl': 'https://mysite.com/register',
'json': '1'}
files=[

]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
JavaScript (Node.js)

var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://api.solvecaptcha.com/in.php',
  'headers': {
  },
  formData: {
    'key': 'YOUR_API_KEY',
    'method': 'turnstile',
    'sitekey': '0x4AAAAAAAPMtoL-SSuvUpPf',
    'pageurl': 'https://mysite.com/page/containing/cloudflare-turnstile',
    'json': '1'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
Go

package main

  import (
    "fmt"
    "bytes"
    "mime/multipart"
    "net/http"
    "io"
  )
  
  func main() {
  
    url := "https://2captcha.com/in.php"
    method := "POST"
  
    payload := &bytes.Buffer{}
    writer := multipart.NewWriter(payload)
    _ = writer.WriteField("key", "YOUR_API_KEY")
    _ = writer.WriteField("method", "turnstile")
    _ = writer.WriteField("sitekey", "0x1AAAAAAAAkg0s2VIOD34y5")
    _ = writer.WriteField("pageurl", "https://mysite.com/register")
    _ = writer.WriteField("json", "1")
    err := writer.Close()
    if err != nil {
      fmt.Println(err)
      return
    }
  
  
    client := &http.Client {
    }
    req, err := http.NewRequest(method, url, payload)
  
    if err != nil {
      fmt.Println(err)
      return
    }
    req.Header.Set("Content-Type", writer.FormDataContentType())
    res, err := client.Do(req)
    if err != nil {
      fmt.Println(err)
      return
    }
    defer res.Body.Close()
  
    body, err := io.ReadAll(res.Body)
    if err != nil {
      fmt.Println(err)
      return
    }
    fmt.Println(string(body))
  }

Geetest

Geetest is a type of captcha where you have to move a piece of a puzzle or select some figures in the order.

To solve Geetest captcha with our service you have to:

  1. Find the following Geetest captcha parameters on the target website (usually you can find them inside initGeetest function).
    • gt - public website key (static)
    • challenge - dynamic challenge key
    • api_server - API domain (optional)
  2. Important: you should get a new challenge value for each request to our API. Once captcha was loaded on the page the challenge value becomes invalid. You should inspect requests made to the website when the page is loaded to identify a request that gets a new challenge value. Then you should make such a request each time to get a valid challenge value.
  3. Submit an HTTP GET or POST request to our API URL: https://api.solvecaptcha.com/in.php with method set to geetest, providing values found in the previous step in your request as values for corresponding request parameters and also the full page URL as the value for pageurl.

    You can find the full list of parameters in the table below.

    Request URL example:

    https://api.solvecaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=geetest>=f1ab2cdefa3456789012345b6c78d90e&challenge=12345678abc90123d45678ef90123a456b&api_server=api-na.geetest.com&pageurl=https://www.site.com/page/&json=1      

    Below you can find code examples for sending GeeTest captcha.

  4. If everything is fine, the server will return the ID of your captcha as plain text, like: OK|2122988149 or as JSON {"status":1,"request":"2122988149"} if the json parameter was used. Otherwise, the server will return an error code.
  5. Make a 15-20 second timeout, then submit an HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result. The full list of parameters is in the table below.

    If the captcha is already solved, the server will return the response in JSON. The response contains three values: challenge, validate, and seccode:

    {
      "status": 1,
      "request": {
        "geetest_challenge": "6983fe8d9b791f70ed9d6aa09a0aa3587t",
        "geetest_validate": "40cfb50a44cead6fc8464858a805b1b3",
        "geetest_seccode": "40cfb50a44cead6fc8464858a805b1b3|jordan"
      }
    }

    If the captcha is not solved yet, the server will return CAPCHA_NOT_READY. Repeat your request in 5 seconds.

    If something went wrong, the server will return an error code.

  6. Use the values received from our API to submit your request to the target website, placing the values into the corresponding request fields:
    • geetest_challenge
    • geetest_validate
    • geetest_seccode
List of GET/POST request parameters for https://api.solvecaptcha.com/in.php
Parameter Type Required Description
key String Yes your API key
method String Yes geetest - defines that you're sending a Geetest captcha
gt String Yes Value of gt parameter you found on the target website
challenge String Yes Value of challenge parameter you found on the target website
api_server String No Value of api_server parameter you found on the target website
offline Number
Default: 0
No Set to 1 if offline: true is used in initGeetest.
new_captcha Number
Default: 0
No Set to 1 if new_captcha: true is used in initGeetest.
pageurl String Yes Full URL of the page where you see Geetest captcha
header_acao Integer
Default: 0
No Set to 1 to include Access-Control-Allow-Origin:* header.
pingback String No URL for pingback (callback) response.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
proxy String No Proxy format: login:[email protected]:3128.
proxytype String No Type of your proxy: HTTP, HTTPS, SOCKS4, SOCKS5.
userAgent String No Your userAgent used to solve the captcha.
List of GET request parameters for https://api.solvecaptcha.com/res.php
GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the answer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 1
No Always returns JSON for Geetest captcha.

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

Code examples for send GeeTest captcha:

cURL

curl --location 'https://api.solvecaptcha.com/in.php' \
--form 'key="YOUR_API_KEY"' \
--form 'method="geetest"' \
--form 'gt="f1ab2cdefa3456789012345b6c78d90e"' \
--form 'challenge="12345678abc90123d45678ef90123a456b"' \
--form 'api_server="api-na.geetest.com"' \
--form 'pageurl="https://www.site.com/page/"'
Python

import requests

url = "https://api.solvecaptcha.com/in.php"

payload = {'key': 'YOUR_API_KEY',
'method': 'geetest',
'gt': 'f1ab2cdefa3456789012345b6c78d90e',
'challenge': '12345678abc90123d45678ef90123a456b',
'api_server': 'api-na.geetest.com',
'pageurl': 'https://www.site.com/page/'}
files=[

]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
JavaScript (Node.js)

var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://api.solvecaptcha.com/in.php',
  'headers': {
  },
  formData: {
    'key': 'YOUR_API_KEY',
    'method': 'geetest',
    'gt': 'f1ab2cdefa3456789012345b6c78d90e',
    'challenge': '12345678abc90123d45678ef90123a456b',
    'api_server': 'api-na.geetest.com',
    'pageurl': 'https://www.site.com/page/'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
Go

package main

import (
  "fmt"
  "bytes"
  "mime/multipart"
  "net/http"
  "io"
)

func main() {

  url := "https://api.solvecaptcha.com/in.php"
  method := "POST"

  payload := &bytes.Buffer{}
  writer := multipart.NewWriter(payload)
  _ = writer.WriteField("key", "YOUR_API_KEY")
  _ = writer.WriteField("method", "geetest")
  _ = writer.WriteField("gt", "f1ab2cdefa3456789012345b6c78d90e")
  _ = writer.WriteField("challenge", "12345678abc90123d45678ef90123a456b")
  _ = writer.WriteField("api_server", "api-na.geetest.com")
  _ = writer.WriteField("pageurl", "https://www.site.com/page/")
  err := writer.Close()
  if err != nil {
    fmt.Println(err)
    return
  }


  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Set("Content-Type", writer.FormDataContentType())
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}

Geetest v4 captcha

Geetest v4 is a new version of puzzle challenge, but you still have to move a piece of a puzzle to bypass it.

To solve Geetest v4 captcha with our service you need to:

  1. Find the captcha_id value in the page HTML source. Normally, you will find the value inside a script tag that includes Geetest v4 JavaScript code on the page.
  2. Submit an HTTP GET or POST request to our API URL: https://api.solvecaptcha.com/in.php with method set to geetest_v4, providing the captcha_id found on the page and full page URL as value for pageurl.

    Request URL example:

    https://api.solvecaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=geetest_v4&captcha_id=f1ab2cdefa3456789012345b6c78d90e&&pageurl=https://www.site.com/page/

    Below you can find code examples for sending GeeTest V4 captcha.

  3. If everything is fine, the server will return the ID of your captcha as plain text, like: OK|2122988149 or as JSON: {"status":1,"request":"2122988149"} if the json parameter was used. Otherwise, the server will return an error code.
  4. Make a 15-20 seconds timeout, then submit an HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.

    If captcha is already solved, the server will return the response in JSON:

    {
      "status": 1,
      "request": {
          "captcha_id": "e391447fd421dc634644d5a2ee9c73",
          "lot_number": "4ba5ab728db764e2a46qe083d4d663gd3f",
          "pass_token": "f29234g3e8f3ad20f12cd0d5ece03g3g6hd9424e9e6704e7h814c8de8j84r4",
          "gen_time": "1838256089",
          "captcha_output": "Sf3_je5GyO2g4V8m431BLIM4F5uK2webJdbXSntSbtTKUry4r6hGVQ3I2YzRBgBkGi4oJ9Xwu9w6WWKeY4mi1Oxc8qZxMlwJVvsVF2YZG2taOYHNA5UyOK6fk32sGRdq8gmypf-Fl9XOsvhtnGUi9xxN4CW7lj2VLMSdF_659SuVtfHtzdc3CcGSn1Z1k0SrtOsXZ_i7t9EEDciH-rcgTZz6hI-EFEbajage3Nbv0-33sODjdbk6MwmExDEGcm8hhQNYKQbbgF8rCNlxjk9wwkx63Up3s3-R8uDmcLHTM3BwW2SbccZzGjZW8rrPoC41qMNxPExMxipPldr0AQ7Z0-LTk61HmXZTmhYN9tbYwksfbgvck9l9bnhg5ddO7j8lKwYZbO1Hzjs85g6g7T053fyZe05WmClzNZ9F8g_sgMT2XTrhJXu_h67d4"
      }
    }

    If captcha is not solved yet, the server will return CAPCHA_NOT_READY. Repeat your request in 5 seconds.

    If something went wrong, the server will return an error code.

  5. Use the values received from our API to submit your request to the target website the same way it is done when you bypass the captcha manually.
List of GET/POST request parameters for https://api.solvecaptcha.com/in.php
Parameter Type Required Description
key String Yes Your API key
method String Yes geetest_v4 - defines that you're sending the Geetest v4 captcha
captcha_id String Yes Value of captcha_id parameter you found on the target website
pageurl String Yes Full URL of the page where you see Geetest captcha
header_acao Integer
(Default: 0)
No 0 - disabled, 1 - enabled. If enabled, in.php will include Access-Control-Allow-Origin: * header in the response.
pingback String No URL for pingback (callback) response.
json Integer
(Default: 0)
No 0 - plain text response,
1 - JSON response
proxy String No Proxy format: login:[email protected]:3128.
You can find more info about proxies here.
proxytype String No Type of your proxy: HTTP, HTTPS, SOCKS4, SOCKS5.
List of GET request parameters for https://api.solvecaptcha.com/res.php
GET parameter Type Required Description
key String Yes Your API key
action String Yes get - get the answer for your captcha
id Integer Yes ID of captcha returned by in.php
json Integer
(Default: 1)
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

Code examples for send GeeTest V4 captcha:

cURL

curl --location 'https://api.solvecaptcha.com/in.php' \
--form 'key="YOUR_API_KEY"' \
--form 'method="geetest_v4"' \
--form 'captcha_id="e392e1d7fd421dc63325744d5a2b9c73"' \
--form 'pageurl="https://www.site.com/page/"' \
--form 'json="1"'
Python

import requests

url = "https://api.solvecaptcha.com/in.php"

payload = {'key': 'YOUR_API_KEY',
'method': 'geetest_v4',
'captcha_id': 'e392e1d7fd421dc63325744d5a2b9c73',
'pageurl': 'https://www.site.com/page/',
'json': '1'}
files=[

]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
JavaScript (Node.js)

var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://api.solvecaptcha.com/in.php',
  'headers': {
  },
  formData: {
    'key': 'YOUR_API_KEY',
    'method': 'geetest_v4',
    'captcha_id': 'e392e1d7fd421dc63325744d5a2b9c73',
    'pageurl': 'https://www.site.com/page/',
    'json': '1'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
Go

package main

import (
  "fmt"
  "bytes"
  "mime/multipart"
  "net/http"
  "io"
)

func main() {

  url := "https://api.solvecaptcha.com/in.php"
  method := "POST"

  payload := &bytes.Buffer{}
  writer := multipart.NewWriter(payload)
  _ = writer.WriteField("key", "YOUR_API_KEY")
  _ = writer.WriteField("method", "geetest_v4")
  _ = writer.WriteField("captcha_id", "e392e1d7fd421dc63325744d5a2b9c73")
  _ = writer.WriteField("pageurl", "https://www.site.com/page/")
  _ = writer.WriteField("json", "1")
  err := writer.Close()
  if err != nil {
    fmt.Println(err)
    return
  }


  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Set("Content-Type", writer.FormDataContentType())
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}

FunCaptcha

Now we provide a method to solve FunCaptcha with a token.

The method is pretty simple:

  • You need to locate public key of FunCaptcha. There are two ways to find it: you can locate funcaptcha's div element and check the value of data-pkey parameter parameter or you can find the input element with name fc-token and then extract the key indicated after pk from the value of this element.

  • Submit a HTTP GET or POST request to our API URL: https://api.solvecaptcha.com/in.php with method set to funcaptcha and provide the value found on previous step as value for publickey and full page URL as value for pageurl. Sending proxies is not obligatory ar the moment but it's recommended.
    You can find the full list of parameters in the table below.

    Request URL example:

    https://api.solvecaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&method=funcaptcha&publickey=12AB34CD-56F7-AB8C-9D01-2EF3456789A0&pageurl=http://mysite.com/page/with/funcaptcha/
  • If everything is fine server will return the ID of your captcha as plain text, like: OK|2122988149 or as JSON {"status":1,"request":"2122988149"} if json parameter was used.
    Otherwise server will return an error code.

  • Make a 10-20 seconds timeout then submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.
    The full list of parameters is in the table below.

    If captha is already solved server will respond in plain text or JSON and return the answer token that looks like:

    3084f4a302b176cd7.96368058|r=ap-southeast-1|guitextcolor=%23FDD531|metabgclr=%23FFFFFF|metaiconclr=%23202122|meta=3|lang=en|pk=12AB34CD-56F7-AB8C-9D01-2EF3456789A0|cdn_url=https://cdn.funcaptcha.com/fc|surl=https://funcaptcha.com

    If captcha is not solved yet server will return CAPCHA_NOT_READY result. Retry your request after 5 seconds.

    If something gone wrong server will return an error code.

  • Locate the element with id fc-token and put the token into value of this element.

    Please note: if you use nojs=1 parameter API will return just first part of token string like this: 3084f4a302b176cd7.96368058|r=ap-southeast-1 and you got to build the full string using the original value of fc-token

  • Do the rest what you need to do on the website: submit a form or click on a button or something else.

List of GET/POST request parameters for https://api.solvecaptcha.com/in.php

Parameter Type Required Description
key String Yes your API key
method String Yes funcaptcha - defines that you're sending a FunCaptcha with token method
publickey String Yes Value of pk or data-pkey parameter you found on page
pageurl String Yes Full URL of the page where you see the FunCaptcha
nojs Integer
Default: 0
No Tells us to solve FunCaptcha without javascript enabled. Can be used in case when normal method doesn't work for some reason.
Important: please note that we will return just a part of the token in that case. More info above.
userAgent String No Tells us to use your user-agent value.
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.
proxy String No Format: login:[email protected]:3128
You can find more info about proxies here.
proxytype String No Type of your proxy: HTTP, HTTPS, SOCKS4, SOCKS5.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

KeyCaptcha

KeyCaptcha is a type of captcha where you have to solve a simple puzzle.

To solve KeyCaptcha with our service you have to:

  • Find the following KeyCaptcha parameters in page's source code:

    s_s_c_user_id
    s_s_c_session_id
    s_s_c_web_server_sign
    s_s_c_web_server_sign2
  • Submit a HTTP GET or POST request to our API URL: https://api.solvecaptcha.com/in.php with method set to keycaptcha and provide values found on previous step in your request as values for corresponding request parameters and also full page URL as value for pageurl.
    You can find the full list of parameters in the table below.

    Request URL example:

     https://api.solvecaptcha.com/in.php?key=1abc234de56fab7c89012d34e56fa7b8&s_s_c_user_id=10&s_s_c_session_id=493e52c37c10c2bcdf4a00cbc9ccd1e8&s_s_c_web_server_sign=9006dc725760858e4c0715b835472f22-pz-&s_s_c_web_server_sign2=2ca3abe86d90c6142d5571db98af6714&method=keycaptcha&pageurl=https://www.keycaptcha.ru/demo-magnetic/
  • If everything is fine server will return the ID of your captcha as plain text, like: OK|2122988149 or as JSON {"status":1,"request":"2122988149"} if json parameter was used.
    Otherwise server will return an error code.

  • Make a 15-20 seconds timeout then submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.
    The full list of parameters is in the table below.

    If captha is already solved server will respond in plain text or JSON and return the answer that looks like:

    ebdb5a6bf76da6887db60ef2041ab946|9006dc725760858e4c0715b835472f22|http://back10.keycaptcha.com/swfs/ckc/5bded85426de3c57a7529a84bd0d4d08-|493e52c37c10c2bcdf4a00cbc9ccd1e8|1

    If captcha is not solved yet server will return CAPCHA_NOT_READY result. Retry your request after 5 seconds.

    If something gone wrong server will return an error code.

  • Locate and delete the following block which inclides keycaptcha javascript file:

    <script language="JavaScript" src="http://backs.keycaptcha.com/swfs/cap.js"></script>

    Locate and delete the div with id="div_for_keycaptcha":

    <div id="div_for_keycaptcha"...>...</div>

    Please note: sometimes content on the page is generated dynamically and you will not see these elements in html source or they can differ a little bit.
    In such cases you have to explore the source of the page and javascript code that generates the content. "Inspect" option in Google Chrome can help in that.

  • Locate the element with id="capcode" and change it's value to the response received from our server.

    <input name="capcode" id="capcode" value="1|2|3|4|5" type="hidden">
  • Click on submit button.

  • Congratulations, you've passed KeyCaptcha

Multipart sample form for KeyCaptcha

<form method="post" action="https://api.solvecaptcha.com/in.php" enctype="multipart/form-data">
Your API-KEY from solvecaptcha.com:
<input  name="key" value="YOUR_APIKEY"><br>
s_s_c_user_id:<br>
<input  name="s_s_c_user_id" value=""><br>
s_s_c_session_id:<br>
<input  name="s_s_c_session_id" value=""><br>
s_s_c_web_server_sign:<br>
<input  name="s_s_c_web_server_sign" value=""><br>
s_s_c_web_server_sign2:<br>
<input  name="s_s_c_web_server_sign2" value=""><br>
pageurl:<br>
<input  name="pageurl" value=""><br>
It's keycaptcha:<br>
<input type="text" value="keycaptcha" name="method"><br>
<input type="submit" value="UPLOAD AND GET ID">
</form>

YOUR_APIKEY is Your API key.

List of GET/POST request parameters for https://api.solvecaptcha.com/in.php

Parameter Type Required Description
key String Yes your API key
method String Yes keycaptcha - defines that you're sending a KeyCaptcha
s_s_c_user_id String Yes Value of s_s_c_user_id parameter you found on page
s_s_c_session_id String Yes Value of s_s_c_session_id parameter you found on page
s_s_c_web_server_sign String Yes Value of s_s_c_web_server_sign parameter you found on page
s_s_c_web_server_sign2 String Yes Value of s_s_c_web_server_sign2 parameter you found on page
pageurl String Yes Full URL of the page where you see the KeyCaptcha
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

Grid method

Solving reCAPTCHA V2 with that old method is less accurate and more compex. So we recommend to use the new method. But the old method is cheaper and we still support it.

We can solve recaptchas with different grids like 3x3, 2x4, 4x4.

Also you can solve reCAPTCHA V2 with ClickCaptcha method if it's more suitable for you.

And of course we support reCAPTCHA V2 challenges when you have to select around an object or few objects. Read more here.

To solve the reCAPTCHA V2 you have to:

  • Click on initial reCAPTCHA's checkbox. You will get a set of images and an instruction that tells you what to click. Actually it's one image with the grid on it.

  • Optionally: determine the grid and define it in your request with recaptchacols and recaptcharows parameters.
    If not defined we'll check the size of the image. If it's 300x300px we put 3x3 grid on it. If the size is different we put 4x4 grid.

  • Submit a HTTP POST request to our API URL: https://api.solvecaptcha.com/in.php providing recaptcha parameter set to 1.

    Server accepts images in multipart or base64 format. You have to send only the image set without the grid and blue box.

    Also you can provide instructions as an image using imginstructions parameter. For more info please check the full list of parameters in the table below.

  • Server will return captcha ID or an error code if something gone wrong.

  • Make a 5 seconds timeout and submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.

    If captha is already solved server will return the answer with numbers of grid cells that you need to click like: OK|click:3/8/9/.

    Grid cells are numbered starting from number 1 from left to right from top to bottom. If the grid contain more than 9 cells, letters a-g are used for cells 10-16.

    If captcha is not solved yet server will return CAPCHA_NOT_READY result. Retry your request after 5 seconds.

    If something gone wrong server will return an error code.

  • You simulate clicks on cells from the answer.

Canvas method

In case when reCAPTCHA challenge is to select around object you can pass canvas parameter set to 1.

Server will return the result in the following format: canvas:x,y,x,y,x,y;x,y,x,y,x,y;

Where each pair of x and y are coordinates of points you need to click to select an area around object. If there are more than one area, coordininates of areas will be separated by semicolon.

For example:
canvas:5,5,3,91,93,90,90,7,8,6; - one area
canvas:5,5,3,91,93,90,90,7,8,6;208,211,208,287,294,294,293,209,207,210; - two areas
Point 0,0 is top left corner of the image.

You need to click on these points one by one to pass the challenge.

Multipart sample form for reCAPTCHA V2 old method

<form method="post" action="https://api.solvecaptcha.com/in.php" enctype="multipart/form-data">
<input type="hidden" name="method" value="post">
<input type="hidden" name="recaptcha" value="1"><br>
<input type="hidden" name="canvas" value="0"><br>
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
reCAPTCHA file:
<input type="file" name="file">
Image with instruction:
<input type="file" name="imginstructions">
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY is Your API key.

Base64 sample form for reCAPTCHA V2 old method

<form method="post" action="https://api.solvecaptcha.com/in.php">
<input type="hidden" name="method" value="base64">
<input type="hidden" name="recaptcha" value="1"><br>
<input type="hidden" name="canvas" value="0"><br>
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
reCAPTCHA file body in base64 format:
<textarea name="body">BASE64_RECAPTCHA_FILE</textarea>
Image with instruction body in base64 format:
<textarea name="imginstructions">BASE64_INSTRUCTION_FILE</textarea>
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY is your API key.

BASE64_RECAPTCHA_FILE is base64-encoded image body of reCAPTCHA V2.

BASE64_INSTRUCTION_FILE is base64-encoded image body of image with instruction.

List of POST request parameters for https://api.solvecaptcha.com/in.php

POST parameter Type Required Description
key String Yes your API key
method String Yes post - defines that you're sending an image with multipart form
base64 - defines that you're sending a base64 encoded image
recaptcha Integer Yes 1 - defines that you're sending recatcha as image
canvas Integer
Default: 0
No 1 - defines that you want to use canvas method
file File Yes* Captcha image file.
* - required if you submit image as a file (method=post)
body String Yes* Base64-encoded captcha image
* - required if you submit image as Base64-encoded string (method=base64)
textinstructions String
Max 140 characters
Endcoding: UTF-8
Yes Text with instruction for solving reCAPTCHA.
For example: select images with trees.
Not required if you're sending instruction as an image with imginstructions.
imginstructions Image
Max 100x100px, 25 kB
Yes Image with instruction for solving reCAPTCHA.
Not required if you're sending instruction as text with textinstructions.
recaptcharows Integer No Number of rows in reCAPTCHA grid.
recaptchacols Integer No Number of columns in reCAPTCHA grid.
can_no_answer Integer
Default: 0
No 0 - not specified
1 - possibly there's no images that fit the instruction.
Set the value to 1 only if it's possible that there's no images matching to the instruction.
We'll provide a button "No matching images" to worker and you will receive No_matching_images as answer.
language Integer
Default: 0
No 0 - not specified
1 - Cyrillic captcha
2 - Latin captcha
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.

Please note: you have to send the reCAPTCHA image itself, not its screenshot. And you dont have to combine that image with anything you like, just send it as is.
Max size for reCAPTCHA image is 100 kB.
Max size for imginstructions is 25 kB.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

ClickCaptcha

This method allows you to solve any captcha that requires clicking on images, like Shapchat's Ghost Captcha, reCAPTCHA V2, ASIRRA, etc.

To solve any ClickCaptcha you have to:

  • Get an image and an instruction that tells you what to click.

  • Submit a HTTP POST request to our API URL: https://api.solvecaptcha.com/in.php providing coordinatescaptcha parameter set to 1.
    Server accepts images in multipart or base64 format.

    file File Yes* Captcha image file.
    * - required if you submit image as a file (method=post) body String Yes* Base64-encoded captcha image
    * - required if you submit image as Base64-encoded string (method=base64)

    You can provide an instruction as text using textinstructions parameter, but it's not obligatory if the instruction is already indicated on the image.

    The full list of parameters is in the table below.

  • Server will return captcha ID or an error code if something gone wrong.

  • Make a 5 seconds timeout and submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.

    If captha is already solved server will return the answer with coordinates of points where you have to click, for example: OK|coordinate:x=39,y=59;x=252,y=72. Where the point with x=0,y=0 is the upper left corner of the image.

    If captcha is not solved yet server will return CAPCHA_NOT_READY result. Retry your request after 5 seconds.

    If something gone wrong server will return an error code.

  • You simulate clicks on coordinates from the answer.

Multipart sample form for ClickCaptcha

<form method="post" action="https://api.solvecaptcha.com/in.php" enctype="multipart/form-data">
<input type="hidden" name="method" value="post">
<input type="hidden" name="coordinatescaptcha" value="1">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
ClickCaptcha file:
<input type="file" name="file">
Instruction:
<input type="text" name="textinstructions" value="Click on ghosts">
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY is Your API key.

Base64 sample form for ClickCaptcha

<form method="post" action="https://api.solvecaptcha.com/in.php">
<input type="hidden" name="method" value="base64">
<input type="hidden" name="coordinatescaptcha" value="1">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
ClickCaptcha file body in base64 format:
<textarea name="body">BASE64_CLICKCAPTCHA_FILE</textarea>
Instruction
<input type="text" name="textinstructions" value="Click on ghosts">
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY is your API key.

BASE64_CLICKCAPTCHA_FILE is base64-encoded image body of ClickCaptcha.

List of POST request parameters for https://api.solvecaptcha.com/in.php

POST parameter Type Required Description
key String Yes your API key
method String Yes post - defines that you're sending an image with multipart form
base64 - defines that you're sending a base64 encoded image
coordinatescaptcha Integer Yes 1 - defines that you're sending recatcha as image
textinstructions String
Max 140 characters
Endcoding: UTF-8
Yes Text with instruction for solving ClickCaptcha.
For example: click on images with ghosts.
Not required if the image already contains the instruction.
imginstructions Image
Max 400x150px,
100 kB
Yes Image with instruction for solving reCAPTCHA. Not required if you're sending instruction as text with textinstructions.
min_clicks Integer
Default: 1
No The minimum number of clicks to perform on the image
max_clicks Integer No The maximum number of clicks that can be performed on the image
language Integer
Default: 0
No 0 - not specified
1 - Cyrillic captcha
2 - Latin captcha
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

RotateCaptcha

RotateCaptcha is a type of captcha where you have to rotate images to solve it. The most popular is FunCaptcha.

To solve RotateCaptcha you have to:

  • Get an image or several images that should be rotated.

  • Optionally: determine the angle for one rotation step and provide it as a value for angle parameter.
    If not defined we'll use the default value for FunCaptcha: 40 degrees.

    The full list of parameters is in the table below.

  • Submit images to our server with HTTP POST request to our API URL: https://api.solvecaptcha.com/in.php setting method parameter to rotatecaptcha. Server accepts images only in multipart format.

    Server will return captcha ID or an error code if something gone wrong.

  • Make a 5 seconds timeout and submit a HTTP GET request to our API URL: https://api.solvecaptcha.com/res.php to get the result.

    If captha is already solved server will return the answer with angles for each image like: OK|40|200|-120.
    Positive values mean that images should be rotated clockwise.
    Negative values mean that images should be rotated counter-clockwise.

    If captcha is not solved yet server will return CAPCHA_NOT_READY result. Retry your request after 5 seconds.
    If something gone wrong server will return an error code.

  • Rotate images to given angles to solve your RotateCaptcha.

Sample form for RotateCaptcha

<form method="post" action="https://api.solvecaptcha.com/in.php" enctype="multipart/form-data">
KEY:<br>
<input  name="key" value="YOUR_APIKEY"><br>
Type<br>
<input  name="method" value="rotatecaptcha"><br>
Angle<br>
<input  name="angle" value="40"><br>
Files:<br>
<input type="file" name="file_1"><br>
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY is your API key.

List of POST request parameters for https://api.solvecaptcha.com/in.php

POST parameter Type Required Description
key String Yes your API key
method String Yes Captcha solving method.
rotatecaptcha - defines that you're sending RotateCaptcha
angle Integer
Default: 40
No Angle for one rotation step in degrees.
If not defined we'll use the default value for FunCaptcha: 40 degrees.
file Image Yes* Image to rotate in multipart format.
* - required if you submit image as a file
body Image Yes* Image to rotate in base64 format.
* - required if you submit image as a base64
header_acao Integer
Default: 0
No 0 - disabled
1 - enabled.
If enabled in.php will include Access-Control-Allow-Origin:* header in the response.
Used for cross-domain AJAX requests in web applications. Also supported by res.php.
pingback String No URL for pingback (callback) response that will be sent when captcha is solved.
URL should be registered on the server. More info here.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON
soft_id Integer No ID of software developer. Developers who integrated their software with SolveCaptcha get reward: 10% of spendings of their software users.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes get - get the asnwer for your captcha
id Integer Yes ID of captcha returned by in.php.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request URL example:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=2122988149

Error Handling

It's very important to use proper error handling in your code to avoid suspension of your account and service interruption.

Normally if something is wrong with your request server will return an error.
Below you can find tables with lists of errors with description:

Errors can be returned as plain text or as JSON if you provided json=1 parameter.

In very rare cases server can return an HTML page with error text like 500 or 502 - please keep it in mind and handle such cases correctly.
If you received anything that doesn't looks like the answer or error code - make a 5 seconds timeout and then retry your request.

List of in.php errors

Error code Description Action
ERROR_WRONG_USER_KEY You've provided key parameter value in incorrect format, it should contain 32 symbols. Stop sending requests. Check your API key.
ERROR_KEY_DOES_NOT_EXIST The key you've provided does not exists. Stop sending requests. Check your API key.
ERROR_ZERO_BALANCE You don't have money on your account. Stop sending requests. Deposit your account to continue solving captchas.
ERROR_PAGEURL pagurl parameter is missing in your request. Stop sending requests and change your code to provide valid pagurl parameter.
More info.
ERROR_NO_SLOT_AVAILABLE You can receive this error in two cases:
1. If you solve reCAPTCHA: the queue of your captchas that are not distributed to workers is too long. Queue limit changes dynamically and depends on total amount of captchas awaiting solution and usually it’s between 50 and 100 captchas.
2. If you solve Image Captcha: your maximum rate for image captchas is lower than current rate on the server.
You can change your maximum rate in your account's settings.
If you received this error, don't try to submit your request again immediately. Make 2-3 seconds timeout and then retry to submit your request.
ERROR_ZERO_CAPTCHA_FILESIZE Image size is less than 100 bytes. Check the image file.
ERROR_TOO_BIG_CAPTCHA_FILESIZE Image size is more than 100 kB. Check the image file.
ERROR_WRONG_FILE_EXTENSION Image file has unsupported extension. Accepted extensions: jpg, jpeg, gif, png. Check the image file.
ERROR_IMAGE_TYPE_NOT_SUPPORTED Server can't recognize image file type. Check the image file.
ERROR_IP_NOT_ALLOWED The request is sent from the IP that is not on the list of your allowed IPs. Check the list of your allowed IPs here.
IP_BANNED Your IP address is banned due to many frequent attempts to access the server using wrong authorization keys. To lift the ban, please, contact our support team.
ERROR_CAPTCHAIMAGE_BLOCKED You've sent an image that is marked in our database as unrecognizable.
Usually that happens if the website where you found the captcha stopped sending you captchas and started to send "deny access" image.
Try to override website's limitations.
MAX_USER_TURN You made more than 60 requests to in.php within 3 seconds.
Your account is banned for 10 seconds. Ban will be lifted automatically.
Set at least 100 ms timeout between requests to in.php.
ERROR: NNNN Where NNNN is numeric error code.
You exceeded request limit and your account is temporary suspended.
You should set proper timeouts. Please refer to Request limits for more info.

List of res.php errors

Error code Description Action
CAPCHA_NOT_READY Your captcha is not solved yet. Make 5 seconds timeout and repeat your request.
ERROR_CAPTCHA_UNSOLVABLE We are unable to solve your captcha - three of our workers were unable solve it or we didn't get an answer within 90 seconds (300 seconds for reCAPTCHA V2).
We will not charge you for that request.
You can retry to send your captcha.
ERROR_WRONG_USER_KEY You've provided key parameter value in incorrect format, it should contain 32 symbols. Stop sending requests. Check your API key.
ERROR_KEY_DOES_NOT_EXIST The key you've provided does not exists. Stop sending requests. Check your API key.
ERROR_WRONG_ID_FORMAT You've provided captcha ID in wrong format. The ID can contain numbers only. Check the ID of captcha or your code that gets the ID.
ERROR_WRONG_CAPTCHA_ID You've provided incorrect captcha ID. Check the ID of captcha or your code that gets the ID.
ERROR_BAD_DUPLICATES Error is returned when 100% accuracy feature is enabled. The error means that max numbers of tries is reached but min number of matches not found. You can retry to send your captcha again.
REPORT_NOT_RECORDED Error is returned to your complain request if you already complained lots of correctly solved captchas. Make sure that you're sending complain requests only for incorrectly solved captchas.
ERROR: NNNN Where NNNN is numeric error code.
You exceeded request limit and your account is temporary suspended.
You should set proper timeouts. Please refer to Request limits for more info.

Request limits

Please remember and understand that each your request to our API generates multuple requests to our databases. That's why we ask to set proper timeouts for your requests and use proper error handling for cases when server returns an error (error message, http error or html page with error).

For example:

  • If server returns ERROR_NO_SLOT_AVAILABLE make a 5 seconds timeout before sending next request.
  • If server returns ERROR_ZERO_BALANCE set the timeout to 60 seconds.
  • After uploading a captcha wait a least 5 seconds (10-20 for reCAPTCHA) and only then try to get the answer.
  • If captcha is not solved yet - retry to get the answer after 5 seconds.

If your timeouts are configured incorrectly your account or IP address will be temporary blocked and server will return an error. See the list of error codes in the table below.

Error codes list for request limitations

Error code Blocking time Blocking reason
ERROR: 1001 10 minutes You received 120 ERROR_NO_SLOT_AVAILABLE errors in one minute because your current bid is lower than current bid on the server
ERROR: 1002 5 minutes You received 120 ERROR_ZERO_BALANCE errors in one minute because your balance is out
ERROR: 1003 30 seconds You are getting ERROR_NO_SLOT_AVAILABLE because you are uploading many captchas and server has a long queue of your captchas that are not distributed to workers.
You received three times more errors than amount of captchas you sent (but not less than 120 errors). Increase the timeout if you see this error.
ERROR: 1004 10 minutes Your IP address is blocked because there were 5 requests with incorrect API key from your IP.
ERROR: 1005 5 minutes You are making too many requests to res.php to get answers.
We use the following rule to block your account: R > C * 20 + 1200
Where:
R - the amount of your requests
C - the amount of captchas you've uploaded
That means that you don't have to make more than 20 requests to res.php per each captcha.
Please remember that balance request sent to res.php also counts!
To get your answer faster without a risk to be blocked you can use pingback feature and we will send you the answer when your captcha is solved.

Using proxies

Proxies can be used to solve reCAPTCHA V2 and FunCaptcha from the same IP address as you load the page.
Using proxies is not obligatory at the moment but in future algorithms of reCAPTCHA and FunCaptcha can be changed and it will be required.
And even now some websites check IP address used for solving reCAPTCHA V2. So we recommend you to be ready for these changes.

If you send us the proxy, we check it's availability trying to open the website through you proxy, and if we can't do that we will not use your proxy.
If we're able to use your proxy - we'll load the reCAPTCHA through it for solving.

We don't have our own proxy servers that we can offer to you so you have to use 3rd-party services or setup your own proxy.

We support the following proxy types: SOCKS4, SOCKS5, HTTP, HTTPS with authentication by IP address or login and password.

If your proxy uses IP authentication you have to add our IP addresses to the list of allowed IPs of the proxy:
138.201.188.166

Then provide your proxy IP address and port as a value for proxy parameter.
And the type of your proxy as a value for proxytype parameter.

If your proxy uses login/password authentication you have to include your credentials in proxy parameter.

POST parameters for proxies

POST parameter Type Required Description
proxy String No Format for IP authentication: IP_address:PORT
Example: proxy=123.123.123.123:3128
Format for login/password authentication: login:password@IP_address:PORT
Example: proxy=proxyuser:[email protected]:3128
proxytype String No Type of your proxy: HTTP, HTTPS, SOCKS4, SOCKS5.
Example: proxytype=SOCKS4

Pingback (callback)

We provide a pingback (callback) option that allows you to get the answer for your captcha automatically when it's ready.
It allows you to get answers without making requests to https://api.solvecaptcha.com/res.php and also allows you to avoid account suspension.

To receive automated callback you have to:

  • Register your callback URL.
  • Provide your callback URL as value for pingback parameter of your request to https://api.solvecaptcha.com/in.php.
  • Process HTTP POST request coming from our server to your callback URL. It contains captcha ID and the answer.

Manage pingback URLs

You can manage your pingback URLs making HTTP GET requests to https://api.solvecaptcha.com/res.php
Request parameters are described in the table below.

Important: pingback URL can be added only from the same IP address that your URL is pointing on.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes add_pingback - register new pingback URL
get_pingback - get the list of your pingback URLs
del_pingback - delete pingback URL
addr String - Your pingback URL.
For example: http://mysite.com/pingback/url/ or 123.123.123.123/pingback/url/
You can use 'all' value together with del_pingback to delete all your URLs.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Request examples

Add pingback:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=add_pingback&addr=http://mysite.com/test.php

List pingback URLs:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get_pingback&json=1

Delete all pingback URLs:

https://api.solvecaptcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=del_pingback&addr=all

Reporting answers

Submitting reports on answers is an optional operation, but it helps improve the accuracy of the service and the quality of solutions. If you find that the captcha answer was incorrect, you can file a complaint about the incorrect answer. Our moderators will review your captcha and the worker's response to determine whether the answer was correct or not. Your complaint will help us block workers who frequently make mistakes.

It is recommended to always submit reports on both incorrect and correct answers to enhance the accuracy of the service.

reportbad

Use reportbad if the captcha answer was rejected by the website. Submitting reportbad requests helps the system identify workers with a high error rate and block them, thereby improving service quality.

reportgood

Use reportgood if the captcha solution was successfully accepted by the website. This helps improve the accuracy of request processing in the future.

Request examples:

ReportBAD:

https://api.solvecaptcha.com/res.php?action=reportbad&id=2122988149&key=1abc234de56fab7c89012d34e56fa7b8
                

ReportGOOD:

https://api.solvecaptcha.com/res.php?action=reportgood&id=2122988149&key=1abc234de56fab7c89012d34e56fa7b8
                

Важно: не пытайтесь оправлять reportbad на правильно решённые капчи. Если вы будете это делать, ваш аккаунт будет заблокирован.

Important: Don't try to send reportbad for correctly solved captchas. If you do so, your account will be banned.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes reportbad - report incorrectly solved captha.
reportgood - report correctly solved captha.
id String Yes ID captha.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Server will return OK_REPORT_RECORDED response to your request. Or an error code if something gone wrong.

If you're getting too many incorrectly solved captchas you may provide additional parameters with your captcha to help wokers to solve it correctly

Additional methods

You can also get some additional information with our API, like balance, current rate, etc.
Please check available parameters in the table below.

List of GET request parameters for https://api.solvecaptcha.com/res.php

GET parameter Type Required Description
key String Yes your API key
action String Yes getbalance - get your balance
get - get answers for multiple captchas with one request.
Requires ids parameter.
ids String - Comma separated IDs of your captchas.
json Integer
Default: 0
No 0 - server will send the response as plain text
1 - tells the server to send the response as JSON

Sandbox

We provide Sandbox mode that allows you to see and solve your captchas by yourself.
You can enable Sandbox mode in your settings

Important: please note that captchas sent in Sandbox mode are also charged.

When Sandbox mode is enabled your captchas will not be distributed to wokers and you will see them in Workers Interface

Important: It's not possible to use SandBox mode for reCAPTCHA V2.

Go up