Skip to content
ALTCHA
AltchaTaskProxyLess

ALTCHA Solver, solved in 5.0s.

Solve ALTCHA proof-of-work challenges instantly. Send the challenge (or its URL); get back the base64 token the widget submits.

Avg Speed~5.0s
Success99%+
Cost / 1k$2.00
Throughput12/m

ALTCHA is an open-source, self-hostable proof-of-work captcha with no tracking and no puzzles. The server issues a challenge — {algorithm, challenge, salt, maxnumber, signature} — and the browser brute-forces the integer N whose hash matches. It's used by privacy-conscious sites that don't want to send data to Google or hCaptcha.

Quick Integration

solve.py
import requests, time

API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"

# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "AltchaTaskProxyLess",
        "challengeURL": "https://example.com/altcha/challenge"
    }
}).json()

task_id = task["taskId"]
print(f"Task created: {task_id}")

# Step 2: Poll for result
while True:
    result = requests.post(f"{API}/getTaskResult", json={
        "clientKey": KEY,
        "taskId": task_id
    }).json()

    if result["status"] == "ready":
        print("Solved!", result["solution"])
        break
    elif result["status"] == "failed":
        print("Failed:", result.get("errorDescription"))
        break

    time.sleep(1)

Using the result

use_result.py
# Step 3: Use the result — paste the token into the site's captcha form field
token = result["solution"]["token"]
# Browser side: set the textarea value or the hidden input. Then submit.
# Server-to-server: post the token alongside the form fields you normally send.
resp = requests.post("https://target.example.com/submit", data={
    "username": "...",
    "captcha_response": token,   # <-- replace with the field name your site uses
})
print(resp.status_code)

1. Send Payload

Dispatch your AltchaTaskProxyLess to our processing cluster via the secure API endpoint.

2. Solving Engine

We run the same hash search the widget would (SHA-256/384/512), in parallel across cores, and return the base64-encoded solution payload in the exact format the ALTCHA widget submits. No proxy or browser needed — pass the challenge object (or a challengeURL we fetch it from) and get the token in milliseconds.

3. Get Result

Poll getTaskResult for the validated token, then finalize your automated request.

Using your own proxy

Use AltchaTask instead of AltchaTaskProxyLess to route the solve through your own proxy — useful when the target site checks that the solving IP matches the submitting IP.

solve_proxy.py
import requests, time

API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"

# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "AltchaTask",
        "challengeURL": "https://example.com/altcha/challenge",
        "proxyType": "http",
        "proxyAddress": "123.45.67.89",
        "proxyPort": "8080",
        "proxyLogin": "user",
        "proxyPassword": "pass"
    }
}).json()

task_id = task["taskId"]
print(f"Task created: {task_id}")

# Step 2: Poll for result
while True:
    result = requests.post(f"{API}/getTaskResult", json={
        "clientKey": KEY,
        "taskId": task_id
    }).json()

    if result["status"] == "ready":
        print("Solved!", result["solution"])
        break
    elif result["status"] == "failed":
        print("Failed:", result.get("errorDescription"))
        break

    time.sleep(1)

Additional proxy parameters

proxyTypetypestringreqyesProxy protocol: http, https, socks4, or socks5
proxyAddresstypestringreqyesProxy IP address or hostname
proxyPorttypenumberreqyesProxy port number
proxyLogintypestringreqnoProxy username (if auth required)
proxyPasswordtypestringreqnoProxy password (if auth required)
userAgenttypestringreqnoUser-Agent string to use. Must match the UA you use when submitting the token

Task Parameters

API Spec
typetypestringreqyesAltchaTaskProxyLess or AltchaTask
challengetypeobjectreqnoThe ALTCHA challenge object {algorithm, challenge, salt, maxnumber, signature}, or the raw challenge JSON string. Required unless you pass challengeURL.
challengeURLtypestringreqnoURL that returns the challenge JSON. We fetch it and solve. Use this OR challenge.
websiteURLtypestringreqnoThe page the ALTCHA widget is on (optional, for your own records)

Response Shape

tokentypestringBase64-encoded solution payload — set it as the altcha-payload / altcha form field value (matches the official widget output), then submit
payloadtypeobjectThe decoded solution {algorithm, challenge, number, salt, signature, took} for inspection

Example response

{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "eyJhbGdvcml0aG0iOiJTSEEtMjU2IiwiY2hhbGxlbmdlIjoiMDAwMDAwZjJhNDU2Nzg5MCIsIm51bWJlciI6NjU0MzIxLCJzYWx0IjoidGVzdF9zYWx0Iiwic2lnbmF0dXJlIjoiIiwidG9vayI6MjV9",
    "payload": {
      "algorithm": "SHA-256",
      "challenge": "000000f2a4567890",
      "number": 654321,
      "salt": "test_salt",
      "signature": "",
      "took": 25
    }
  }
}

Error response

{
  "errorId": 1,
  "errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
  "errorDescription": "Solver gave up."
}

Features

Solves SHA-256/384/512 proof-of-work in milliseconds
Multi-core parallel search — trivial to tough challenges alike
Output matches the official ALTCHA widget payload exactly
No proxy, no browser — pure compute

Pricing & Stats

Per 1,000 solves$2.00
Avg solve time~5.0s
Success rate99%+
Throughput12/m

Start solving altcha.

$0.10 in free credits — no card. ~250 free solves to test before you spend.

Frequently asked questions