Kasada
POST /v1/solve/kasada
By default, send only the site url. The server runs p.js → /fp → ips.js → /mfc → /tl and returns business headers in data.kpsdk_head.
payload.action switches to a short path. Missing, empty, or verify / kpsdk-head / headers / biz-headers all run the full pipeline.
payload
| Field | Aliases | Meaning |
|---|---|---|
action | mode | verify (default) / mfc / cd / extract-salt |
basePath | base_path / sdkPath / sdk_path | Tenant prefix, e.g. https://host/{uuid}/{uuid}. Can also be stripped from url by dropping /mfc /tl /fp /p.js /ips.js |
version | Default j-1.2.904, written to x-kpsdk-v | |
h | x_kpsdk_h | If set, skip GET /mfc |
fc | x_kpsdk_fc | Kept when passed with h |
ct | x_kpsdk_ct | Together with st, takes the short path and skips POST /tl |
st | x_kpsdk_st | See above |
salt | For x-kpsdk-cd. Defaults to a value parsed from p.js | |
pjs | script | p.js source, used to extract salt |
pjs_url | pjsUrl | Remote p.js for extract-salt |
workTime | work_time | Passed into cd |
id / duration / clockOffsetMs | clock_offset_ms | Optional cd fields |
include_fc | When true, write /mfc fc into kpsdk_head |
The full pipeline also needs top-level url (home page or an already-known tenant prefix).
Default: full pipeline
{
"url": "https://www.wizzair.com/",
"timeout": 90000,
"payload": { "version": "j-1.2.904" }
}Skip home-page parsing when the tenant path is known:
{
"url": "https://www.wizzair.com/",
"timeout": 90000,
"payload": {
"basePath": "https://www.wizzair.com/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3"
}
}data (full pipeline)
{
"kpsdk_head": {
"x-kpsdk-ct": "...",
"x-kpsdk-h": "...",
"x-kpsdk-v": "j-1.2.904",
"x-kpsdk-cd": "..."
},
"basePath": "https://www.wizzair.com/{uuid}/{uuid}",
"ct": "...",
"st": 123,
"h": "...",
"fc": "...",
"version": "j-1.2.904",
"cookie": "...",
"tl_status": 200,
"mfc_status": 200,
"tl_body_len": 12345
}Spread kpsdk_head onto later business requests. fc stays out of kpsdk_head unless include_fc is set.
If the page has no Kasada path: INVALID_INPUT, asking for payload.basePath.
Existing ct / st (short path)
When payload has both ct and st, /tl is skipped; only h and cd are filled in:
{
"url": "https://www.wizzair.com/",
"payload": {
"ct": "...",
"st": 123,
"basePath": "https://www.wizzair.com/{uuid}/{uuid}"
}
}Returns { kpsdk_head, basePath, mfc_status }.
action=mfc
GET /mfc only, for h:
{
"url": "https://www.wizzair.com/{uuid}/{uuid}",
"payload": { "action": "mfc" }
}data: { h, fc, status, basePath, version }. Missing url / basePath → INVALID_INPUT.
action=cd
Compute x-kpsdk-cd locally (no network; salt must be resolvable, it will not fetch p.js for you):
{
"payload": {
"action": "cd",
"ct": "...",
"st": 123,
"salt": "..."
}
}data: { cd, salt }. Missing ct / st → INVALID_INPUT.
action=extract-salt
{
"payload": {
"action": "extract-salt",
"pjs": "/* p.js source */"
}
}Or pass pjs_url and let the server fetch it. data is the salt extraction result (including salt).