CAPTCHA types · imperva
Imperva Incapsula Solver API: reese84 and utmvc Cookies
Solve Imperva / Incapsula protection with the SolveHub API in reese84 or UT.mvc mode. Request fields for each mode, proxy requirements, cURL example, result cookies and errors.
For authorized QA automation and browser integration. Use only on websites and workflows you have permission to test.
POST /v1/tasks with Authorization: Bearer <API_KEY>, Content-Type: application/json and an Idempotency-Key. Check availability in live prices first; see the quick start for the full create-and-poll flow.Choose the mode that matches the target challenge, and do not mix up the script URLs. Reese84 requires websiteURL,reeseScriptUrl; UT.mvc requires websiteURL,isUtmvc:true,scriptURL, where scriptURL is the full URL of /_Incapsula_Resource?SWJIYLWA=.... Both modes accept an optional HTTP proxy, useragent, and language; cookies can be used to preset browser cookies, and each item may contain only name,value.
Browser selection
When providing useragent, use desktop Chrome/Chromium or Android Chrome. Firefox, Edge, Opera and iOS are unsupported. Android support depends on whether a compatible device fingerprint can be generated.
Request fields
The top-level type and task are required; all task.* paths below are inside the task object. Field names are case-sensitive. Length limits are measured in UTF-8 bytes.
| Field | Type | Required | Limits | Description |
|---|---|---|---|---|
type |
String | Yes | Always imperva |
Platform task type. |
task |
JSON object | Yes | ≤ 7 MiB | Task parameters for this type. |
task.type |
String | No | Must be imperva if provided |
Kept for compatibility with the legacy request format; can be omitted in new integrations. |
task.websiteURL |
HTTP(S) URL | Yes | ≤ 2048 bytes | Full URL of the target page to solve, without credentials. |
task.isUtmvc |
Boolean | No | true / false |
true selects UT.mvc; omitted or false uses Reese84. |
task.reeseScriptUrl |
HTTP(S) URL | Reese84 mode | ≤ 4096 bytes | Full URL of the Reese84 challenge script. |
task.scriptURL |
HTTP(S) URL | UT.mvc mode | ≤ 4096 bytes | Full URL of the UT.mvc /_Incapsula_Resource?... script. |
task.cookies |
Array of objects | No | ≤ 100 items | Preset cookies; each item may contain only the two string fields name and value. |
task.cookies[].name |
String | Required per item | ≤ 256 bytes | Preset cookie name. |
task.cookies[].value |
String | Required per item | ≤ 4096 bytes | Preset cookie value. |
task.language |
String | No | ≤ 64 bytes | Browser language, e.g. zh-CN. |
task.useragent |
String | No | ≤ 512 bytes | Custom browser User-Agent; subsequent requests should prefer the solution.useragent actually returned. |
task.proxyType |
String | No | http only |
Proxy protocol; must be http when provided. |
task.proxyAddress |
String | No | ≤ 256 bytes | Proxy IP or hostname; must be provided together with proxyPort. |
task.proxyPort |
String | No | 1–5 bytes, value 1–65535 | Proxy port; must be a quoted numeric string. |
task.proxyLogin |
String | No | ≤ 256 bytes | Username, if the proxy requires authentication; must not be provided without the address and port. |
task.proxyPassword |
String | No | ≤ 256 bytes | Password, if the proxy requires authentication; must not be provided without the address and port. |
Reese84 request:
Create request example
{
"type": "imperva",
"task": {
"websiteURL": "https://example.com/protected",
"reeseScriptUrl": "https://example.com/challenge/reese.js"
}
}
cURL call
Replace the key, site details, and proxy in the example with your actual values; keep the Idempotency-Key unchanged for the same business request.
curl -sS -X POST 'https://www.tiam.codes/v1/tasks' \
-H 'Authorization: Bearer sh_REPLACE_ME' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: example-imperva-0001' \
--data-binary @- <<'JSON'
{
"type": "imperva",
"task": {
"websiteURL": "https://example.com/protected",
"reeseScriptUrl": "https://example.com/challenge/reese.js"
}
}
JSON
UT.mvc request:
{
"type": "imperva",
"task": {
"websiteURL": "https://example.com/protected",
"isUtmvc": true,
"scriptURL": "https://example.com/_Incapsula_Resource?SWJIYLWA=example"
}
}
cURL call
Replace the key, site details, and proxy in the example with your actual values; keep the Idempotency-Key unchanged for the same business request.
curl -sS -X POST 'https://www.tiam.codes/v1/tasks' \
-H 'Authorization: Bearer sh_REPLACE_ME' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: example-imperva-0001' \
--data-binary @- <<'JSON'
{
"type": "imperva",
"task": {
"websiteURL": "https://example.com/protected",
"isUtmvc": true,
"scriptURL": "https://example.com/_Incapsula_Resource?SWJIYLWA=example"
}
}
JSON
Create response and polling
A successful create returns HTTP 202, and status is usually queued initially. Save the taskId and call GET /v1/tasks/{taskId} about every 2–3 seconds. The soft processing time limit for this type is 180 seconds; after the soft limit the task may enter uncertain, and the results of accepted tasks can still be verified. Clients should not blindly recreate the task with a new Idempotency-Key.
Result fields
Read solution only when status=completed; the table below lists common fields, and the actual fields are determined by the task response.
| Field | Type | How to read |
|---|---|---|
solution.cookies |
Object | Reese84 or UT.mvc session cookies; keep the complete set. |
solution.useragent |
String | User-Agent to use for subsequent requests. |
The result contains solution.cookies and solution.useragent; Reese84 commonly yields reese84, UT.mvc commonly yields ___utmvc, and other session cookies may also be included. Example result: {"cookies":{"reese84":"EXAMPLE_COOKIE"},"useragent":"Mozilla/5.0 ..."}. Subsequent requests should reuse the complete cookie set, the returned User-Agent, and the proxy egress used during solving.
Failures and troubleshooting
Do not mix the Reese84 and UT.mvc script fields. When submitting cookies, each item must have exactly name,value; provide the proxy address and port together.
Common errors for create requests are 400 INVALID_TASK, 402 INSUFFICIENT_BALANCE, 429 TASK_LIMIT_EXCEEDED, and 503 TYPE_UNAVAILABLE. When a created task fails, the public error code is TASK_FAILED or TASK_TIMEOUT; uncertain corresponds to TASK_UNCERTAIN. See the Platform API reference for details.
The processing window starts after task creation is confirmed; queue waiting does not consume it. The current node timeout is approximately 120 seconds; the platform allows a 180-second soft window for transport and result polling.
Related documentation
Last updated: