RageCaptcha Developer API
RageCaptcha exposes a short request/poll JSON REST API for programmatic captcha solving. You submit a task with POST /create-task (returns HTTP 202 with a task_id), then poll POST /check-task every 1–2 seconds until the solve completes. This keeps every HTTP hop short — a slow solve never holds a Cloudflare request open. We currently support the PopularCaptcha family only — Standard and Enterprise variants, proxied or proxyless. Failed solves return HTTP 200 with status: "failed" and are automatically refunded. Balance top-ups are non-refundable and we do not issue free trial credits.
X-Request-ID header. Task endpoint responses also send Cache-Control: no-store, no-cache, must-revalidate. There is no application-level rate limit or Retry-After — every accepted task starts its solver request immediately.Authenticate with your client key
Every request is authenticated with a clientkey — a unique secret developer token issued from your dashboard. Treat it like a password, keep it server-side, and rotate immediately if leaked.
POST /create-task
Submit a captcha task. The API validates, atomically charges your balance, persists the task, and immediately returns HTTP 202 with a task_id. The solver request starts in the background — poll /check-task for the result.
Request body
clientkeySTRINGREQUIREDYour secret developer API access key.
data.taskSTRINGREQUIREDBlueprint identifier (e.g. PopularCaptchaTokenProxyless). Must exist in the pricing table.
data.sitekeySTRINGREQUIREDTarget site key. Alias: site_key.
data.siteurlSTRINGREQUIREDFull origin URL where the challenge triggers. Aliases: href, site, site_url.
data.proxySTRINGCONDITIONALhttp://user:pass@ip:port. Required for all non-Proxyless blueprints.
data.rqdataSTRINGOPTIONALExtra request metadata used by high-security targets.
Response (HTTP 202)
task_idSTRINGUnique task identifier — use it with /check-task.
statusSTRINGAlways "processing" on creation.
curl -X POST https://api.ragecaptcha.com/create-task \
-H "Content-Type: application/json" \
-d '{
"clientkey": "your-api-key",
"data": {
"task": "PopularCaptchaTokenProxyless",
"sitekey": "captcha-site-key",
"siteurl": "https://example.com"
}
}'SpecialPricing can override the price for an exact site URL + sitekey pair, but only for the proxied PopularCaptchaEnterpriseToken task. A matching pair submitted as PopularCaptchaEnterpriseTokenProxyless is rejected, and the proxied task must include data.proxy. Other task types continue to use their default prices.https://discord.com/register$10 / 1Khttps://discord.com/quest-home$10 / 1Khttps://discord.com/channels/@me$10 / 1Khttps://store.steampowered.com/join$10 / 1Khttps://help.steampowered.com/en/wizard/HelpWithLoginInfo$10 / 1Khttps://help.steampowered.com/en/wizard/HelpRequestCantLogin$10 / 1Khttps://www.epicgames.com/id/login$10 / 1Khttps://www.epicgames.com/id/register$10 / 1Khttps://www.epicgames.com/id/login/forgot-password$10 / 1Khttps://authenticate.riotgames.com/$10 / 1Khttps://recovery.riotgames.com/en/forgot-password$10 / 1Khttps://account.riotgames.com/$10 / 1KCustom-price matching
URL matching is hostname- and port-aware and path-sensitive. Hostnames are case-insensitive; schemes, query strings, fragments, and trailing slashes are ignored. Sitekeys and URL paths remain case-sensitive. Missing, malformed, or invalid pricing entries are ignored, leaving the default task price in effect. The pricing file is read for every request, so changes do not require an API restart.
{
"clientkey": "your-api-key",
"data": {
"task": "PopularCaptchaEnterpriseToken",
"sitekey": "a9b5fb07-92ff-493f-86fe-352a2803b3df",
"siteurl": "https://discord.com/register",
"proxy": "host:port:user:password"
}
}POST /check-task
Poll for the result of a task. Prefer POST — it keeps the API key out of URLs and access logs. Poll every 1–2 seconds until status is success or failed. A failed solve returns HTTP 200 with a terminal failure status and is automatically refunded. The GET form /check-task?clientkey=...&task_id=... is also accepted.
Request body
clientkeySTRINGREQUIREDYour secret developer API access key.
task_idSTRINGREQUIREDThe task ID returned by /create-task. Alias: taskId. Max 128 chars.
Response (HTTP 200)
task_idSTRINGEchoes the requested task ID.
statusSTRING"processing", "success", or "failed".
solutionSTRINGSUCCESSThe signed captcha token. Present only when status is "success".
errorSTRINGFAILEDTerminal failure reason. Present only when status is "failed".
costNUMBERTask price in USD. Legacy rows return 0.0.
curl -X POST https://api.ragecaptcha.com/check-task \
-H "Content-Type: application/json" \
-d '{
"clientkey": "your-api-key",
"task_id": "5d54269e-8cdf-40fb-a94c-912adca99ac8"
}'GET /balance
Fetch real-time balance for your account. The alias GET /getBalance returns the same response. Poll before dispatching large batches or wire into your billing alerts.
Query parameters
clientkeySTRINGREQUIREDYour secret developer API access key.
Response body
balanceNUMBERRemaining balance.
currencySTRINGBalance currency — always "USD".
curl -G https://api.ragecaptcha.com/balance \
--data-urlencode "clientkey=your-api-key"Task blueprints & pricing
Blueprints are namespaced by captcha family. Today only PopularCaptcha is live — Standard tier handles the everyday token; Enterprise tier targets Enterprise-tier sitekeys. Future families will slot in under their own namespace.
PopularCaptcha
LIVEPopularCaptcha tokens · Standard + EnterpriseMore captcha families will land under their own namespace — same endpoints, same client key.
Complete response & error reference
Application-level errors use { "error": "..." }. Framework-level 404 / 405 responses use { "detail": "..." }. Every response includes an X-Request-ID header. Failed solves are refunded automatically.
POST /create-task
task_id + status:"processing"Missing API key or dataInvalid task: <task_name>Missing sitekeyMissing siteurl or hrefThis site requires a proxied Enterprise taskThis site requires a proxyInvalid API keyNot enough balanceInternal server errorInternal server errorInternal server errorPOST /check-task (and GET form)
status:"processing" + coststatus:"success" + solution + coststatus:"failed" + error + costMissing API keyMissing task IDInvalid task IDTask not foundInternal server errorInternal server errorSolver returned invalid JSON: malformed or unparseable responseService temporarily unavailableSolver failed to generate solutionGET /balance and /getBalance
balance + currencyMissing API keyInvalid API keyInternal server errorInternal server errorOther routes
{"status":"ok"}Redirect to /health{"detail":"Not Found"}{"detail":"Method Not Allowed"}