funsolver

Документация

Справочник по API и руководство по интеграции

FunCaptcha Proxyless

Один в один как FunCaptchaTask, только прокси передавать не нужно — решаем через наш пул прокси. Поле proxy игнорируется.

Цена за 1000 успешных решений:$1.80 / 1k

Пример тела createTask

JSON
{
  "clientKey": "fsk_your_api_key_here",
  "task": {
    "type": "FunCaptchaTaskProxyless",
    "websiteURL": "https://account.battle.net/recovery/ru/identify-account.html",
    "websitePublicKey": "9C3260E3-AD4C-6719-E0A9-56D21BFB0BCD",
    "funcaptchaApiJSSubdomain": "blizzard-api.arkoselabs.com"
  }
}

Параметры task

type
stringrequired
"FunCaptchaTaskProxyless"
websiteURL
stringrequired
URL страницы, где находится капча.
websitePublicKey
stringrequired
Site key виджета FunCaptcha (он же publicKey).
funcaptchaApiJSSubdomain
string
Поддомен api.js (напр. blizzard-api.arkoselabs.com). Если не задан — подставится автоматически.
data
string
Поле data из триггера. Можно передать как сырой blob или как "{"blob":"..."}". Требуется только для некоторых сайтов (см. карточки ниже).
userAgent
string
UA, который будет использован при решении. По умолчанию подбирается из пула.
cookies
string | object
Куки сайта. Строка "name=val; name2=val2" или объект {"name":"val"}. Для Uber — обязательно для стабильного решения без волн.

Известные интеграции

Если работаешь с одним из этих сайтов — скопируй готовое тело createTask. Конфигурация для известных sitekey подставляется автоматически.

Полный пример (Python)

python
import requests, time

API = "https://api.funsolver.com"
KEY = "fsk_your_api_key_here"

create = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "FunCaptchaTaskProxyless",
        "websiteURL": "https://account.battle.net/recovery/ru/identify-account.html",
        "websitePublicKey": "9C3260E3-AD4C-6719-E0A9-56D21BFB0BCD",
    },
}).json()
task_id = create["taskId"]

while True:
    r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task_id}).json()
    if r.get("status") == "ready":
        print("token:", r["solution"]["token"])
        break
    if r.get("errorId"):
        raise RuntimeError(r["errorCode"], r.get("errorDescription"))
    time.sleep(1.5)
Заметил ошибку в доке? Напиши в саппорт.
Для ИИ-агентов: машиночитаемый справочник — /llms.txt