11 captcha types • unified REST API
We solve captchas
so your automation just works.
FunCaptcha, reCAPTCHA, Turnstile, Cloudflare, DataDome, Yandex and more — a single API, ~2s avg response, pay only for successful solves.
Supported captchas
Same createTask + getTaskResult flow for all of them — only task.type and its payload differ.
FunCaptcha
—
Arkose Labs incl. enterprise site keys (Roblox, Vinted, Outlook…)
FunCaptcha Classification
—
Image recognition for FunCaptcha waves — we return tile indexes
Castle
—
Castle.io browser-fingerprint anti-bot — we return a ready x-castle-jwt
reCAPTCHA v2
—
Checkbox + invisible
reCAPTCHA v2 Enterprise
—
Enterprise sitekey — grecaptcha.enterprise.render
reCAPTCHA v3
—
Score-based, action + min_score honoured
reCAPTCHA v3 Enterprise
—
Enterprise sitekey — enterprise.js + grecaptcha.enterprise.execute
Turnstile
—
Cloudflare Turnstile — including invisible
Cloudflare
—
Full CF challenge — we hand back cf_clearance + UA
DataDome
—
DataDome — token for x-datadome-clientid, slider included
Image → Text
—
OCR for classic text-image captchas, base64 in
Math Image
—
Arithmetic on an image ("6×3") — OCR + eval, answer is the number
Yandex Smart
—
Yandex SmartCaptcha incl. audio challenge
Yandex Image
—
Yandex image-to-text (classic captcha)
How to start
Three steps, five minutes — and the API is handing you tokens.
1Step 1
Sign up
Create an account in 30 seconds. No card upfront, no email verification dance.
2Step 2
Top up
Pick any payment method in the dashboard. You only get charged for successful solves.
3Step 3
Hit the API
Grab your clientKey from the dashboard and POST createTask. Poll getTaskResult and the token arrives in seconds.
Example: Python + requests
import time, requests
API = "https://api.funsolver.com"
KEY = "sp_xxxxxxxxxxxxxxxxxxxx" # from /dashboard
create = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "TurnstileTask",
"websiteURL": "https://example.com/login",
"websitePublicKey": "0x4AAAAAAA...",
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": 8080,
"proxyLogin": "user",
"proxyPassword": "pass",
},
}).json()
task_id = create["taskId"]
while True:
r = requests.post(f"{API}/getTaskResult", json={
"clientKey": KEY, "taskId": task_id,
}).json()
if r["status"] == "ready":
print(r["solution"]["token"])
break
time.sleep(2)