01 / OVERVIEW

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.

BASE URL
https://api.ragecaptcha.com
CONTENT-TYPE
application/json
AUTH
clientkey in body / query
Every response includes an 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.
02 / AUTHENTICATION

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.

Never expose your clientkey in a browser or mobile bundle. Anyone who reads it can spend your balance. Rotate it from the dashboard the moment it's leaked.
03 / ENDPOINT

POST /create-task

POSThttps://api.ragecaptcha.com/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

clientkeySTRINGREQUIRED

Your secret developer API access key.

data.taskSTRINGREQUIRED

Blueprint identifier (e.g. PopularCaptchaTokenProxyless). Must exist in the pricing table.

data.sitekeySTRINGREQUIRED

Target site key. Alias: site_key.

data.siteurlSTRINGREQUIRED

Full origin URL where the challenge triggers. Aliases: href, site, site_url.

data.proxySTRINGCONDITIONAL

http://user:pass@ip:port. Required for all non-Proxyless blueprints.

data.rqdataSTRINGOPTIONAL

Extra request metadata used by high-security targets.

Response (HTTP 202)

task_idSTRING

Unique task identifier — use it with /check-task.

statusSTRING

Always "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"
    }
  }'
Enterprise custom pricing: Entries in 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.

Custom-priced sites

12 configured targets · Proxied Enterprise task only

PRICE / 1K
$10.00
Discord
3 SITES
https://discord.com/register$10 / 1K
KEYa9b5fb07-92ff-493f-86fe-352a2803b3df
https://discord.com/quest-home$10 / 1K
KEY4bb5aadb-b50f-4f23-b1c2-92b59ba400d5
https://discord.com/channels/@me$10 / 1K
KEY472b4c9f-f2b7-4382-8135-c983f5496eb9
Steam
3 SITES
https://store.steampowered.com/join$10 / 1K
KEYe18a349a-46c2-46a0-87a8-74be79345c92
https://help.steampowered.com/en/wizard/HelpWithLoginInfo$10 / 1K
KEY464c5638-2416-4818-8fa8-91e669b4d6a8
https://help.steampowered.com/en/wizard/HelpRequestCantLogin$10 / 1K
KEY20e8e2a6-6908-4840-9814-912e9ea4683c
Epic Games
3 SITES
https://www.epicgames.com/id/login$10 / 1K
KEY91e4137f-95af-4bc9-97af-cdcedce21c8c
https://www.epicgames.com/id/register$10 / 1K
KEYb364b1fd-e3d8-4d24-8c41-77a19604b00d
https://www.epicgames.com/id/login/forgot-password$10 / 1K
KEY264d6f74-6d54-4621-ab76-619f2566081c
Riot Games
3 SITES
https://authenticate.riotgames.com/$10 / 1K
KEY019f1553-3845-481c-a6f5-5a60ccf6d830
https://recovery.riotgames.com/en/forgot-password$10 / 1K
KEYdb18a187-7b77-4dac-a6cb-6dd5215973cf
https://account.riotgames.com/$10 / 1K
KEYb3c619fc-4b72-4838-9bf2-398888588d62

Each configured entry costs $0.010 per solve. The displayed $10.00 price is calculated as $0.010 × 1,000 solves.

Custom-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"
  }
}
04 / ENDPOINT

POST /check-task

POSThttps://api.ragecaptcha.com/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

clientkeySTRINGREQUIRED

Your secret developer API access key.

task_idSTRINGREQUIRED

The task ID returned by /create-task. Alias: taskId. Max 128 chars.

Response (HTTP 200)

task_idSTRING

Echoes the requested task ID.

statusSTRING

"processing", "success", or "failed".

solutionSTRINGSUCCESS

The signed captcha token. Present only when status is "success".

errorSTRINGFAILED

Terminal failure reason. Present only when status is "failed".

costNUMBER

Task 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"
  }'
05 / ENDPOINT

GET /balance

GEThttps://api.ragecaptcha.com/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

clientkeySTRINGREQUIRED

Your secret developer API access key.

Response body

balanceNUMBER

Remaining balance.

currencySTRING

Balance currency — always "USD".

curl -G https://api.ragecaptcha.com/balance \
  --data-urlencode "clientkey=your-api-key"
06 / TASKS

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 + Enterprise
BLUEPRINT
PER 1K
PopularCaptchaTokenProxyLess
$1.00
PopularCaptchaToken
$1.00
PopularCaptchaInvisibleToken
$1.00
PopularCaptchaInvisibleTokenProxyLess
$1.00
PopularCaptchaEnterpriseToken
$4.00–$10.00
PopularCaptchaEnterpriseTokenProxyless
$4.00
NEXT UP

More captcha families will land under their own namespace — same endpoints, same client key.

07 / ERRORS

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

STATUS
MESSAGE
MEANING
202task_id + status:"processing"
Task persisted; solver started immediately.
400Missing API key or data
JSON is malformed, not an object, or missing clientkey / data.
400Invalid task: <task_name>
data.task is not present in the pricing table.
400Missing sitekey
Neither data.sitekey nor data.site_key was supplied.
400Missing siteurl or href
None of href, siteurl, site, or site_url was supplied.
400This site requires a proxied Enterprise task
A custom-pricing pair was submitted as PopularCaptchaEnterpriseTokenProxyless. No balance is deducted.
400This site requires a proxy
A custom-pricing pair used PopularCaptchaEnterpriseToken without data.proxy. No balance is deducted.
402Invalid API key
The API key does not exist.
402Not enough balance
Account cannot cover the task price. Check /balance.
402Internal server error
Account lookup or atomic balance deduction failed. Task not started.
402Internal server error
Initial task record could not be persisted. Any deduction is refunded.
500Internal server error
Unexpected API exception. Logged with the request ID.

POST /check-task (and GET form)

STATUS
MESSAGE
MEANING
200status:"processing" + cost
Solve still running. cost is the task price in USD.
200status:"success" + solution + cost
Solve completed successfully.
200status:"failed" + error + cost
Terminal solver failure. Automatically refunded — stop polling.
400Missing API key
clientkey was not supplied.
400Missing task ID
Neither task_id nor taskId was supplied.
400Invalid task ID
Task ID is not a string or is longer than 128 characters.
404Task not found
No task belongs to that API-key/task-ID pair.
503Internal server error
Task state could not be read from the database. Retry.
500Internal server error
Unexpected API exception.
200Solver returned invalid JSON: malformed or unparseable response
status:"failed" — solver returned unparseable JSON. Refunded.
200Service temporarily unavailable
status:"failed" — solver connection, timeout, HTTP, shutdown, or unexpected request failure. Refunded.
200Solver failed to generate solution
status:"failed" — solver returned no usable token or its own failure value. Refunded.

GET /balance and /getBalance

STATUS
MESSAGE
MEANING
200balance + currency
Balance lookup succeeded.
400Missing API key
clientkey was not supplied.
401Invalid API key
The API key does not exist.
503Internal server error
Account database could not be read.
500Internal server error
Unexpected API exception.

Other routes

STATUS
MESSAGE
MEANING
200{"status":"ok"}
GET /health succeeded.
302Redirect to /health
GET / succeeded.
404{"detail":"Not Found"}
Route does not exist. All old /api/* routes return this.
405{"detail":"Method Not Allowed"}
Route exists, but the HTTP method is not supported.

READY TO SHIP

Grab a key and start solving.

Create an account