Skip to content

FunCaptcha (Arkose Labs)

Summary

PropertyValue
v1 typefuncaptcha beta
Compatibility namesFunCaptchaTask, FunCaptchaTaskProxyless
Proxyoptional (Proxies)
Deadline180 seconds (starting value). A task not solved by then fails with timeout and is not charged.
2captcha legacy APImethod=funcaptcha (details)

Parameters

The params object of POST /v1/tasks. Unknown fields are rejected with 422 invalid_params.

FieldTypeDescription
website_url
required
string

Full URL of the page that shows the captcha (http or https).

format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?:// · min length 8 · max length 4,096
website_public_key
required
string

The public key (data-pkey).

min length 1 · max length 128
api_subdomain
optional
string

Subdomain that serves the widget, e.g. client-api.arkoselabs.com.

format: hostname · min length 1 · max length 253
data
optional
string

Extra blob data as a JSON string, e.g. {"blob":"..."}.

min length 1 · max length 16,384
user_agent
optional
string

Browser User-Agent.

min length 1 · max length 1,024
proxy
optional
object

Proxy the solver must use. login and password are used in memory only and are never stored or logged.

proxy.type
required
enumone of "http", "https", "socks4", "socks5"
proxy.host
required
string

IP address or host name. Private and loopback addresses are rejected.

min length 1 · max length 253
proxy.port
required
integer≥ 1 · ≤ 65535
proxy.login
optional
stringmax length 256
proxy.password
optional
stringmax length 256

Solution

The solution object of a solved task.

FieldTypeDescription
token
required
string

Token to submit to the target site. Single use.

min length 1

Example: native API (v1)

Runs as is with a test key (nop_test_…) in the sandbox; use a live key for real tasks.

POST /v1/tasks
{
"type": "funcaptcha",
"params": {
"website_url": "https://example.com/signup",
"website_public_key": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
"api_subdomain": "client-api.arkoselabs.com"
}
}
Terminal window
export NOPTCHA_KEY=nop_test_... # your test or live key
# waits up to 60 s; 200 = finished (solved or failed), 202 = still processing
IDEMPOTENCY_KEY=$(uuidgen) # one key per task you want; a retry of the same request reuses it
curl -s -X POST "https://api.noptcha.com/v1/tasks" \
-H "Authorization: Bearer $NOPTCHA_KEY" \
-H 'Prefer: wait=60' \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H 'Content-Type: application/json' \
-d @- <<EOF
{
"type": "funcaptcha",
"params": {
"website_url": "https://example.com/signup",
"website_public_key": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
"api_subdomain": "client-api.arkoselabs.com"
}
}
EOF
# on 202: long-poll with the "id" from the response
TASK_ID=...
curl -s "https://api.noptcha.com/v1/tasks/$TASK_ID?wait=60" \
-H "Authorization: Bearer $NOPTCHA_KEY"

In the sandbox the task is solved at once and solution is:

{
"token": "NOPTCHA_TEST_TOKEN_7259140378796032"
}

Compatibility API

NameProxyNotes
FunCaptchaTaskrequired
FunCaptchaTaskProxylessignored

Task fields (in task, next to type) and the v1 parameter each one becomes:

Compatibility fieldv1 parameter
datadata
funcaptchaApiJSSubdomainapi_subdomain
userAgentuser_agent
websitePublicKeywebsite_public_key
websiteURLwebsite_url
proxyType, proxyAddress, proxyPort, proxyLogin, proxyPasswordproxy (Proxies)

Solution fields in getTaskResult:

Compatibility fieldv1 solution field
tokentoken

Example: compatibility API

POST /createTask
{
"clientKey": "nop_test_…",
"task": {
"type": "FunCaptchaTaskProxyless",
"websiteURL": "https://example.com/signup",
"websitePublicKey": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
"funcaptchaApiJSSubdomain": "client-api.arkoselabs.com"
}
}
Terminal window
export NOPTCHA_KEY=nop_test_... # your test or live key
# 1. create the task
curl -s -X POST "https://api.noptcha.com/createTask" \
-H 'Content-Type: application/json' \
-d @- <<EOF
{
"clientKey": "$NOPTCHA_KEY",
"task": {
"type": "FunCaptchaTaskProxyless",
"websiteURL": "https://example.com/signup",
"websitePublicKey": "B7D8911C-5CC8-A9A3-35B0-554ACEE604DA",
"funcaptchaApiJSSubdomain": "client-api.arkoselabs.com"
}
}
EOF
# 2. poll with the taskId from step 1 every few seconds until "status" is "ready"
TASK_ID=...
curl -s -X POST "https://api.noptcha.com/getTaskResult" \
-H 'Content-Type: application/json' \
-d @- <<EOF
{
"clientKey": "$NOPTCHA_KEY",
"taskId": $TASK_ID
}
EOF

In the sandbox getTaskResult returns "status": "ready" and solution:

{
"token": "NOPTCHA_TEST_TOKEN_7259140378796032"
}