Quick Start
Solve your first CAPTCHA with AnySolver in under five minutes.
Solve your first CAPTCHA with AnySolver in four steps. Total time: about five minutes.
Try without code first
The Playground runs the same createTask flow against your account from the dashboard.
Useful for confirming a sitekey works before wiring it into an integration.
Prerequisites
- An AnySolver account with a funded balance.
- The CAPTCHA you want to solve. For this guide, the Google reCAPTCHA demo works.
Step 1: Create an API key
- Open Dashboard / API Keys.
- Click + Create key.
- Copy the value. Keys are prefixed
anysolver_.

Keep your API key secret
Your key controls your balance. Never commit it to a public repository or expose it in client-side code.
Step 2: Send your first request
POST to https://api.anysolver.com/createTask with Content-Type: application/json:
{ "clientKey": "your-api-key-from-dashboard", "task": { "type": "ReCaptchaV2TokenProxyLess", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "pageTitle": "reCAPTCHA demo" }}curl -X POST https://api.anysolver.com/createTask \ -H 'Content-Type: application/json' \ -d '{"clientKey":"your-api-key-from-dashboard","task":{"type":"ReCaptchaV2TokenProxyLess","websiteURL":"https://www.google.com/recaptcha/api2/demo","websiteKey":"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-","pageTitle":"reCAPTCHA demo"}}'const res = await fetch('https://api.anysolver.com/createTask', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ "clientKey": "your-api-key-from-dashboard", "task": { "type": "ReCaptchaV2TokenProxyLess", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "pageTitle": "reCAPTCHA demo" }}),});const data = await res.json();import requestsres = requests.post( 'https://api.anysolver.com/createTask', json={ "clientKey": "your-api-key-from-dashboard", "task": { "type": "ReCaptchaV2TokenProxyLess", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "pageTitle": "reCAPTCHA demo" }},).json()Response:
{
"errorId": 0,
"taskId": "01KFNDF328KAN2AJ3BNHCQYE88"
}Save the taskId for the next step.
Step 3: Poll for the result
Wait three to five seconds, then POST to https://api.anysolver.com/getTaskResult:
{
"clientKey": "YOUR_API_KEY",
"taskId": "01KFNDF328KAN2AJ3BNHCQYE88"
}Poll every two to three seconds until status is ready:
{
"errorId": 0,
"taskId": "01KFNDF328KAN2AJ3BNHCQYE88",
"taskType": "ReCaptchaV2TokenProxyLess",
"status": "ready",
"provider": "Multibot",
"cost": 0.00013,
"solution": {
"token": "03AGdBq24PBCbwiDRaS_MJ7Z..."
}
}The solution block contains the token to submit to the target site. The provider and cost fields tell you which provider solved it and what you paid.
Step 4: Handle common errors
errorCode | When you see it | What to do |
|---|---|---|
ERROR_KEY_DENIED_ACCESS | API key invalid, disabled, or revoked. | Confirm the key in API Keys and check it is enabled. |
ERROR_ZERO_BALANCE | Balance below the task estimate. | Top up in Billing. |
TASK_NOT_SUPPORTED | No provider in your routing config supports the task type. | Switch to an auto* mode or add a supporting provider in Priority mode. |
INVALID_SITEKEY | Sitekey or domain mismatch. | Verify the sitekey on the target site, then re-submit. |
Full list: Error handling.
Complete examples
const API_KEY = 'YOUR_API_KEY';const BASE_URL = 'https://api.anysolver.com';const TASK = { type: 'ReCaptchaV2TokenProxyLess', websiteURL: 'https://www.google.com/recaptcha/api2/demo', websiteKey: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI', pageTitle: 'reCAPTCHA demo',};const post = async (path, body) => await fetch(`${BASE_URL}${path}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }).then(async (r) => await r.json());async function solveCaptcha() { console.log('Creating task...'); const create = await post('/createTask', { clientKey: API_KEY, task: TASK }); if (create.errorId !== 0) throw new Error(`${create.errorCode}: ${create.errorDescription ?? 'Unknown error'}`); console.log(`Task created: ${create.taskId}`); console.log('Polling for result...'); let result; do { await new Promise((r) => setTimeout(r, 3000)); result = await post('/getTaskResult', { clientKey: API_KEY, taskId: create.taskId }); console.log(`Status: ${result.status}`); if (result.status === 'ready') { console.log('Task completed!'); return result.solution.token; } if (result.status === 'failed') { throw new Error(`${result.errorCode}: ${result.errorDescription ?? 'Unknown error'}`); } if (result.status !== 'processing') { throw new Error(`Unexpected status: ${result.status}`); } } while (result.status === 'processing');}void solveCaptcha().then((token) => console.log('Solved:', token));import timeimport requestsAPI_KEY = "YOUR_API_KEY"BASE_URL = "https://api.anysolver.com"TASK = { "type": "ReCaptchaV2TokenProxyLess", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI", "pageTitle": "ReCAPTCHA demo",}def solve_captcha(): print("Creating task...") create = requests.post(f"{BASE_URL}/createTask", json={"clientKey": API_KEY, "task": TASK}).json() if create.get("errorId") != 0: raise Exception(f"{create.get('errorCode')}: {create.get('errorDescription', 'Unknown error')}") task_id = create["taskId"] print(f"Task created: {task_id}") print("Polling for result...") status = "processing" while status == "processing": time.sleep(3) result = requests.post(f"{BASE_URL}/getTaskResult", json={"clientKey": API_KEY, "taskId": task_id}).json() status = result.get("status") print(f"Status: {status}") if status == "ready": print("Task completed!") return result["solution"]["token"] if status == "failed": raise Exception(f"{result.get('errorCode')}: {result.get('errorDescription', 'Unknown error')}") if status != "processing": raise Exception(f"Unexpected status: {status}")print("Solved:", solve_captcha())