KasadaTokenProxyLess
Hand over the Kasada p.js URL and get back ready-to-replay x-kpsdk-cd, x-kpsdk-ct and x-kpsdk-st headers.
Kasada blocks a request with a 429 whose body loads a single script (p.js or ips.js) under a path like /149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/. This task runs that whole flow for you: it fetches the script, builds the payload, POSTs it to /tl, and returns the headers the protected endpoint expects.
Finding pJsUrl
Open DevTools on the blocked page and look for the script under the Kasada UUID path. Two shapes are common:
- The block page loads it directly:
<script src="/149e9513…/2d206a39…/ips.js?…">. - The page loads it in the background from the fingerprint endpoint
/149e9513…/2d206a39…/fp?x-kpsdk-v=j-1.2.x, which answers 429 with the same script tag.
Pass the protected page as websiteURL, then pass the absolute script URL as pJsUrl, query string included. The UUID path is stable per site, so you only have to find it once.
Replaying the solution
Send x-kpsdk-ct, x-kpsdk-st and x-kpsdk-cd on the request that was blocked, together with any Kasada cookies your own session already holds.
Never send x-kpsdk-v to the protected endpoint
x-kpsdk-v belongs on the /tl POST only. Forwarding it to the protected endpoint is one of the most common
reasons a valid token still gets blocked.
x-kpsdk-cd is single-use
The cd header is a proof-of-work computed for one request. Reusing it across requests fails. Solve again for each
protected call, or keep the session yourself and mint only the proof-of-work with
KasadaWorkTimeProxyLess.
Match the returned user agent
solution.userAgent is the User-Agent the token was minted with. Send that exact value, and pair it with a TLS
client that fingerprints as the same Chrome version: Kasada checks both.
Related tasks
- KasadaPayloadProxyLess: you POST
/tlyourself, so the session binds to your IP. - KasadaCtBrowserToken: browser-based solve behind your own proxy.
- KasadaCdToken: refresh only
x-kpsdk-cdfor a session you already hold.
Supported Providers
| Provider | Price per 1,000 | Routing |
|---|---|---|
| $2.40 |
Request Schema
| Field | Type | Required | Description |
|---|---|---|---|
clientKey* | string | Yes | Your API key. Create one in the AnySolver dashboard. Example: |
task* | object | Yes | The task body. Required fields depend on the task type. See Tasks for per-task schemas. View task properties |
settings | object | No | Per-request settings for routing, auto retry, auto fallback, and proxy behavior. See Routing Strategies. View settings reference |
Task Object Properties
The task field accepts an object with the following properties:
| Field | Type | Required | Description |
|---|---|---|---|
type* | Yes | ||
websiteURL* | URL | Yes | Full URL of the page where the CAPTCHA is displayed. Example: |
pJsUrl* | URL | Yes | Absolute URL of the Kasada Example: |
{ "clientKey": "your-api-key-from-dashboard", "task": { "type": "KasadaTokenProxyLess", "websiteURL": "https://www.nike.com/", "pJsUrl": "https://www.nike.com/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/p.js" }}Optional fields are not guaranteed across providers
Response Schema
| Field | Type | Required | Description |
|---|---|---|---|
status* | Yes | Task status: "processing", "ready", or "failed". Example: | |
errorId* | Yes | 0 = success, 1 = external error, 2 = internal error. Example: | |
taskId | string | No | Unique identifier returned when the task was created. Example: |
errorCode | No | Machine-readable error code. Example: | |
errorDescription | string | No | Human-readable error message with resolution hints. Example: |
cost | number | No | Actual cost charged for this task in USD. Example: |
taskType | No | The type of CAPTCHA task to solve. Example: | |
provider | No | Provider that handled this task. While processing, the provider currently solving it. Example: | |
solution | object | No |
Solution Object Properties
The solution field contains an object with the following properties:
| Field | Type | Required | Description |
|---|---|---|---|
xKpsdkCd* | string | Yes | Proof-of-work header. It is single-use: request a new task for every protected request. Example: |
xKpsdkCt* | string | Yes | Session token header, valid until the Kasada session expires. Example: |
xKpsdkSt* | string | Yes | Server timestamp the session was issued at. Example: |
raw* | Record<string, unknown> | Yes | Raw provider response data for advanced use cases. |
xKpsdkR | string | No | Result header returned by the Example: |
xKpsdkCr | string | No | Challenge-required flag returned by the Example: |
userAgent | string | No | User-Agent string used during solving (if applicable). Example: |