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 500 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"
    }
  }'
PopularCaptchaSpecial routes to a dedicated solver and only accepts site + sitekey pairs that are explicitly whitelisted. Hostname comparison is case-insensitive and ignores scheme, path, port, and trailing dots — subdomains must be listed separately. Sitekeys are case-sensitive. Non-whitelisted pairs are rejected before any balance is deducted. Contact us to add a target.
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 no longer processing. A failed solve returns HTTP 500 with one of the three documented solver errors 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" while running, "success" once complete.

solutionSTRINGSUCCESS

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

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
PopularCaptchaEnterpriseTokenProxyless
$4.00
PopularCaptchaSpecial
$8.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.
402Invalid API key
The API key does not exist.
402Insufficient 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"
Solve still running.
200status:"success" + solution
Solve completed successfully.
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.
500Solver returned invalid JSON: malformed or unparseable response
Solver returned unparseable JSON. Refunded.
500Service temporarily unavailable
Solver connection, timeout, HTTP, shutdown, or unexpected request failure. Refunded.
500Solver failed to generate solution
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