CapNovaX — hCaptcha Solver API

Base URL: http://api.capnovax.com:5000/ · auth: apikey

Overview

This API accepts hCaptcha solve requests and returns a captcha token you can use when completing site flows (Discord register/login, etc.). Each successful solve consumes 1 credit associated with your API key.

Authentication

Two valid ways to provide your API key:

  • JSON body: include "apikey":"YOUR_KEY"
  • HTTP header: Authorization: YOUR_KEY
Your client must include the key. The server will reject missing or invalid keys with 401. If credits are exhausted you'll receive 402.

POST /solve

POST /solve — returns captcha token

Request JSON

{
  "site_key": "SITEKEY_HERE",
  "site_url": "https://example.com",
  "rqd": "OPTIONAL_RQDATA",
  "proxy": "user:pass@ip:port",
  "apikey": "YOUR_API_KEY"
}

Responses

201 — Success
{
  "code": 201,
  "captcha": "HCAPTCHA_RESPONSE_TOKEN"
}
401 — Missing/Invalid API key
{
  "code": 401,
  "captcha": "Failed to solve captcha: Invalid API key"
}
402 — Out of credits
{
  "code": 402,
  "captcha": "Api out of fuel"
}
400 — General error
{
  "code": 400,
  "captcha": "Failed to solve captcha: <reason>"
}

Usage notes

  • rqd should be provided when the site (Discord) returns captcha_rqdata — your example client already handles that flow.
  • proxy is optional; the solver can work without a proxy but you may supply one per request.

How to handle Discord rqdata flow (example)

If a registration attempt returns an error with captcha_rqdata, pass that value into the solver's rqd field and retry the register call with the returned token and rqtoken headers — this flow is implemented in your example script.

# pseudo python flow
error = resp.json()
rqd = error.get('captcha_rqdata')
token = solve_cap(rqdata=rqd, api_key=API_KEY)
payload['captcha_key'] = token
if error.get('captcha_rqtoken'):
  payload['captcha_rqtoken'] = error['captcha_rqtoken']
  headers['x-captcha-rqtoken'] = error['captcha_rqtoken']
# retry register

Examples

Python (requests)

import requests

payload = {
  "site_key": "a9b5fb07-92ff-493f-86fe-352a2803b3df",
  "site_url": "discord.com",
  "apikey": "YOUR_API_KEY"
}
# if you have rqdata: payload['rqd'] = rqdata

r = requests.post('http://api.capnovax.com:5000/solve', json=payload, timeout=60)
print(r.status_code, r.json())

cURL

curl -X POST "http://api.capnovax.com:5000/solve" \
  -H "Content-Type: application/json" \
  -d '{"site_key":"a9b5fb07-92ff-493f-86fe-352a2803b3df","site_url":"discord.com","apikey":"YOUR_API_KEY"}'

Node.js (axios)

const axios = require('axios');

const body = {
  site_key: 'a9b5fb07-92ff-493f-86fe-352a2803b3df',
  site_url: 'discord.com',
  apikey: process.env.API_KEY
};

axios.post('http://api.capnovax.com:5000/solve', body)
  .then(r => console.log(r.data))
  .catch(e => console.error(e.response?.data || e.message));

Postman Collection

Import the JSON below into Postman. It contains two requests: /solve and /health. Replace the {{api_key}} variable with your key.

{
  "info": { "name": "CapNovaX API", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" },
  "item": [
    {
      "name": "Solve Captcha",
      "request": {
        "method": "POST",
        "header": [{"key":"Content-Type","value":"application/json"}],
        "body": {"mode":"raw","raw":"{\n  \"site_key\": \"a9b5fb07-92ff-493f-86fe-352a2803b3df\",\n  \"site_url\": \"discord.com",\n  \"apikey\": \"{{api_key}}\"\n}"},
        "url": {"raw":"http://api.capnovax.com:5000/solve","host":["api","capnovax","com"],"path":["solve"]}
      }
    },
    { "name": "Health Check", "request": { "method": "GET", "url": { "raw": "https://api.capnovax.com/health", "host": ["api","capnovax","com"], "path": ["health"] } } }
  ],
  "variable": [{"key":"api_key","value":"YOUR_API_KEY"}]
}

Reference — Error codes

  • 201 — Success, returned token in captcha.
  • 400 — Bad request / solver error.
  • 401 — Missing or invalid API key.
  • 402 — Out of credits (Api out of fuel).