funsolver

Documentation

API reference and integration guide

FunCaptcha BDA

We return only a ready-made BDA (the encrypted browser fingerprint Arkose expects) plus the fingerprint itself. We do not solve images and do not fetch a token — you submit the BDA to Arkose yourself (parameter c of /fc/gt2/public_key/<key>). The BDA is built by the same pipeline as our FunCaptchaTask.

Price per 1000 successful requests:$0.45 / 1k

task parameters

HTTP
POST https://api.funsolver.com/createTask
Content-Type: application/json

{
  "clientKey": "fsk_abc...",
  "task": {
    "type":             "FunCaptchaBDA",
    "websiteURL":       "https://www.roblox.com/login",
    "websitePublicKey": "476068BF-9607-4799-B53D-966BE98E2B81",
    "proxy":            "http://user:pass@host:port"
  }
}
type
stringrequired
"FunCaptchaBDA"
websiteURL
stringrequired
Page that hosts the FunCaptcha.
websitePublicKey
stringrequired
Arkose public key (sitekey).
proxy
stringrequired
The proxy you will submit the BDA from. Geo and timezone baked into the BDA are taken from it — submit from the same IP.
data
string
Not needed: the blob (data[blob]) goes to /fc/gt2 separately from the BDA — add your own.

getTaskResult response

JSON
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "type":        "FunCaptchaBDA",
    "bda":         "uOncvI+V3jr77vPqLvVowGjq...",
    "userAgent":   "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
    "capiVersion": "4.5.0",
    "headers": {
      "user-agent":        "Mozilla/5.0 (...) Firefox/150.0",
      "accept-language":   "en-US,en",
      "x-ark-esync-value": "1790143200",
      "ark-build-id":      "...",
      "Origin":            "https://www.roblox.com",
      "Referer":           "https://www.roblox.com/"
    },
    "fingerprint": { "os": "...", "navigator": {}, "canvas": {}, "webGL": {}, "fonts": [] },
    "bdaPlain":    [ { "key": "api_type", "value": "js" }, { "key": "enhanced_fp", "value": [] } ]
  },
  "processingTime": 1.2
}
bda
string
Encrypted BDA — the value of c for /fc/gt2.
userAgent
string
The UA the BDA was built for. Use it exactly (header and userbrowser).
capiVersion
string
Value of capi_version for /fc/gt2.
headers
object
Headers to send with the /fc/gt2 request. x-ark-esync-value is critical — the BDA is encrypted against it.
fingerprint
object
Browser fingerprint the BDA was built from (navigator, canvas, WebGL, fonts, screen, etc.).
bdaPlain
array
Plaintext BDA — exactly what is encrypted in bda.

Submitting the BDA to Arkose

Python
sol = result["solution"]
body = {
    "c": sol["bda"],
    "public_key": "476068BF-9607-4799-B53D-966BE98E2B81",
    "site": "https://www.roblox.com",
    "userbrowser": sol["userAgent"],
    "capi_version": sol["capiVersion"],
    "capi_mode": "inline",
    "style_theme": "default",
    "rnd": str(random.random()),
    "data[blob]": blob,          # your blob, if the site requires one
}
r = session.post(
    "https://roblox-api.arkoselabs.com/fc/gt2/public_key/476068BF-9607-4799-B53D-966BE98E2B81",
    data=body,
    headers=sol["headers"],     # same UA / x-ark-esync-value / ark-build-id
    proxies={"https": PROXY},   # same proxy as in the task
)

The BDA is single-use and goes stale quickly (it is bound to x-ark-esync-value) — use it right after you receive it.

Spotted an error? Tell support.
For AI agents: machine-readable reference — /llms.txt