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.
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
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
# 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.
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 socks5proxyAddresstypestringreqyesProxy IP address or hostnameproxyPorttypenumberreqyesProxy port numberproxyLogintypestringreqnoProxy username (if auth required)proxyPasswordtypestringreqnoProxy password (if auth required)userAgenttypestringreqnoUser-Agent string to use. Must match the UA you use when submitting the tokenTask Parameters
API SpectypetypestringreqyesAltchaTaskProxyLess or AltchaTaskchallengetypeobjectreqnoThe 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 submitpayloadtypeobjectThe decoded solution {algorithm, challenge, number, salt, signature, took} for inspectionExample 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
Pricing & Stats
Start solving altcha.
$0.10 in free credits — no card. ~250 free solves to test before you spend.