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 tokenRequest 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).