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.
Supported Types
Section titled “Supported Types”| Type | Proxy | Description |
|---|---|---|
FunCaptchaTokenProxyLess | No | Standard (recommended) |
FunCaptchaToken | Yes | With proxy |
Parameters
Section titled “Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Task type from the table above |
websiteURL | string | Yes | URL of the page with the captcha |
websiteKey | string | Yes | FunCaptcha public key |
funcaptchaApiJSSubdomain | string | No | Custom API subdomain (e.g., client-api.arkoselabs.com) |
data | string | No | Additional data blob parameter |
Proxy Parameters
Section titled “Proxy Parameters”Required when using the FunCaptchaToken proxy task type.
| Parameter | Type | Required | Description |
|---|---|---|---|
proxyType | string | Yes | http, socks4, or socks5 |
proxyAddress | string | Yes | Proxy IP or hostname |
proxyPort | integer | Yes | Proxy port |
proxyLogin | string | No | Proxy username |
proxyPassword | string | No | Proxy password |
Create Task
Section titled “Create Task”Request
Section titled “Request”{ "clientKey": "YOUR_API_KEY", "task": { "type": "FunCaptchaTokenProxyLess", "websiteURL": "https://example.com/login", "websiteKey": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA", "funcaptchaApiJSSubdomain": "client-api.arkoselabs.com" }}Response
Section titled “Response”{ "errorId": 0, "taskId": "abc-123-def"}Solution Object
Section titled “Solution Object”{ "token": "3085d1d21c56bcebcb09ce44db...."}| Field | Type | Description |
|---|---|---|
token | string | FunCaptcha session token |
How to Use
Section titled “How to Use”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:
- Hidden input field — Some sites store the token in a hidden form field (commonly named
fc-tokenor similar). Set its value and submit the form. - 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.
- API request — Include the token in the request body sent to the site’s verification endpoint.
Code Examples
Section titled “Code Examples”Python
Section titled “Python”import requestsimport time
API_KEY = "YOUR_API_KEY"
# Create taskresponse = 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 resultwhile 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)JavaScript
Section titled “JavaScript”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));}# Create taskcurl -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" }'Provider Coverage
Section titled “Provider Coverage”- 2Captcha
- Anti-Captcha
- CapMonster
- DeathByCaptcha
- RiskByPass
Aliases
Section titled “Aliases”The following legacy type names are also accepted for backward compatibility:
FunCaptchaTaskFunCaptchaTaskProxyless