Before you submit — these must be correct
If any of these are wrong, your token may be accepted by our solver but rejected or scored poorly by the target site. We can’t detect these mismatches for you.
- Supply a proxy — `_abck` is IP-bound. Use a sticky session so the mint and the request share one egress IP.
- Give the exact protected request (path, method, form) you want run; we return that request's final HTML.
What is Akamai Web Unlocker?
Akamai Bot Manager (BMP) guards logins, search, checkout and other protected actions with the `_abck` sensor cookie plus, on borderline traffic, a sec-cpt Adaptive Challenge (an HTTP 428 interstitial with a proof-of-work). Unlike a token solver that hands back a cookie for you to replay, the Web Unlocker drives the WHOLE protected request for you: it loads the site, mints a validated `_abck`, submits your request (GET or form POST), solves the sec-cpt challenge if Akamai serves one, follows any redirects, and returns the final response HTML. You supply a proxy; the unlock runs through it so the result is coherent end-to-end.
How it works
Send Task
POST your AkamaiWebUnlockerTask with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
A real browser loads the target and runs Akamai's own bmak sensor script to mint a validated `_abck` — with human-like cursor motion and page interaction so the sensor scores clean. Your protected request is then issued in the SAME coherent session (same TLS, same cookies), so nothing is replayed across clients. If Akamai returns a 428 sec-cpt interstitial we mine its SHA-256 proof-of-work, submit the answer, and complete the challenge form. Redirects are followed to the final page (toggle with `followRedirects`). Because `_abck` is IP-bound, every hop rides the one proxy session you supply; we rotate sticky sessions until one clears.
Get Token
Poll getTaskResult — when status is 'ready', the solution contains the token to inject into the target page.
Quick integration
import requests, time
API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"
# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "AkamaiWebUnlockerTask",
"request": "[object Object]",
"proxyPort": "10001",
"proxyType": "http",
"proxyLogin": "your-proxy-username",
"websiteURL": "https://www.example.com/",
"proxyAddress": "gw.your-proxy-provider.com",
"proxyPassword": "your-proxy-password",
"followRedirects": "true"
}
}).json()
task_id = task["taskId"]
print(f"Task created: {task_id}")
# Step 2: Poll for result
while True:
result = requests.post(f"{API}/getTaskResult", json={
"clientKey": KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
print("Solved!", result["solution"])
break
elif result["status"] == "failed":
print("Failed:", result.get("errorDescription"))
break
time.sleep(1)
Task parameters
websiteURLtypestringreqyesThe Akamai-protected origin to unlock (e.g. https://www.example.com/).requesttypeobjectreqyesThe protected request to run: {path, method, form}. `path` is the endpoint (e.g. /Home/Search), `method` is GET or POST, `form` is the key/value body for a POST.followRedirectstypebooleanreqnoDefault true. Follow the response's redirect chain (e.g. a post-redirect-get) and return the FINAL page. Set false to get the first response, with the redirect reported.maxRotationstypeintegerreqnoDefault 10. How many sticky proxy sessions to try before giving up.proxyTypetypestringreqnohttp, https, or socks5.proxyAddresstypestringreqyesProxy host (IP or hostname). Required — the solve is IP-bound.proxyPorttypeintegerreqyesProxy port.proxyLogintypestringreqnoProxy username, if your proxy needs auth.proxyPasswordtypestringreqnoProxy password, if your proxy needs auth.Solution response
htmltypestringThe final response body — the real page you were after.statustypeintegerHTTP status of the final response (200 on success).finalUrltypestringThe URL after following the redirect chain.redirectedtypebooleanWhether a redirect chain was followed to reach the final page.ipBoundtypebooleanAlways true — `_abck` is bound to the proxy egress IP.Example response
Full getTaskResult response shape. The fields in the table above describe what's inside solution — the outer envelope (errorId, status) is identical for every captcha type.
{
"errorId": 0,
"status": "ready",
"solution": {
"html": "<!DOCTYPE html><html>... the final page HTML ...</html>",
"status": 200,
"ipBound": true,
"finalUrl": "https://www.example.com/Results/View",
"redirected": true
}
}Error response
Failures use the same envelope with errorId: 1 plus errorCode + errorDescription. See the error-code reference for the full list.
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Solver gave up — automatically refunded."
}Pending response
While the solver is still working, getTaskResult returns status: "processing". Poll every 1–2 seconds until ready or failed.
{
"errorId": 0,
"status": "processing"
}Features
task types
required: AkamaiWebUnlockerTask