Skip to content

TSPD (F5 Shape Security)

TSPD (Trusted Session Protection for Data) is a bot detection system developed by F5 Networks (formerly Shape Security). It protects high-value web applications — particularly in banking, airlines, and e-commerce — by analyzing browser fingerprints, behavioral signals, and network characteristics. When TSPD detects a suspicious request, it requires a verification token to proceed. The uCaptcha API solves TSPD challenges and returns a verification token.

TypeProxyDescription
TspdTokenOptionalSolve TSPD challenges (proxy parameters accepted but not required)
ParameterTypeRequiredDescription
typestringYesMust be TspdToken
websiteURLstringYesURL of the page protected by TSPD
websiteKeystringYesTSPD site key or identifier

Optional. Include these parameters if you want the task solved through your proxy.

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "TspdToken",
"websiteURL": "https://example.com/secure",
"websiteKey": "tspd_key_abc123def456"
}
}
{
"errorId": 0,
"taskId": "abc-123-def"
}
{
"token": "tspd_session_eyJhbGciOiJ...verification_payload"
}
FieldTypeDescription
tokenstringThe TSPD verification token to submit with the request

Once you receive the token value from the solution:

  1. Cookie injection — Set the TSPD token as the appropriate cookie (commonly _abck or a site-specific cookie name) in your HTTP client before making requests to the protected endpoint.
  2. Request header — Some implementations require the token to be passed in a custom request header. Check the target site’s TSPD integration for the exact header name.
import requests
import time
API_KEY = "YOUR_API_KEY"
# Create task
response = requests.post("https://api.ucaptcha.net/createTask", json={
"clientKey": API_KEY,
"task": {
"type": "TspdToken",
"websiteURL": "https://example.com/secure",
"websiteKey": "tspd_key_abc123def456"
}
})
task_id = response.json()["taskId"]
# Poll for result
while True:
result = requests.post("https://api.ucaptcha.net/getTaskResult", json={
"clientKey": API_KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
token = result["solution"]["token"]
print("Token:", token)
break
elif result["status"] == "failed":
print("Error:", result.get("errorDescription"))
break
time.sleep(5)
const API_KEY = "YOUR_API_KEY";
const { taskId } = await fetch("https://api.ucaptcha.net/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: "TspdToken",
websiteURL: "https://example.com/secure",
websiteKey: "tspd_key_abc123def456"
}
})
}).then(r => r.json());
while (true) {
const result = await fetch("https://api.ucaptcha.net/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: API_KEY, taskId })
}).then(r => r.json());
if (result.status === "ready") {
console.log("Token:", result.solution.token);
break;
} else if (result.status === "failed") {
console.error("Error:", result.errorDescription);
break;
}
await new Promise(r => setTimeout(r, 5000));
}
Terminal window
# Create task
curl -X POST https://api.ucaptcha.net/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "TspdToken",
"websiteURL": "https://example.com/secure",
"websiteKey": "tspd_key_abc123def456"
}
}'
# Poll for result (replace TASK_ID with the taskId from above)
curl -X POST https://api.ucaptcha.net/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID"
}'
  • CapMonster
  • RiskByPass

The following legacy type names are also accepted for backward compatibility:

  • TspdTask
  • ShapeTspdToken
  • CustomTask:tspd