Skip to content

FunCaptcha

FunCaptcha is an interactive CAPTCHA developed by Arkose Labs. It presents users with visual puzzles such as rotating images, matching objects, or selecting the correct orientation. FunCaptcha is widely used by major platforms including Microsoft (Outlook, Xbox Live), EA, GitHub, and many others to protect login and registration flows.

TypeProxyDescription
FunCaptchaTokenProxyLessNoStandard (recommended)
FunCaptchaTokenYesWith proxy
ParameterTypeRequiredDescription
typestringYesTask type from the table above
websiteURLstringYesURL of the page with the captcha
websiteKeystringYesFunCaptcha public key
funcaptchaApiJSSubdomainstringNoCustom API subdomain (e.g., client-api.arkoselabs.com)
datastringNoAdditional data blob parameter

Required when using the FunCaptchaToken proxy task type.

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "FunCaptchaTokenProxyLess",
"websiteURL": "https://example.com/login",
"websiteKey": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
"funcaptchaApiJSSubdomain": "client-api.arkoselabs.com"
}
}
{
"errorId": 0,
"taskId": "abc-123-def"
}
{
"token": "3085d1d21c56bcebcb09ce44db...."
}
FieldTypeDescription
tokenstringFunCaptcha session token

The FunCaptcha token should be submitted as the callback token to the Arkose Labs verification endpoint. The exact integration method depends on the target site:

  1. Hidden input field — Some sites store the token in a hidden form field (commonly named fc-token or similar). Set its value and submit the form.
  2. JavaScript callback — Pass the token to the FunCaptcha enforcement callback function. This is typically done by calling the verification callback registered during the Arkose Labs SDK initialization.
  3. API request — Include the token in the request body sent to the site’s verification endpoint.
import requests
import time
API_KEY = "YOUR_API_KEY"
# Create task
response = requests.post("https://api.ucaptcha.net/createTask", json={
"clientKey": API_KEY,
"task": {
"type": "FunCaptchaTokenProxyLess",
"websiteURL": "https://example.com/login",
"websiteKey": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
"funcaptchaApiJSSubdomain": "client-api.arkoselabs.com"
}
})
task_id = response.json()["taskId"]
# Poll for result
while True:
result = requests.post("https://api.ucaptcha.net/getTaskResult", json={
"clientKey": API_KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
token = result["solution"]["token"]
print("Token:", token)
break
elif result["status"] == "failed":
print("Error:", result.get("errorDescription"))
break
time.sleep(5)
const API_KEY = "YOUR_API_KEY";
const { taskId } = await fetch("https://api.ucaptcha.net/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: "FunCaptchaTokenProxyLess",
websiteURL: "https://example.com/login",
websiteKey: "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
funcaptchaApiJSSubdomain: "client-api.arkoselabs.com"
}
})
}).then(r => r.json());
while (true) {
const result = await fetch("https://api.ucaptcha.net/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: API_KEY, taskId })
}).then(r => r.json());
if (result.status === "ready") {
console.log("Token:", result.solution.token);
break;
} else if (result.status === "failed") {
console.error("Error:", result.errorDescription);
break;
}
await new Promise(r => setTimeout(r, 5000));
}
Terminal window
# Create task
curl -X POST https://api.ucaptcha.net/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "FunCaptchaTokenProxyLess",
"websiteURL": "https://example.com/login",
"websiteKey": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
"funcaptchaApiJSSubdomain": "client-api.arkoselabs.com"
}
}'
# Poll for result (replace TASK_ID with the taskId from above)
curl -X POST https://api.ucaptcha.net/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID"
}'
  • 2Captcha
  • Anti-Captcha
  • CapMonster
  • DeathByCaptcha
  • RiskByPass

The following legacy type names are also accepted for backward compatibility:

  • FunCaptchaTask
  • FunCaptchaTaskProxyless