Below are examples of Hunt Captcha task types that are currently supported:
Hunt CAPTCHA is an anti-bot system used on betting platforms to detect automated activity. It monitors user behavior and, if suspicious actions are detected, triggers an interactive verification.
data parameter. If you need to solve the CAPTCHA, pass the token that the target site provides during certain actions (for example, when requesting an SMS).
| Parameter | Type | Required | Description |
|---|---|---|---|
type |
String | Required | CustomTask |
class |
String | Required | HUNT |
websiteURL |
String | Required | The URL of the page where the Hunt CAPTCHA is located. |
metadata.apiGetLib |
String | Required | The full link to the api.js file. Example: https://www.example.com/hd-api/external/apps/<hash>/api.js |
metadata.data |
String | Optional | The data parameter must be specified when using CAPTCHA solving mode. Pass the meta.token value from the website. |
userAgent |
String | Optional | Browser User-Agent. Pass only a valid UA from Windows OS. |
proxyType |
String | Required | http - regular http/https proxy; https - try this option only if "http" doesn't work; socks4 - socks4 proxy; socks5 - socks5 proxy. |
proxyAddress |
String | Required | IPv4/IPv6 proxy IP address. Not allowed: transparent proxies or local machine proxies. |
proxyPort |
Integer | Required | Proxy port. |
proxyLogin |
String | Required | Proxy server login. |
proxyPassword |
String | Required | Proxy server password. |
The solution supports two operating modes:
In this mode, you do not pass the data parameter. After creating the task, you will receive an X-HD — a unique fingerprint tied to your IP address, which can be used for subsequent requests to the website.
In this mode, you must pass a token (the value of meta.token) in the data parameter. This token is issued by the website during specific actions (for example, when requesting an SMS). After creating the task, you will receive the CAPTCHA solution as a token ready to be used on the website.
| Situation | Is data required? |
|---|---|
| Initial initialization | No |
| Need to obtain X-HD | No |
| Website returned Captcha error | Yes |
meta.token received | Yes |
datameta.tokendata = meta.tokenUsed to obtain an X-HD token bound to the IP address.
POST https://captcha69.com/createTask
Content-Type: application/json
{
"clientKey": "max1_YOUR_API_KEY",
"task": {
"type": "CustomTask",
"class": "HUNT",
"websiteURL": "https://example.com",
"metadata": {
"apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"
},
"userAgent": "userAgentPlaceholder",
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
{
"errorId": 0,
"taskId": 407533072
}
Used after the website returns a captcha error and provides meta.token.
meta.token
{
"errors": [{"code": "113", "title": "Captcha error"}],
"meta": {
"token": "SITE_META_TOKEN"
}
}
The value of meta.token must be passed in the data parameter.
POST https://captcha69.com/createTask
Content-Type: application/json
{
"clientKey": "max1_YOUR_API_KEY",
"task": {
"type": "CustomTask",
"class": "HUNT",
"websiteUrl": "https://example.com",
"metadata": {
"apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js",
"data": "kufyHK/s/jTNU...AfwIW"
},
"userAgent": "userAgentPlaceholder",
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
{
"errorId": 0,
"taskId": 407533072
}
Use the getTaskResult method to obtain the X-HD fingerprint or the Hunt CAPTCHA solution.
solution.data.token:
solution.data.token is the solution token that must be sent back to the website to confirm the action.POST https://captcha69.com/getTaskResult
Content-Type: application/json
{
"clientKey": "max1_YOUR_API_KEY",
"taskId": 407533072
}
{
"errorId": 0,
"status": "ready",
"solution": {
"data": {
"token": "6IyDCCpDdSK...YGs1Wug/z/kLNSpjewI="
}
}
}
| Property | Type | Description |
|---|---|---|
data.token |
String | X-HD fingerprint token (Mode 1) or CAPTCHA solution token (Mode 2). |
General principle of working with cookies:
Set-Cookie header.Cookie header.import { gotScraping } from "got-scraping";
import crypto from "crypto";
const API_KEY = "max1_YOUR_API_KEY";
const SOLVER_URL = "https://captcha69.com";
const BASE_URL = "https://example.com";
const API_GET_LIB = "https://example.com/hd-api/external/apps/a1047eab1035d58682a53557e0b2a75edbfd15fd/api.js";
const UA = "userAgentPlaceholder";
const PROXY_HOST = "proxyAddress";
const PROXY_PORT = 8080;
const PROXY_USER = "proxyLogin";
const PROXY_PASS = "proxyPassword";
const PROXY = `http://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}`;
const delay = (ms) => new Promise((r) => setTimeout(r, ms));
async function createTask(task) {
const { body } = await gotScraping.post(`${SOLVER_URL}/createTask`, {
json: { clientKey: API_KEY, task },
responseType: "json",
});
if (body.errorId !== 0)
throw new Error("createTask error: " + JSON.stringify(body));
return body.taskId;
}
async function waitResult(taskId) {
while (true) {
const { body } = await gotScraping.post(`${SOLVER_URL}/getTaskResult`, {
json: { clientKey: API_KEY, taskId },
responseType: "json",
});
if (body.status === "ready")
return body.solution?.token || body.solution?.data?.token;
await delay(3000);
}
}
(async () => {
try {
// Step 1: Get cookies
console.log("STEP 1 - Getting cookies...");
const base = await gotScraping.get(BASE_URL + "/registration?type=phone_reg", {
headers: { "user-agent": UA },
proxyUrl: PROXY,
});
let cookies = (base.headers["set-cookie"] || [])
.map((c) => c.split(";")[0])
.join("; ");
const che_g = crypto.randomUUID();
cookies += `; che_g=${che_g}`;
// Step 2: Create fingerprint
console.log("STEP 2 - Creating fingerprint...");
const fingerprintTaskId = await createTask({
type: "CustomTask",
class: "HUNT",
websiteURL: BASE_URL + "/",
userAgent: UA,
metadata: { apiGetLib: API_GET_LIB },
proxyType: "http",
proxyAddress: PROXY_HOST,
proxyPort: PROXY_PORT,
proxyLogin: PROXY_USER,
proxyPassword: PROXY_PASS,
});
const xhd = await waitResult(fingerprintTaskId);
console.log("X-HD:", xhd);
// Step 3: Trigger action (e.g., SMS)
console.log("STEP 3 - Trigger SMS...");
const smsResp = await gotScraping.post(BASE_URL + "/web-api/api/web/registration/v2/sms", {
headers: { cookie: cookies, "x-hd": xhd },
json: { data: { attributes: { phone: "91123456789", country_code: "54" } } },
proxyUrl: PROXY,
responseType: "json",
});
const metaToken = smsResp.body?.meta?.token;
if (!metaToken) throw new Error("meta.token not received");
console.log("meta.token:", metaToken);
// Step 4: Solve captcha
console.log("STEP 4 - Solving Hunt captcha...");
const solveTaskId = await createTask({
type: "CustomTask",
class: "HUNT",
websiteURL: BASE_URL + "/",
userAgent: UA,
metadata: { apiGetLib: API_GET_LIB, data: metaToken },
proxyType: "http",
proxyAddress: PROXY_HOST,
proxyPort: PROXY_PORT,
proxyLogin: PROXY_USER,
proxyPassword: PROXY_PASS,
});
const captchaToken = await waitResult(solveTaskId);
console.log("Captcha token:", captchaToken);
// Step 5: Final request
console.log("STEP 5 - Sending final request...");
const finalResp = await gotScraping.post(BASE_URL + "/api/web/registration/v2/sms", {
headers: { cookie: cookies, "x-hd": xhd },
body: JSON.stringify({
data: { attributes: { phone: "91123456789", country_code: 54, captcha: captchaToken } },
}),
proxyUrl: PROXY,
});
console.log("FINAL RESPONSE:", finalResp.body);
} catch (err) {
console.error("FATAL ERROR:", err);
}
})();
import requests
import uuid
import time
API_KEY = "max1_YOUR_API_KEY"
SOLVER_URL = "https://captcha69.com"
BASE_URL = "https://example.com"
API_GET_LIB = "https://example.com/hd-api/external/apps/c1e24d5857463de4393e3f1489b00ebd4495da64/api.js"
UA = "userAgentPlaceholder"
PROXY_HOST = "proxyAddress"
PROXY_PORT = 8080
PROXY_LOGIN = "proxyLogin"
PROXY_PASSWORD = "proxyPassword"
PROXY = f"http://{PROXY_LOGIN}:{PROXY_PASSWORD}@{PROXY_HOST}:{PROXY_PORT}"
proxies = {"http": PROXY, "https": PROXY}
def delay(ms):
time.sleep(ms / 1000)
def create_task(task):
r = requests.post(
SOLVER_URL + "/createTask",
json={"clientKey": API_KEY, "task": task}
)
data = r.json()
if data["errorId"] != 0:
raise Exception("createTask error: " + str(data))
return data["taskId"]
def wait_result(task_id):
while True:
r = requests.post(
SOLVER_URL + "/getTaskResult",
json={"clientKey": API_KEY, "taskId": task_id}
)
data = r.json()
if data["status"] == "ready":
solution = data.get("solution", {})
return solution.get("token") or solution.get("data", {}).get("token")
delay(3000)
session = requests.Session()
try:
# Step 1: Get cookies
print("STEP 1 - Getting cookies")
r = session.get(BASE_URL + "/en/registration?type=phone", headers={"user-agent": UA}, proxies=proxies)
cookies = "; ".join([f"{c.name}={c.value}" for c in session.cookies])
cookies += f"; che_g={uuid.uuid4()}"
print("Cookies:", cookies)
# Step 2: Create fingerprint
print("STEP 2 - Creating fingerprint")
fingerprint_task = create_task({
"type": "CustomTask",
"class": "HUNT",
"websiteURL": BASE_URL + "/en/",
"userAgent": UA,
"metadata": {"apiGetLib": API_GET_LIB},
"proxyType": "http",
"proxyAddress": PROXY_HOST,
"proxyPort": PROXY_PORT,
"proxyLogin": PROXY_LOGIN,
"proxyPassword": PROXY_PASSWORD
})
xhd = wait_result(fingerprint_task)
print("X-HD:", xhd)
# Step 3: Trigger SMS
print("STEP 3 - Trigger SMS")
sms_resp = session.post(
BASE_URL + "/web-api/api/web/registration/v2/sms",
headers={"cookie": cookies, "x-hd": xhd},
json={"data": {"attributes": {"phone": "9102345678", "country_code": "7"}}},
proxies=proxies
)
sms_data = sms_resp.json()
meta_token = sms_data.get("meta", {}).get("token")
if not meta_token:
raise Exception("meta.token not received")
print("meta.token:", meta_token)
# Step 4: Solve captcha
print("STEP 4 - Solving captcha")
solve_task = create_task({
"type": "CustomTask",
"class": "HUNT",
"websiteURL": BASE_URL + "/en/",
"userAgent": UA,
"metadata": {"apiGetLib": API_GET_LIB, "data": meta_token},
"proxyType": "http",
"proxyAddress": PROXY_HOST,
"proxyPort": PROXY_PORT,
"proxyLogin": PROXY_LOGIN,
"proxyPassword": PROXY_PASSWORD
})
captcha_token = wait_result(solve_task)
print("Captcha token:", captcha_token)
# Step 5: Final request
print("STEP 5 - Final request")
final = session.post(
BASE_URL + "/web-api/api/web/registration/v2/sms",
headers={"cookie": cookies, "x-hd": xhd},
json={"data": {"attributes": {"phone": "9102345678", "country_code": 7, "captcha": captcha_token}}},
proxies=proxies
)
print("FINAL STATUS:", final.status_code)
print(final.json())
except Exception as e:
print("FATAL ERROR")
print(e)