Index
Download the api client based example codes:
reCAPTCHA v3 API support
Our service now supports Google reCAPTCHA v3 (beta). This API is quite similar to the tokens(reCAPTCHA v2) API. Only 2 new parameters were added, one for the action and other for the minimal score
reCAPTCHA v3 returns a score from each user, that evaluate if user is a bot or human. Then the website uses the score value that could range from 0 to 1 to decide if will accept or not the requests. Lower scores near to 0 are identified as bot.
The action parameter at reCAPTCHA v3 is an additional data used to separate different captcha validations like for example login, register, sales, etc.
Pricing
For the time being, price is $2.89/1K reCAPTCHA v3 challenges correctly solved. You will not be billed for captchas reported as incorrectly solved. Note that this pricing applies to new reCAPTCHA v3 only, so only customers using this specific API will be charged said rate.
reCAPTCHA v3 API FAQ:
Is a new parameter that allows processing user actions on the website differently.
To find this we need to inspect the javascript code of the website looking for call of grecaptcha.execute function. Example: grecaptcha.execute('6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f', {action: something}). Sometimes it's really hard to find it and we need to look through all javascript files. We may also try to find the value of action parameter inside ___grecaptcha_cfg configuration object. Also we can call grecaptcha.execute and inspect javascript code. The API will use "verify" default value it if we won't provide action in our request.
The minimal score needed for the captcha resolution. We recommend using the 0.3 min-score value, scores highers than 0.3 are hard to get.
- What are the POST parameters for the reCAPTCHA v3 API?
-
- username: Your ITT account username
- password: Your ITT account password
- type=5: Type 5 specifies this is reCAPTCHA v3 API
- token_params=json(payload): the data to access the recaptcha challenge json payload structure:
-
proxy: your proxy url and credentials (if any).Examples:
- http://127.0.0.1:3128
- http://user:[email protected]:3128
-
proxytype: your proxy connection protocol. For supported proxy types refer to
Which proxy types are supported?. Example:
- HTTP
-
googlekey: the google recaptcha site key of the website with the recaptcha.
For more details about the site key refer to What is a
recaptcha site key?. Example:
- 6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
- pageurl: the url of the page with the recaptcha challenges. This url has to include the path in which the recaptcha is loaded. Example: if the recaptcha you want to solve is in http://test.com/path1, pageurl has to be http://test.com/path1 and not http://test.com.
- action: The action name.
- min_score: The minimal score, usually 0.3
Note: if proxy is provided, proxytype is a required parameter.
Full example of token_params:
{ "proxy": "http://127.0.0.1:3128", "proxytype": "HTTP", "googlekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "pageurl": "http://test.com/path_with_recaptcha", "action": "example/action", "min_score": 0.3 } - What's the response from reCAPTCHA v3 API?
-
The response has the same structure as regular captcha. Refer to Polling for uploaded CAPTCHA status for details about the response. The solution will come in the text key of the response. It's valid for one use and has a 1 minute lifespan.
- Token Image API: Provided a site url and site key, the API returns a token that you will use to submit the form in the page with the reCaptcha challenge.
- What's the Token Image API URL?
-
To use the Token Image API you will have to send a HTTP POST Request to http://api.imagestotext.com/api/captcha
- What are the POST parameters for the Token image API?
-
- username: Your ITT account username
- password: Your ITT account password
- type=4: Type 4 specifies this is a New Recaptcha Token Image API
- token_params=json(payload): the data to access the recaptcha challenge json payload structure:
-
proxy: your proxy url and credentials (if any).Examples:
- http://127.0.0.1:3128
- http://user:[email protected]:3128
-
proxytype: your proxy connection protocol. For supported proxy types refer to
Which proxy types are supported?. Example:
- HTTP
-
googlekey: the google recaptcha site key of the website with the recaptcha.
For more details about the site key refer to What is a
recaptcha site key?. Example:
- 6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
- pageurl: the url of the page with the recaptcha challenges. This url has to include the path in which the recaptcha is loaded. Example: if the recaptcha you want to solve is in http://test.com/path1, pageurl has to be http://test.com/path1 and not http://test.com.
Note: if proxy is provided, proxytype is a required parameter.
Full example of token_params:
{ "proxy": "http://127.0.0.1:3128", "proxytype": "HTTP", "googlekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "pageurl": "http://test.com/path_with_recaptcha" } - What's the response from the Token image API?
-
The token image API response has the same structure as regular captchas' response. Refer to Polling for uploaded CAPTCHA status for details about the response. The token will come in the text key of the response. It's valid for one use and has a 2 minute lifespan. It will be a string like the following:
"03AOPBWq_RPO2vLzyk0h8gH0cA2X4v3tpYCPZR6Y4yxKy1s3Eo7CHZRQntxrd saD2H0e6S3547xi1FlqJB4rob46J0-wfZMj6YpyVa0WGCfpWzBWcLn7tO_EYs vEC_3kfLNINWa5LnKrnJTDXTOz-JuCKvEXx0EQqzb0OU4z2np4uyu79lc_Ndv L0IRFc3Cslu6UFV04CIfqXJBWCE5MY0Ag918r14b43ZdpwHSaVVrUqzCQMCyb cGq0yxLQf9eSexFiAWmcWLI5nVNA81meTXhQlyCn5bbbI2IMSEErDqceZjf1m X3M67BhIb4"To learn how to use the token to solve a recaptcha, refer to How to use token to solve a recaptcha?
- Which proxy types are supported?
-
Currently, only HTTP proxies are supported. Support for other types will be added in the future.
- What is a recaptcha site key?
-
This is a unique identifier Google assigns to each website that uses the recaptcha service. To find the site key, follow these steps:
- Go to the website whose recaptcha you're trying to bypass.
- Open your browser's developers console by doing one of the following:
- Use your browser's keyboard shortcut (Refer to this link for help)
- Right click anywhere on the page, click the "Inspect" or "Inspect element" option and click on the "Console" tab of the window the opened up.
- If none of the above work, google how to open your browser's console.
- Paste this JavaScript instruction on the developers console: document.getElementsByClassName('g-recaptcha')[0].getAttribute("data-sitekey");
- Press Enter. The result should be a string lke the one used as example in the googlekey section of the What are the POST parameters for the Token image API? question. This string is the site key.
- How to use token to solve a recaptcha?
-
There are three ways in which the token can be used:
The first one is to make a POST request to the URL in the form's
actionattribute with the token set as the value of the textarea field whose id isg-recaptcha-response. The other fields can be filled as you desire. This is the recommended method to consume the token given that it does not require browser emulation nor DOM manipulation.The second way is to manipulate the DOM. If you are developing a script to solve recaptchas, check if the programming language or framework you are using has a library to manipulate the DOM or execute JavaScript instructions. The following steps need to be completed to successfully use the token:
-
Put the token as the inner html of the element with id "g-recaptcha-response".
- To do this with JavaScript, run: document.getElementById('g-recaptcha-response').innerHTML=TOKEN; where TOKEN is the string returned in the text key of the API's response. Place double quotes (") before and after the token if the returned string does not already have them.
-
Submit the form or complete the action that requires the recaptcha to be solved.
- To achieve this with Javascript, execute: document.getElementById('FORM_ID').submit(); where FORM_ID is the id of the form that wants to be submitted.
Note: methods 2 and 3 should only be used for testing purposes as they are far slower and more resource intensive than the first one.
-
Put the token as the inner html of the element with id "g-recaptcha-response".
- How to verify that my proxy is being used to solve a captcha?
-
Go to Previous Submissions after uploading a captcha and check the "Proxy" and "Provided Proxy Status" fields of the uploaded captcha. If your proxy was used to solve the captcha, the "Proxy" field's value will be your proxy's IP address and the "Provided Proxy Status" will be "Good". If it was not used, "Proxy" will have "ITT Proxy" as value (meaning that captcha was solved using one of our proxies) and "Provided Proxy Status" field's value will be "Bad or not provided". Example screenshot:
Curl usage code examples for reCAPTCHA v3 API:
-
1) Send your payload:
Please note we are using type="5" for reCAPTCHA v3 API.
curl --header 'Expect: ' -F username=your_username_here \
-F password=your_password_here \
-F type='5' \
-F token_params='{"proxy": "http://user:[email protected]:1234","proxytype": "HTTP","googlekey": "6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_b","pageurl": "http://google.com", "action": "example/action", "min_score": 0.3}' \
http://api.imagestotext.com/api/captcha
2) Pulling captcha : take the given CAPTCHA_ID and make a request like this:
curl -H "Accept: application/json" http://api.imagestotext.com/api/captcha/CAPTCHA_ID
Result is a json-string where the field "text" includes the respective solution:
'{"status": 0, "captcha": 2911096,
"is_correct": true, "text": "textSolution"}'
Using reCAPTCHA v3 API with api clients:
1) PYTHON - RECAPTCHAV3
#recaptcha_V3
import imagestotext
import json
# Put your ITT account username and password here.
username = "username"
password = "password"
# Put the proxy and reCaptcha token data
# recaptchaV3 requires action that is the action that triggers
# recaptchaV3 validation
# if not action is provided we use the default value "verify"
# also you need to provide a minimum score, a number from 0.1 to 0.9,
# this is the minimum score acceptable from recaptchaV3
Captcha_dict = {
'proxy': 'http://user:[email protected]:1234',
'proxytype': 'HTTP',
'googlekey': '6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f',
'pageurl': 'http://google.com',
'action': "example/action",
'min_score': 0.3}
# Create a json string
json_Captcha = json.dumps(Captcha_dict)
# client = imagestotext.SocketClient(username, password)
# to use http client client = imagestotext.HttpClient(username, password)
client = imagestotext.HttpClient(username, password)
try:
balance = client.get_balance()
print(balance)
# Put your CAPTCHA type and Json payload here:
captcha = client.decode(type=5, token_params=json_Captcha)
if captcha:
# The CAPTCHA was solved; captcha["captcha"] item holds its
# numeric ID, and captcha["text"] item its list of "coordinates".
print ("CAPTCHA %s solved: %s" % (captcha["captcha"], captcha["text"]))
if '': # check if the CAPTCHA was incorrectly solved
client.report(captcha["captcha"])
except imagestotext.AccessDeniedException:
# Access to ITT API denied, check your credentials and/or balance
print ("error: Access to ITT API denied," +
"check your credentials and/or balance")
New Recaptcha by Token API support
What's "new reCAPTCHA by Token"?
They're new reCAPTCHA challenges that typically require the user to identify and click on certain images. They're not to be confused with traditional word/number reCAPTCHAs (those have no images).
For your convenience, we implemented support for New Recaptcha by Token API. If your software works with it, and supports minimal configuration, you should be able to decode captchas using ImagesToText in no time.
We also support solving token captchas through our 2captcha api. Check it out!
Pricing
For the time being, price is $2.89/1K Token reCAPTCHA challenges correctly solved. You will not be billed for Token Images reported as incorrectly solved. Note that this pricing applies to new Token reCAPTCHA images only, so only customers using this specific API will be charged said rate.
Token Image API FAQ:
Usage code examples for TOKEN IMAGE API:
-
1) Send your payload:
Please note we are using type="4" for TOKEN IMAGE API.
curl --header 'Expect: ' -F username=your_username_here \
-F password=your_password_here \
-F type='4' \
-F token_params='{"proxy": "http://user:[email protected]:1234","proxytype": "HTTP","googlekey": "6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_b","pageurl": "http://google.com"}' \
http://api.imagestotext.com/api/captcha
2) Pulling captcha : take the given CAPTCHA_ID and make a request like this:
curl -H "Accept: application/json" http://api.imagestotext.com/api/captcha/CAPTCHA_ID
Result is a json-string where the field "text" includes the respective solution:
'{"status": 0, "captcha": 2911096,
"is_correct": true, "text": "textToken"}'
Using TOKEN IMAGE API with api clients:
1) PHP
/**
* Images To Text PHP API recaptcha token image usage example
*
* @package ITTAPI
* @subpackage PHP
*/
/**
* ITT API clients
*/
require_once 'imagestotext.php';
// Put your ITT username & password here.
$username = "username";
$password = "password";
// Use ImagesToText_HttpClient() class if you want to use HTTP API.
$client = new ImagesToText_HttpClient($username, $password);
$client->is_verbose = true;
echo "Your balance is {$client->balance} US cents\n";
// To use recaptcha_Token
// Set the proxy and reCaptcha token data
$data = array(
'proxy' => 'http://user:[email protected]:1234',
'proxytype' => 'HTTP',
'googlekey' => '6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_b',
'pageurl' => 'http://google.com');
//Create a json string
$json = json_encode($data);
//Put the type and the json payload
$extra = [
'type'=>4,
'token_params'=> $json, # banner img
];
// Put null the first parameter and add the extra payload
if ($captcha = $client->decode(null, $extra)) {
echo "CAPTCHA {$captcha['captcha']} uploaded\n";
sleep(ImagesToText_Client::DEFAULT_TIMEOUT);
// Poll for CAPTCHA indexes:
if ($text = $client->get_text($captcha['captcha'])) {
echo "CAPTCHA {$captcha['captcha']} solved: {$text}\n";
// Report an incorrectly solved CAPTCHA.
// Make sure the CAPTCHA was in fact incorrectly solved!
//$client->report($captcha['captcha']);
}
}
import imagestotext
import json
# Put your ITT account username and password here.
username = "user"
password = "password"
# Put the proxy and reCaptcha token data
Captcha_dict = {
'proxy': 'http://user:[email protected]:1234',
'proxytype': 'HTTP',
'googlekey': '6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f',
'pageurl': 'http://google.com'}
# Create a json string
json_Captcha = json.dumps(Captcha_dict)
#client = imagestotext.SocketClient(username, password)
#to use http client client = imagestotext.HttpClient(username, password)
client = imagestotext.HttpClient(username, password)
try:
balance = client.get_balance()
# Put your CAPTCHA type and Json payload here:
captcha = client.decode(type=4,token_params=json_Captcha)
if captcha:
# The CAPTCHA was solved; captcha["captcha"] item holds its
# numeric ID, and captcha["text"] item its a text token".
print "CAPTCHA %s solved: %s" % (captcha["captcha"], captcha["text"])
if '': # check if the CAPTCHA was incorrectly solved
client.report(captcha["captcha"])
except imagestotext.AccessDeniedException:
# Access to ITT API denied, check your credentials and/or balance
print "error: Access to ITT API denied, check your
\ credentials and/or balance"
import com.ImagesToText.AccessDeniedException;
import com.ImagesToText.Client;
import com.ImagesToText.HttpClient;
import com.ImagesToText.SocketClient;
import com.ImagesToText.Captcha;
import java.io.IOException;
class ExampleNewRecaptchaToken
{
public static void main(String[] args)
throws Exception
{
// EXAMPLE RECAPTCHA_TOKEN.
// Put your ITT username & password here:
//Client client = (Client)(new SocketClient(args[0], args[1]));
String username = "your_username_here";
String password = "your_password_here";
Client client = (Client)(new HttpClient(username, password));
client.isVerbose = true;
try {
try {
System.out.println("Your balance is " + client.getBalance() + " US cents");
} catch (IOException e) {
System.out.println("Failed fetching balance: " + e.toString());
return;
}
Captcha captcha = null;
try {
// Upload a reCAPTCHA and poll for its status with 120 seconds timeout.
// Put your proxy, proxy type, page googlekey, page url and solving timeout (in seconds)
// 0 or nothing for the default timeout value.
captcha = client.decode("http://user:[email protected]:1234","http","6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_b","http://google.com");
} catch (IOException e) {
System.out.println("Failed uploading CAPTCHA");
return;
}
if (null != captcha) {
System.out.println("CAPTCHA " + captcha.id + " solved: " + captcha.text);
// Report incorrectly solved CAPTCHA if necessary.
// Make sure you've checked if the CAPTCHA was in fact incorrectly
// solved, or else you might get banned as abuser.
/*try {
if (client.report(captcha)) {
System.out.println("Reported as incorrectly solved");
} else {
System.out.println("Failed reporting incorrectly solved CAPTCHA");
}
} catch (IOException e) {
System.out.println("Failed reporting incorrectly solved CAPTCHA: " + e.toString());
}*/
} else {
System.out.println("Failed solving CAPTCHA");
}
} catch (com.ImagesToText.Exception e) {
System.out.println(e);
}
}
}
using ImagesToText;
/* Put your ImagesToText account username and password here.
Use SocketClient for SOCKET API. */
Client client = (Client)new HttpClient(username, password);
//Put your Proxy credentials and type here
string proxy = "http://user:[email protected]:1234";
string proxyType = "HTTP";
//Put the page data here
string googlekey = "6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_b";
string pageurl = "http://google.com";
string tokenParams = "{\"proxy\": \"" + proxy + "\"," +
"\"proxytype\": \"" + proxyType + "\"," +
"\"googlekey\": \"" + googlekey + "\"," +
"\"pageurl\": \"" + pageurl + "\"}";
try {
double balance = client.GetBalance();
// Upload a CAPTCHA and poll for its status. Put the Token CAPTCHA
// Json payload, CAPTCHA type and desired solving timeout (in seconds)
// here. If solved, you'll receive a ImagesToText.Captcha object.
Captcha captcha = client.Decode( Client.DefaultTimeout,
new Hashtable (){
{ "type", 4 },
{"token_params", tokenParams}
});
if (null != captcha) {
/* The CAPTCHA was solved; captcha.Id property holds
its numeric ID, and captcha.Text holds its text. */
Console.WriteLine("CAPTCHA {0} solved: {1}", captcha.Id,
captcha.Text);
if (/* check if the CAPTCHA was incorrectly solved */) {
client.Report(captcha);
}
}
} catch (AccessDeniedException e) {
/* Access to ITT API denied, check your credentials and/or balance */
}
5) VB.Net
Imports ImagesToText
' Put your ITT username & password here:
'Dim clnt As New SocketClient(username, password)
Dim clnt As New HttpClient(username, password)
' Put your Proxy credentials and type here
Dim proxy As String = "http://user:[email protected]:1234"
Dim proxyType As String = "HTTP"
' Put the page data here
Dim googlekey As String = "6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_b";
Dim pageurl As String = "http://google.com";
Console.WriteLine(String.Format("Your balance is {0,2:f} US cents",
clnt.Balance))
' Create the Json payload, Put the Site url and Sitekey here.
Dim tokenParams As String = "{""proxy"": """ + proxy + """," +
"""proxytype"": """ + proxyType + """," +
"""googlekey"": """ + googlekey + """," +
"""pageurl"": """ + pageurl + """}"
' Create the complete payload, Put the type 4
Dim ext_data As New Hashtable()
ext_data.Add("type", 4)
ext_data.Add("token_params", tokenParams)
' Upload a CAPTCHA and poll for its status. Put the Token CAPTCHA
' Json payload, CAPTCHA type and desired solving timeout (in seconds)
' here. If solved, you'll receive a ImagesToText.Captcha object.
Dim cptch As Captcha = clnt.Decode(Client.DefaultTimeout,ext_data)
If cptch IsNot Nothing Then
Console.WriteLine(String.Format("CAPTCHA {0:d} solved: {1}", cptch.Id,
cptch.Text))
' Report an incorrectly solved CAPTCHA.
' Make sure the CAPTCHA was in fact incorrectly solved, do not
' just report it at random, or you might be banned as abuser.
'If clnt.Report(cptch) Then
' Console.WriteLine("Reported as incorrectly solved")
'Else
' Console.WriteLine("Failed reporting as incorrectly solved")
'End If
End If
6) iMacros
' this script uses DeCaptcher API, to use this API first we need to opt-in our user in the following URL
' https://imagestotext.com/user/api/decaptcher
' Is recomended to read the FAQ in that page
VERSION BUILD=844
' we need to set a timeout to wait for the captcha solution
SET !TIMEOUT_PAGE 200
' the script go to this URL to use the API
URL GOTO=http://api.imagestotext.com/decaptcher?function=token&print_format=html
' Set our username, need to replace {{}} with username, ex.
' TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:username CONTENT=myusername
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:username CONTENT={{username}}
' replace password with our password, ex.
' TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:password CONTENT=mycurrentpassword
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:password CONTENT={{password}}
' here we set our proxy, ex.
' TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:proxy CONTENT=https://proxy_username:proxy_password@proxy_url:proxy_port
' we need to use this proxy format https://proxy_username:proxy_password@proxy_url:proxy_port
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:proxy CONTENT={{proxy}}
' here we set the proxy type ex.
' TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:proxytype CONTENT=http
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:proxytype CONTENT={{proxy_type}}
' here we set the googlekey
' for information about googlekey, look here https://imagestotext.com/user/api/newtokenrecaptcha#what-site-key
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:googlekey CONTENT={{google_site_key}}
' here we set the site that have the token recaptcha challenge, ex.
' TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:pageurl CONTENT=https://www.site.com/login
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://api.imagestotext.com/decaptcher ATTR=NAME:pageurl CONTENT={{challenge_site}}
' we submit the captcha to solve
TAG POS=1 TYPE=INPUT:SUBMIT ATTR=TYPE:submit
' and we get our result
TAG POS=6 TYPE=TD ATTR=* EXTRACT=TXT
SET !VAR1 {{!EXTRACT}}
7) Node.js
/*
* Images To Text Node.js API recaptcha token image usage example
*/
const itt = require('./imagestotext.js');
const username = 'username'; // ITT account username
const password = 'password'; // ITT account password
// Proxy and Recaptcha token data
const token_params = JSON.stringify({
'proxy': 'http://username:[email protected]:3128',
'proxytype': 'HTTP',
'googlekey': '6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f',
'pageurl': 'http://google.com'
});
// Images To Text Socket Client
const client = new itt.SocketClient(username, password);
// const client = new itt.HttpClient(username, password) for http client
// Get user balance
client.get_balance((balance) => {
console.log(balance);
});
// Solve captcha with type 4 & token_params extra arguments
client.decode({extra: {type: 4, token_params: token_params}}, (captcha) => {
if (captcha) {
console.log('Captcha ' + captcha['captcha'] + ' solved: ' + captcha['text']);
/*
* Report an incorrectly solved CAPTCHA.
* Make sure the CAPTCHA was in fact incorrectly solved!
* client.report(captcha['captcha'], (result) => {
* console.log('Report status: ' + result);
* });
*/
}
});