funsolver
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)