Skip to content
../products
● fastest in class

ALTCHA Solver, solved in 0.1s.

Solve ALTCHA proof-of-work challenges via API. Open-source, privacy-friendly, no browser required.

per 1,000$1.00
avg solve~0.1s
success99%+
throughput1.2k/m
type: AltchaTaskProxyLess…0.00s
POST/createTask type=AltchaTaskProxyLess
taskId tsk_4naefy9b
POLL/getTaskResult status=processing
status ready
token 0xde28aadc5df15...
type: AltchaTaskProxyLess● running on production solvers

What is ALTCHA?

ALTCHA is an open-source, privacy-friendly CAPTCHA built around a proof-of-work (PoW) challenge. The visitor's browser is given a hash target — find an integer N such that `hash(salt + N) == target` — and the answer is submitted alongside the form. No tracking, no cookies, no third-party JavaScript loaded from foreign domains, no user interaction. The PoW typically iterates 0..maxnumber (default 1,000,000) until a match is found. Servers verify the submission by re-computing the hash and checking the optional HMAC signature. ALTCHA supports SHA-1, SHA-256, SHA-384, and SHA-512 hash algorithms.

How It Works

1

Send Task

POST your AltchaTaskProxyLess with the target URL and sitekey to our API. We'll queue it instantly.

2

We Solve

Capzy runs ALTCHA in a native Go solver that brute-forces the hash range across every CPU core in parallel. Pass us either the full challenge JSON (algorithm, challenge, salt, maxnumber, signature) or a challengeURL to fetch from, and we return a ready-to-submit base64-encoded payload in under 100 ms. The token is purely cryptographic — submit it from any IP, any time.

3

Get Token

Poll getTaskResult — when status is 'ready', the solution contains the token to inject into the target page.

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",
        "type": "AltchaTaskProxyLess",
        "websiteURL": "https://example.com/contact"
    }
}).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)

# 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)

Using Your Own Proxy

Use AltchaTask instead of AltchaTaskProxyLess to route the solve through your own proxy. This is useful when the target site checks the IP that solved the captcha matches the IP submitting the form.

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",
        "type": "AltchaTask",
        "proxyPort": "8080",
        "proxyType": "http",
        "proxyLogin": "user",
        "websiteURL": "https://example.com/contact",
        "proxyAddress": "123.45.67.89",
        "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)

# 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)

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)

task parameters.

typetypestringreqyesAltchaTaskProxyLess (recommended) or AltchaTask
websiteURLtypestringreqyesFull URL of the page hosting the ALTCHA widget
challengetypeobjectreqnoPre-fetched challenge JSON {algorithm, challenge, salt, maxnumber, signature}. Pass this OR challengeURL.
challengeURLtypestringreqnoURL from which we fetch the challenge JSON. Useful when the site exposes a known challenge endpoint.

solution response.

tokentypestringBase64-encoded JSON payload — drop this into the hidden `altcha` form field or POST it as the widget's submitted value
payloadtypeobjectThe decoded payload object for inspection: {algorithm, challenge, number, salt, signature, took (ms)}

Example response

Full getTaskResult response shape. The fields in the table above describe what's inside solution — the outer envelope (errorId, status) is identical for every captcha type.

{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "eyJhbGdvcml0aG0iOiJTSEEtMjU2IiwiY2hhbGxlbmdlIjoiYWJjZDEyMzQ1Njc4OTBhYmNkMTIzNDU2Nzg5MGFiY2QxMjM0NTY3ODkwYWJjZDEyMzQ1Njc4OTAiLCJudW1iZXIiOjQyLCJzYWx0IjoiZGVtb19zYWx0X3ZhbHVlIiwic2lnbmF0dXJlIjoiaG1hY19zaWduYXR1cmVfb3JfZW1wdHkiLCJ0b29rIjo0Mn0=",
    "payload": {
      "salt": "demo_salt_value",
      "took": 42,
      "number": 42,
      "algorithm": "SHA-256",
      "challenge": "abcd1234567890abcd1234567890abcd1234567890abcd1234567890abcd1234",
      "signature": "hmac_signature_or_empty"
    }
  }
}

Error response

Failures use the same envelope with errorId: 1 plus errorCode + errorDescription. See the error-code reference for the full list.

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

Pending response

While the solver is still working, getTaskResult returns status: "processing". Poll every 1–2 seconds until ready or failed.

{
  "errorId": 0,
  "status": "processing"
}

Features

Sub-100 ms median solve time — parallel CPU brute-force across all cores
Supports SHA-1, SHA-256, SHA-384, and SHA-512 hash algorithms
Accepts pre-fetched challenge JSON OR a challengeURL we fetch ourselves
Tokens are not IP-bound — submit from any IP, any time
$0.001 per solve flat — cheapest captcha on our pricing list

ProxyLess Task Type

AltchaTaskProxyLess

With Proxy

AltchaTask

Frequently Asked Questions

start solving altcha.

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