Tasks
Updated 8/6/2026
Cloudflare Turnstile Solver API
olve Cloudflare Turnstile challenges with the Solverify Turnstile Solver API. Create a task with the page URL and Turnstile sitekey, then retrieve the response token from solution.value after processing completes.
Use this task type when a page contains a Cloudflare Turnstile widget and your authorized workflow needs its response token.
Turnstile Solver Endpoint
POST https://solver.solverify.net/createTask
Turnstile uses the standard Solverify create-and-poll workflow:
- Find the page URL and Turnstile sitekey.
- Include
cdataandactiononly when the widget uses them. - Create a
turnstiletask withPOST /createTask. - Poll
POST /getTaskResultwith the returnedtaskId. - Read the Turnstile response token from
solution.value.
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
clientKey | string | Yes | Your private Solverify API key. |
task.type | string | Yes | Must be turnstile. |
task.websiteURL | string | Yes | Full URL where the Turnstile widget is loaded. Maximum 2,048 characters. |
task.websiteKey | string | Yes | Turnstile sitekey, commonly found in the widget's data-sitekey attribute. Maximum 256 characters. |
task.cdata | string | No | Turnstile cdata value when supplied by the target widget. |
task.action | string | No | Turnstile action value when supplied by the target widget. |
task.proxyType | string | No | Custom proxy type. Only http is accepted. Defaults to http when a proxy address and port are provided. |
task.proxyAddress | string | No | Custom proxy IP address or hostname. Maximum 256 characters. |
task.proxyPort | string | No | Custom proxy port as a numeric string containing 1 to 5 digits. |
task.proxyLogin | string | No | Username for an authenticated custom proxy. |
task.proxyPassword | string | No | Password for an authenticated custom proxy. |
Basic Turnstile Task Request
When no custom proxy is supplied, Solverify uses its own proxy infrastructure:
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "turnstile",
"websiteURL": "https://example.com",
"websiteKey": "example_key",
"cdata": "example_cdata",
"action": "example_action"
}
}
If the target widget does not use cdata or action, omit those fields instead of sending empty values.
Turnstile Task With a Custom Proxy
To use your own proxy, provide proxyAddress and proxyPort together. Add credentials only when the proxy requires authentication.
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "turnstile",
"websiteURL": "https://example.com",
"websiteKey": "example_key",
"proxyType": "http",
"proxyAddress": "1.1.1.1",
"proxyPort": "8080",
"proxyLogin": "username",
"proxyPassword": "password"
}
}
Turnstile Solver Code Examples
These examples create a Turnstile task and print the returned task ID. API keys are loaded from an environment variable where supported.
curl --request POST \
--url https://solver.solverify.net/createTask \
--header "Content-Type: application/json" \
--data '{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "turnstile",
"websiteURL": "https://example.com",
"websiteKey": "example_key"
}
}'
Create Task Response
{
"errorId": 0,
"taskId": "UUID"
}
Completed Turnstile Result
After the task reaches completed, the Cloudflare Turnstile token is returned in solution.value:
{
"errorId": 0,
"status": "completed",
"solution": {
"value": "0.MpR_tg_Jc9krcpY7vsFHAs"
},
"errorCode": null,
"errorDescription": null
}
Turnstile Timeout
Turnstile tasks can run for up to approximately 130 seconds before timing out internally. Use an overall polling deadline in your application and stop when the API returns an error.
Turnstile API Errors
| Error code | Description |
|---|---|
ERROR_INVALID_REQUEST | The top-level request body is missing or contains invalid JSON. |
ERROR_INVALID_TASK | Required Turnstile task fields are missing or invalid. |
ERROR_UNSUPPORTED_TASK | The supplied task type is not supported. |
ERROR_INSUFFICIENT_BALANCE | The account balance is too low to create the task. |
ERROR_NO_CAPACITY | Turnstile solver capacity is temporarily unavailable. |
ERROR_TASK_FAILED | The Turnstile task could not be completed. |
ERROR_TIMEOUT | Solving exceeded the allowed processing time. |
For recovery guidance and every supported response, see Solverify API Error Codes.
Next Steps
After creating a Turnstile task, poll the Get Task Result API every 2 to 3 seconds with the returned taskId. Stop polling when the task completes or errorId indicates a failure.
Frequently Asked Questions
Where can I find the Cloudflare Turnstile sitekey?
The sitekey is commonly present in the widget's data-sitekey attribute or Turnstile rendering configuration. Send it as task.websiteKey.
Does the Turnstile solver require a proxy?
No. If you omit the custom proxy fields, Solverify uses its own proxy infrastructure. To use your own proxy, provide proxyAddress and proxyPort together.
When should I send cdata and action?
Send these values only when the target widget includes them. Use the exact values associated with the page's current Turnstile configuration.
What does the Turnstile Solver API return?
The completed task returns a Cloudflare Turnstile response token in solution.value.
Does this task return cookies or a user-agent?
The Turnstile task result is the response token in solution.value. The documented result does not require cookies or a user-agent.
How long can a Turnstile task take?
The internal task timeout is approximately 130 seconds. Normal completion time varies with challenge conditions and available solver capacity.