Documentation
API reference and integration guide
OverviewFunCaptchaFunCaptcha ProxylessFunCaptcha BDACastlereCAPTCHA v2reCAPTCHA v2 EnterprisereCAPTCHA v3reCAPTCHA v3 EnterpriseTurnstilehCaptchaCloudflareImage→TextMath ImageFC ClassificationDataDome
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"
}
}typestringrequired
"FunCaptchaBDA"websiteURLstringrequired
Page that hosts the FunCaptcha.
websitePublicKeystringrequired
Arkose public key (sitekey).
proxystringrequired
The proxy you will submit the BDA from. Geo and timezone baked into the BDA are taken from it — submit from the same IP.
datastring
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
}bdastring
Encrypted BDA — the value of
c for /fc/gt2.userAgentstring
The UA the BDA was built for. Use it exactly (header and
userbrowser).capiVersionstring
Value of
capi_version for /fc/gt2.headersobject
Headers to send with the
/fc/gt2 request. x-ark-esync-value is critical — the BDA is encrypted against it.fingerprintobject
Browser fingerprint the BDA was built from (navigator, canvas, WebGL, fonts, screen, etc.).
bdaPlainarray
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