Altcha

Solve Altcha — open-source self-hostable PoW captcha

Price: $0.10 / 1k solves · Speed: ~0.2s

Altcha is an open-source proof-of-work captcha. It supports four solve modes depending on what information you have available.

Pass the page URL and the solver will fetch the challenge automatically.

{
  "type": "AltchaProxyless",
  "site_url": "https://example.com/contact"
}

The solver scrapes the page, finds the <altcha-widget> element, and fetches the challenge from its challengeurl attribute.

Mode 2 — Direct challenge URL

If you know the challenge endpoint URL directly:

{
  "type": "AltchaProxyless",
  "challenge_url": "https://example.com/api/altcha/challenge"
}

Mode 3 — Inline challenge object

If you already fetched the challenge JSON yourself:

{
  "type": "AltchaProxyless",
  "challenge": {
    "algorithm": "SHA-256",
    "challenge": "abc123...",
    "salt": "randomsalt",
    "signature": "sig...",
    "maxnumber": 1000000
  }
}

Mode 4 — Metadata object

{
  "type": "AltchaProxyless",
  "metadata": {
    "algorithm": "SHA-256",
    "challenge": "abc123...",
    "salt": "randomsalt",
    "signature": "sig..."
  }
}

Response

{
  "success": true,
  "token": "eyJhbGdvcml0aG0iOiJTSEEtMjU2...",
  "took_ms": 180,
  "cost": 0.0001
}

The token is a base64-encoded JSON payload. Submit it as the altcha form field value.

Finding the challenge URL

Look in the page HTML for the widget:

<altcha-widget challengeurl="https://example.com/api/altcha/challenge"></altcha-widget>

The challengeurl attribute is the endpoint to use with Mode 2.

cURL example

curl -s -X POST https://api.solver.lol/solve \
  -H "X-API-Key: sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "AltchaProxyless",
    "site_url": "https://example.com/contact"
  }'

Parameters

FieldRequiredDescription
typeAltchaProxyless
site_urlMode 1Page URL — solver auto-fetches challenge
challenge_urlMode 2Direct challenge endpoint URL
challengeMode 3Inline challenge JSON object
metadataMode 4Inline metadata JSON object
proxyhttp://user:pass@host:port