API Documentation

Discorium Solve

HTTP API for solving hCaptcha challenges on any site. Submit the captcha fields from the target service, receive a verified token and the headers to retry your request.

Authentication

Every API request (except / and /v1/health) requires an API key sent as an HTTP header:

X-API-Key: your-api-key-uuid

Requests without a valid X-API-Key header return 401 Unauthorized.

Solve Endpoint

POST https://solver.discorium.cc/v1/solve

Accepts hCaptcha challenge data for any target host and returns a solved token.

Required Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
X-API-KeyYesYour API key (UUID)

Request Body

Send a JSON object with the captcha fields from the target service's challenge response. Only the fields below are required — you do not need to send captcha_key or captcha_service.

FieldRequiredDescription
captcha_sitekeyYesDynamic hCaptcha site key from the challenge response
captcha_hostYesTarget site hostname (e.g. discord.com, example.com) — without https://
captcha_rqdataYesEnterprise rqdata — must be passed to the challenge or it will fail
captcha_rqtokenRecommendedChallenge request token — echo back to the target API via X-Captcha-Rqtoken
captcha_session_idRecommendedSession ID — echo back via X-Captcha-Session-Id
{
  "captcha_sitekey": "a9b5fb07-92ff-493f-86fe-352a2803b3df",
  "captcha_host": "discord.com",
  "captcha_rqdata": "NpQAwki50ByiW9bA16ORoLwoqJAK+lli++HGo9JpzGQqlHh5YRJCVgQmZET91Azw8Ew3NvMPFKO5otO13QFlh+p9hQ73jGXELsyzpVrSy7XenLKZjP0ZhXaGpESvM5SiHghRNdqfK4DwFw==eCjJIAfUkwLnY7m/",
  "captcha_rqtoken": "Ikk0VU5GVFhMa2p0SFNNSUZiZEF5YWgvdGZ2Wm45MjFiczFzbnM4cjU3Z3A5dkVKYTdIeFVFRlYyYWpUekRIejZCZ3pxTWc9PVZhTnVXL01LWEQ5UlpYWUEi.alFkGQ.erb42PkoZ_BnN_h32eVSB150WGM",
  "captcha_session_id": "d857885d-f307-4c13-9b94-0178beed48a6"
}

Responses

Success — 200 OK

{
  "status": "success",
  "request_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "captcha_token": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "captcha_host": "discord.com",
  "elapsed_ms": 4821,
  "levels_solved": 3,
  "discord_headers": {
    "X-Captcha-Key": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "X-Captcha-Session-Id": "d857885d-f307-4c13-9b94-0178beed48a6",
    "X-Captcha-Rqtoken": "Ikk0VU5GVFhMa2p0SFNNSUZiZEF5YWgvdGZ2..."
  }
}

Error — JSON body

{
  "status": "error",
  "error": "solve_failed",
  "message": "Human-readable description",
  "request_id": "...",
  "elapsed_ms": 12000
}

Error codes

errorMeaning
missing_api_keyNo X-API-Key header provided
invalid_api_keyAPI key not recognized
missing_fieldsRequired JSON fields absent
invalid_jsonBody is not valid JSON
solve_failedCaptcha could not be solved
timeoutSolve exceeded time limit
queue_fullServer at capacity — retry later
internal_errorUnexpected server error

HTTP Status Codes

200
Captcha solved successfully
400
Invalid or incomplete request body
401
Missing or invalid API key
422
Solve attempted but failed
503
Queue full — too many concurrent requests
504
Solve timed out

Examples

cURL

curl -X POST "https://solver.discorium.cc/v1/solve" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "captcha_sitekey": "a9b5fb07-92ff-493f-86fe-352a2803b3df",
    "captcha_host": "discord.com",
    "captcha_rqdata": "NpQAwki50ByiW9bA16ORoLwoqJAK+lli++HGo9JpzGQqlHh5YRJCVgQmZET91Azw8Ew3NvMPFKO5otO13QFlh+p9hQ73jGXELsyzpVrSy7XenLKZjP0ZhXaGpESvM5SiHghRNdqfK4DwFw==eCjJIAfUkwLnY7m/",
    "captcha_rqtoken": "Ikk0VU5GVFhMa2p0SFNNSUZiZEF5YWgvdGZ2Wm45MjFiczFzbnM4cjU3Z3A5dkVKYTdIeFVFRlYyYWpUekRIejZCZ3pxTWc9PVZhTnVXL01LWEQ5UlpYWUEi.alFkGQ.erb42PkoZ_BnN_h32eVSB150WGM",
    "captcha_session_id": "d857885d-f307-4c13-9b94-0178beed48a6"
  }'

Python (requests)

import requests

resp = requests.post(
    "https://solver.discorium.cc/v1/solve",
    headers={
        "Content-Type": "application/json",
        "X-API-Key": "YOUR_API_KEY",
    },
    json={
        "captcha_sitekey": captcha["captcha_sitekey"],
        "captcha_host": "discord.com",
        "captcha_rqdata": captcha["captcha_rqdata"],
        "captcha_rqtoken": captcha.get("captcha_rqtoken"),
        "captcha_session_id": captcha.get("captcha_session_id"),
    },
    timeout=130,
)
data = resp.json()

if data["status"] == "success":
    headers = data["discord_headers"]
    # Retry your original Discord request with these headers
    retry = requests.post(original_url, json=original_body, headers={**your_headers, **headers})

JavaScript (fetch)

const res = await fetch("https://solver.discorium.cc/v1/solve", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": "YOUR_API_KEY",
  },
  body: JSON.stringify({
    captcha_sitekey: captcha.captcha_sitekey,
    captcha_host: "discord.com",
    captcha_rqdata: captcha.captcha_rqdata,
    captcha_rqtoken: captcha.captcha_rqtoken,
    captcha_session_id: captcha.captcha_session_id,
  }),
});
const data = await res.json();

Using the Token with Discord

When Discord returns a captcha challenge, retry your original request and attach the headers from discord_headers:

HeaderValue
X-Captcha-KeyThe solved captcha_token
X-Captcha-Session-IdSame captcha_session_id from the challenge (if present)
X-Captcha-RqtokenSame captcha_rqtoken from the challenge (if present)

Captcha data is single-use. Always use fresh values from the latest Discord 400 response. Tokens expire quickly — solve and retry immediately.

Other Endpoints

GET https://solver.discorium.cc/v1/health

Public health check. No authentication required.

GET https://solver.discorium.cc/v1/stats

Service statistics. Requires X-API-Key.