cracker-logoCracker

Account & Status

Endpoints that aren't tied to a specific captcha — task polling, balance, health, error catalog.

Task Status

Poll the status of a task. Same endpoint for every captcha type — call until status is completed or rejected.

GEThttps://captcha.solvium.io/v2/tasks/{task_id}

Headers

NameTypeRequiredDefaultExample
x-solvium-authHeaderYesIE0B81Vn...

Path parameters

NameTypeRequiredDefaultExample
task_idURLYes01959e02-08fd-7000-8cbe-f682a959b3c1

Status values

  • pending — queued, no worker yet.
  • running — worker is solving.
  • completedsolution is populated.
  • rejected — terminal failure, error is populated. See Error Codes.

Response

200 OK — same envelope regardless of state. Inapplicable fields come back as null.

Example

Python
from solvium import Solvium
 
task = Solvium(api_key="YOUR_API_KEY").get_task_sync(
    "01959e02-08fd-7000-8cbe-f682a959b3c1"
)
print(task["status"], task["solution"])

Balance

Account balance in USD.

GEThttps://captcha.solvium.io/v2/balance

Headers

NameTypeRequiredDefaultExample
x-solvium-authHeaderYesIE0B81Vn...

Response

Example

Python
from solvium import Solvium
 
print(Solvium(api_key="YOUR_API_KEY").balance_sync())

Health

Liveness probe — no auth required. Returns the server timestamp confirming the API is reachable. Per-captcha-type health is published through Prometheus, not here.

GEThttps://captcha.solvium.io/v2/health

Response

Example

Python
from solvium import Solvium
 
print(Solvium(api_key="YOUR_API_KEY").health_sync())

Error Codes

Every v2 error response uses the same envelope. The code field is the stable machine-readable identifier — match against it, not against the prose in message.

Envelope

JSON
{
  "error": {
    "code": "validation_failed",
    "message": "2 field(s) failed validation",
    "retryable": false,
    "doc_url": "https://docs.solvium.io/errors/validation-failed",
    "request_id": "018f3c1a-7b81-7e0f-8a10-8a7ff43b2d8f",
    "details": [
      { "field": "url", "code": "string_pattern_mismatch", "message": "String should match pattern '^https?:\\/\\/…'" },
      { "field": "site_key", "code": "missing", "message": "Field required" }
    ]
  }
}
  • code — one of the values in the table below. Stable contract — we only add new codes, never rename.
  • message — human-readable summary. Safe to log, do not parse.
  • retryable — if true, the same request may succeed on retry.
  • doc_url — permalink derived from code.
  • request_id — include in support tickets.
  • details — only on validation_failed. Per-field array.

API errors

CodeHTTPRetryableWhat it means
missing_api_key401noX-Solvium-Auth header missing.
invalid_api_key401noHeader present but unknown.
insufficient_scope401noReserved for per-scope keys.
validation_failed422noRequest fields failed schema validation. See details.
invalid_request400noGeneric client-side request error.
not_found404notask_id unknown or belongs to another account.
offer_not_found400noNo pricing offer for this task type.
insufficient_balance402noTop up and retry.
rate_limit_exceeded429yesBack off and retry.
internal_error500yesRetry once; if persistent, include request_id.
service_unavailable503yesRetry with backoff.

Task-rejection errors

When a task finishes but can't produce a solution, GET /v2/tasks/{id} returns HTTP 200 with status: "rejected" and the error object populated:

JSON
{
  "task_id": "01959e02-…",
  "status": "rejected",
  "type": "cf-clearance",
  "error": {
    "code": "proxy_blocked",
    "message": "Proxy blocked",
    "retryable": true,
    "doc_url": "https://docs.solvium.io/errors/captcha-failed"
  },
  "cost": "0.0009"
}

Common values for error.code:

CategoryCodeHow to fix
Inputinvalid_paramsRe-check required fields.
Inputmissing_paramMake sure url and challenge_body_b64 were sent.
Inputinvalid_base64Re-encode with standard base64 (no URL-safe alphabet).
Inputno_proxyPass a proxy — reCAPTCHA v3 and cf-clearance need one.
Challengeerror_renderVerify site_key matches what the page uses.
Challengechallenge_errorSitekey/URL pair is no longer authorised.
Challengeinvalid_challengeVercel challenge_token expired; fetch a fresh one.
Challengewrong_challenge_payloadRe-fetch the protected page; resend challenge_body_b64.
Proxyproxy_blockedRotate to a cleaner (residential) IP.
Proxyproxy_errorBad creds / no HTTPS / dead proxy.
Proxyip_blocked_by_cloudflareSwitch IP and re-fetch the page.
Proxybot_detected_by_cloudflareUse a static residential proxy for cf-clearance.
Solvetoo_many_attempts_solvingProxy flagged; rotate.
Solverecaptcha_timeoutRetry; if persistent, switch proxy.
Solvehcaptcha_timeoutSitekey distrusts your IP — rotate.
Solvesolve_timeoutFaster proxy.
Solveupstream_timeoutTransient. Retry once.
Solveupstream_errorTarget site changed challenge flow. Refresh the token.
Outputempty_token / no_tokenRetry.
LifecyclecancelledResubmit.
Lifecyclegeneral_errorOpen a ticket with task_id + request_id.

OpenAPI

The full machine-readable spec is published at https://captcha.solvium.io/openapi.json — feed it into Postman, Insomnia, or any OpenAPI-aware client generator to scaffold a typed SDK.

© 2026 Solvium. All rights reserved.