Skip to content

Cloudflare challenge page

Summary

PropertyValue
v1 typecloudflare.challenge
Compatibility namesnone: native API (v1) only
Proxyrequired (Proxies)
Deadline120 seconds (starting value). A task not solved by then fails with timeout and is not charged.

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
proxy
required
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
user_agent
optional
string

Usually omit it. The User-Agent actually used is returned in the solution.

min length 1 · max length 1,024
wait_load
optional
boolean

Wait for the page's network activity to settle before returning.

required_cookies
optional
array of string

Cookie names that must all be obtained for the task to succeed, e.g. ["cf_clearance"].

max items 32 · unique items
block_image
optional
boolean

Do not load images of the target page (saves proxy traffic).

post_data
optional
object

If set, submitted to website_url as an HTML form POST.

max 64 keys
post_data.<any key>
optional
string | number | boolean

Solution

The solution object of a solved task.

FieldTypeDescription
cookies
required
object

Cookies after passing the challenge, name to value; usually includes cf_clearance.

cookies.<any key>
optional
string
user_agent
required
string

User-Agent the cookies are bound to; use it for every follow-up request.

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

Response headers of the target page.

headers.<any key>
optional
string
request_headers
optional
object

Request headers of the browser's last request to the target page.

request_headers.<any key>
optional
string
content
optional
string

HTML of the target page after passing the challenge.

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": "cloudflare.challenge",
"params": {
"website_url": "https://example.com/",
"proxy": {
"type": "http",
"host": "203.0.113.7",
"port": 8080,
"login": "proxyuser",
"password": "proxypass"
},
"required_cookies": [
"cf_clearance"
]
}
}
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": "cloudflare.challenge",
"params": {
"website_url": "https://example.com/",
"proxy": {
"type": "http",
"host": "203.0.113.7",
"port": 8080,
"login": "proxyuser",
"password": "proxypass"
},
"required_cookies": ["cf_clearance"]
}
}
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:

{
"cookies": {
"cf_clearance": "NOPTCHA_TEST_TOKEN_7259140378796032"
},
"user_agent": "Mozilla/5.0 (Noptcha test)"
}