Skip to main content
POST
/
v1
/
task
/
execute
Execute Task
curl --request POST \
  --url https://api.example.com/v1/task/execute \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <x-api-key>' \
  --data '
{
  "task_type": "<string>",
  "task_data": {}
}
'

Authentication

This endpoint requires an API key passed via header.
X-Api-Key
string
required
Your API key.

Request Body

task_type
string
required
The type of challenge to solve. One of: turnstile, waf, wafauto, datadome.
task_data
object
required
The challenge-specific parameters. The required fields depend on the task_type — see the task type pages linked below.

Supported Task Types

Request Examples

Turnstile

curl -X POST https://api.uncaptcha.io/v1/task/execute \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: your-api-key" \
  -d '{
    "task_type": "turnstile",
    "task_data": {
      "sitekey": "0x4AAAAAABs37s-ih7Jepz0J",
      "url": "https://example.com/",
      "proxy": "http://user:pass@1.2.3.4:8080"
    }
  }'

WAF / WAF Auto

curl -X POST https://api.uncaptcha.io/v1/task/execute \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: your-api-key" \
  -d '{
    "task_type": "waf",
    "task_data": {
      "url": "https://example.com/",
      "proxy": "http://user:pass@1.2.3.4:8080"
    }
  }'
For wafauto, use the same payload but set "task_type": "wafauto". The response includes an additional response object with the page content.

DataDome

curl -X POST https://api.uncaptcha.io/v1/task/execute \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: your-api-key" \
  -d '{
    "task_type": "datadome",
    "task_data": {
      "url": "https://example.com/",
      "block_html": "<html>...</html>",
      "proxy": "http://user:pass@1.2.3.4:8080",
      "force_slider": false,
      "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
    }
  }'

Response Examples

Successful responses always have this structure:
{
  "success": true,
  "data": {
    "solution": { ... }
  }
}
The solution object varies by task type:
{
  "success": true,
  "data": {
    "solution": {
      "token": "0.AuR5g8kP..."
    }
  }
}

Error Responses

All errors follow the same format:
{
  "success": false,
  "message": "description of what went wrong"
}
StatusMessageCause
400Request body could not be decodedMalformed JSON or missing required fields
400provided url for task is invalidThe URL in task_data is not a valid URL
400task not foundThe task_type value is not recognized
401X-Api-Key header is missingNo X-Api-Key header was sent
401User provided an empty or invalid API keyThe API key does not exist
401URL is blacklistedThe target domain is blocked
402insufficient balanceYour account balance is too low for this task
500* (solver related)The solver encountered an internal error
504task timed outThe solver did not respond within 30 seconds

Billing

Your balance is debited before the task is sent to the solver. If the solver fails, times out, or returns an error, the charge is automatically refunded — you are only charged for successful solves.
Requests have a hard 30-second timeout. If the solver does not respond in time, you receive a 504 and your balance is refunded.