KasadaPayloadProxyLess
Turn the Kasada ips.js script into the /tl payload and headers, then POST it yourself so the session binds to your IP.
This is the self-driven Kasada flow. You fetch ips.js, the solver computes the /tl payload and the headers that go with it, and you make the POST. Because the request is yours, the resulting x-kpsdk-ct token and Kasada cookies are bound to your IP and TLS fingerprint.
Collecting the inputs
Trigger the challenge: either a 429 on the page itself, or the background GET /149e9513…/2d206a39…/fp?x-kpsdk-v=j-1.2.x that answers 429. Parse the ips.js URL out of the response.
GET that URL with browser-accurate headers and keep the entire response body. Send it as scriptContent,
and the URL you fetched it from as scriptUrl.
window.KPSDK = {};
KPSDK.now =
typeof performance !== 'undefined' && performance.now ? performance.now.bind(performance) : Date.now.bind(Date);
KPSDK.start = KPSDK.now();Posting to /tl
POST https://<host>/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/tl
Content-Type: application/octet-stream
x-kpsdk-ct / x-kpsdk-dt / x-kpsdk-im / x-kpsdk-v: from solution.headers
x-kpsdk-h: 01
Referer: the /fp URL
<base64-decoded solution.payload>A successful POST answers 200 with {"reload": true} and sets x-kpsdk-ct, x-kpsdk-st and the Kasada cookies on the response. Store all of them: st is what you need later to mint proof-of-work headers.
Decode the payload before sending it
solution.payload is base64. POST the decoded bytes as application/octet-stream: posting the base64 string is
the usual cause of a /tl response that is not 200 with "reload": true.
Use the exact user agent from the solution
Send solution.userAgent on every request in the flow, including the ips.js fetch. A mismatch between the UA the
payload was built with and the UA on the wire invalidates it.
x-kpsdk-r tells you what went wrong
Check the /tl response header: 1-AA or 1-AQ means the fingerprint or the IP was rejected, not that the payload
was malformed. Rotate to a cleaner IP and use a TLS client that matches recent Chrome.
Related tasks
- KasadaTokenProxyLess: fully managed, returns replay-ready headers.
- KasadaWorkTimeProxyLess: mints the per-request
x-kpsdk-cdfrom thestyou got here.
Supported Providers
| Provider | Price per 1,000 | Routing |
|---|---|---|
| $0.60 |
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: |
scriptContent* | string | Yes | Full body of the Kasada Example: |
scriptUrl | string | No | Absolute URL the script body was fetched from, query string included. Example: |
{ "clientKey": "your-api-key-from-dashboard", "task": { "type": "KasadaPayloadProxyLess", "websiteURL": "https://www.whatnot.com/", "scriptContent": "KPSDK.scriptStart=KPSDK.now();((funct…" }}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 |
|---|---|---|---|
payload* | string | Yes | Base64-encoded Example: |
headers* | object | Yes | Headers to send with the |
raw* | Record<string, unknown> | Yes | Raw provider response data for advanced use cases. |
userAgent | string | No | User-Agent string used during solving (if applicable). Example: |