Skip to content
voidcaptcha

Getting started

Your first solve, in about a minute.

Three steps: create an account, take your key, send one request. The API is plain JSON over HTTPS, and Python and Node.js have official clients.

1. Get a key#

Create an account and a live key is issued immediately. The key is shown once — copy it then, because only a hash is stored. Live solves are billed against your balance, so top up before the first one.

Tip

Every account also gets a test key. Test keys solve a synthetic challenge, return a well-formed response in about two seconds, and never touch your balance — safe to run in CI on every commit.

2. Send a task#

Python and Node.js have official clients. They are optional: any other language posts the same JSON with the HTTP library it already has.

Python
pip install voidcaptcha
Node.js
npm install voidcaptcha

Python: PyPI, GitHub · Node.js: npm, GitHub. MIT licensed.

This example solves a reCAPTCHA v3 challenge. With a client, each type has its own method; without one, swap type for any other value from the task-type list and adjust the fields — everything else stays the same.

Request · POST /v1/getResult
# pip install voidcaptcha
from voidcaptcha import VoidCaptcha

client = VoidCaptcha("void_a1b2c3d4e5f60718293a4b5c6d7e8f90")

result = client.recaptcha_v3(
    url="https://example.com/login",
    site_key="6LdyC2cUAAAAACGuDKpXeDorzUDWXmdqeg-xy696",
    action="login",
    proxy="proxy.example.com:9090:user:pass",
)

print(result.value)
Response
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "03AGdBq25V6…",
    "userAgent": "Mozilla/5.0 …"
  },
  "cost": "$0.0008",
  "balance": "$411.24",
  "elapsedMs": 4820
}

Language choice is remembered across the whole site, so if you switch to Go here the reference pages follow.

3. Use the token#

Take solution.token and submit it the way the page would — for reCAPTCHA that means posting it as g-recaptcha-response alongside your form fields. Send the returned userAgent on that request too, so the token is presented under the same identity it was earned with.

Tokens are short-lived. Treat roughly two minutes as the usable window and request one at the point you need it rather than warming a pool in advance.

Handling failures#

A failure returns a non-zero errorId and a string errorCode, and does not charge your balance. The error reference states for every code whether retrying is worthwhile — some are transient and worth an immediate retry, others mean the request itself is wrong and retrying will never help.

Warning

Retry on ERROR_IP_BLOCKED and ERROR_CAPTCHA_UNSOLVABLE. Do not retry on ERROR_SITEKEY_INVALID or ERROR_REQUIRED_FIELD — the request is malformed and a second identical attempt fails identically.

Where to go next#

Last updated on 31 July 2026