Documentation menu

HCaptchaTaskProxyless: solve HCaptcha without proxies

hCaptcha devs call their captcha "a drop-in replacement for Recaptcha". We tried to create the same thing in our API, so task properties are absolutely the same as in RecaptchaV2TaskProxyless except for the "type" property.

Recaptcha V2 example

Task object

Property Type Required Purpose
type String Yes HCaptchaTaskProxyless
websiteURL String Yes Address of a target web page. Can be located anywhere on the web site, even in a member area. Our workers don't navigate there but simulate the visit instead.
websiteKey String Yes hCaptcha sitekey
userAgent String Yes Provide the User Agent you are using to navigate the website. Our workers will use same value during Hcaptcha solving process.
isInvisible Boolean No Specify whether or not Hcaptcha is invisible. This will render an appropriate widget for our workers.
enterprisePayload Object No Additional parameters which we'll use to render Hcaptcha widget for Enterprise version.

Property Type Required
rqdata String No
sentry Boolean No
apiEndpoint String No
endpoint String No
reportapi String No
assethost String No
imghost String No

Request example

          curl -i -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -X POST -d '{
            "isInvisible": false,
            "userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116"

# Enterprise version:
curl -i -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -X POST -d '{
            "userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116",
            "isInvisible": false,
            "enterprisePayload": {
              "rqdata": "rqdata value from target website",
              "sentry": true

//git clone


$api = new HCaptchaProxyless();

//your account key

//target website address

//hcaptcha key from target website

//optional invisible Hcaptcha flag

//set Enterprise parameters this way:
//    "rqdata"    =>  "somerqdata",
//    "sentry"    =>  true

//create task in API
if (!$api->createTask()) {
    $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red");
    return false;

$taskId = $api->getTaskId();

//wait in a loop for max 300 seconds till task is solved
if (!$api->waitForResult(300)) {
    echo "could not solve captcha\n";
    echo $api->getErrorMessage()."\n";
} else {

    $gResponse = $api->getTaskSolution();
    echo "\n";
    echo "your hcaptcha token: $gResponse\n\n";

          #pip3 install anticaptchaofficial

from anticaptchaofficial.hcaptchaproxyless import *

solver = hCaptchaProxyless()

# tell API that Hcaptcha is invisible

# set here parameters like rqdata, sentry, apiEndpoint, endpoint, reportapi, assethost, imghost
#    "rqdata": "rq data value from target website",
#    "sentry": True

g_response = solver.solve_and_return_solution()
if g_response != 0:
    print "g-response: "+g_response
    print "task finished with error "+solver.error_code
          //npm -i @antiadmin/anticaptchaofficial

const ac = require("@antiadmin/anticaptchaofficial");

//substitute with your own user agent
const userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.123 (KHTML, like Gecko) Chrome/52.0.2743.116";

//set Hcaptcha Enterprise payload if any
const enterprisePayload = {
   "rqdata": "rqdata from target website",
   "sentry": true
//if it is non-Enteprise, set to null
//const enterprisePayload = null;

//set to true if you want us to render it in invisible mode
const isInvisible = false;

ac.solveHCaptchaProxyless('http://DOMAIN.COM', 'WEBSITE_KEY', userAgent, enterprisePayload, isInvisible)
    .then(gresponse => {
        console.log('g-response: '+gresponse);
    .catch(error => console.log('test received error '+error));
          //git clone

using System;
using Anticaptcha_example.Api;
using Anticaptcha_example.Helper;
using Newtonsoft.Json.Linq;

namespace Anticaptcha_example
    internal class Program
        private static void Main() {

            DebugHelper.VerboseMode = true;

            var api = new HCaptchaProxyless
                ClientKey = "YOUR_API_KEY_HERE",
                WebsiteUrl = new Uri(""),
                WebsiteKey = "51829642-0000-0000-896c-594f89d700cc",
                UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116"

            // use to set invisible mode
            //api.IsInvisible = true

            // use to set Hcaptcha Enterprise parameters like rqdata, sentry, apiEndpoint, endpoint, reportapi, assethost, imghost
            //api.EnterprisePayload.Add("rqdata", "rqdata value from target website");
            //api.EnterprisePayload.Add("sentry", "true");

            if (!api.CreateTask())
                DebugHelper.Out("API v2 send failed. " + api.ErrorMessage, DebugHelper.Type.Error);
            else if (!api.WaitForResult())
                DebugHelper.Out("Could not solve the captcha.", DebugHelper.Type.Error);
                DebugHelper.Out("Result: " + api.GetTaskSolution().GRecaptchaResponse, DebugHelper.Type.Success);

          //git clone

package com.anti_captcha;

import com.anti_captcha.Api.HCaptchaProxyless;
import com.anti_captcha.Helper.DebugHelper;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.Iterator;
import java.util.concurrent.ThreadLocalRandom;

public class Main {

    public static void main(String[] args) throws InterruptedException, MalformedURLException, JSONException {


        HCaptchaProxyless api = new HCaptchaProxyless();
        api.setWebsiteUrl(new URL(""));
        api.setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 " +
                "(KHTML, like Gecko) Chrome/52.0.2743.116");

        // uncomment to tell API that HCaptcha is in invisible mode
//        api.setIsInvisible(true);

        // uncomment and use for HCaptcha Enterprise version if you need to set parameters like rqdata, sentry, apiEndpoint, endpoint, reportapi, assethost, imghost
//        JSONObject enterprisePayload = new JSONObject();
//        try {
//            enterprisePayload.put("rqdata", "rqdata from the target website");
//            enterprisePayload.put("sentry", Boolean.TRUE);
//            enterprisePayload.put("apiEndpoint", "https://...");
//        } catch (Exception e) {
//            DebugHelper.out("JSON error: "+e.getMessage(), DebugHelper.Type.ERROR);
//            return;
//        }
//        api.setEnterprisePayload(enterprisePayload);

        if (!api.createTask()) {
                    "API v2 send failed. " + api.getErrorMessage(),
        } else if (!api.waitForResult()) {
            DebugHelper.out("Could not solve the captcha.", DebugHelper.Type.ERROR);
        } else {
            DebugHelper.out("Result: " + api.getTaskSolution().getGRecaptchaResponse(), DebugHelper.Type.SUCCESS);


Response example

JSON with no errors
    "errorId": 0,
    "taskId": 7654321
JSON with an error
    "errorId": 1,
    "errorCode": "ERROR_KEY_DOES_NOT_EXIST",
    "errorDescription": "Account authorization key not found in the system"

Retrieve the solution

Use method getTaskResult to request the solution. Give the worker about 5 seconds before making your first request. If the worker is still busy, retry in 3 seconds.

Task solution object

Property Type Purpose
gRecaptchaResponse String Token string required for interacting with the submit form on the target website.

Response example

JSON with no errors