Skip to main content
Sec-CPT is a proof-of-work challenge. Instead of studying the browser, Akamai hands it a puzzle that takes real computation to solve, then checks the answers. Roolink does the computing; you do the waiting and the posting.

How to recognize it

A request returns 428 Precondition Required with a JSON body:
A cookie named sec_cpt arrives with it. Its value contains ~1~ while the challenge is open. Some sites serve the challenge inside an HTML page instead, as an element with provider="adaptive" and a challenge="…" attribute holding the same JSON, base64-encoded. Decode it and continue the same way. The provider field tells you which kind you have:

The flow

1

Keep everything from the 428

Save the JSON body and the sec_cpt cookie. Every field goes to Roolink, and the cookie is part of the puzzle.
2

Ask Roolink for the answers

Call /sec-cpt with the challenge fields and the sec_cpt cookie value. Roolink returns the token and an array of answers.
3

Wait

The challenge carries a wait, chlg_duration, in seconds. Submitting before it has passed does not get you through any sooner: Akamai holds the verdict until the duration is up, so wait the full duration after receiving the challenge, then submit. Roolink does not wait for you. Adaptive escalation rounds carry a timeout in milliseconds instead; wait that long.
4

Submit the answers

Post the token and answers as JSON to the site’s verify endpoint, with the provider from the challenge:
For crypto, one round is all there is: a success response means the puzzle is cleared and you continue to the next step. For adaptive, three things can come back:
  • {"success": false}: the answers were rejected. Stop and check the wait and the cookie.
  • A new challenge with a fresh token, timestamp, nonce and difficulty: Akamai is escalating. Repeat from step 2 with the new values. Five rounds is the practical ceiling.
  • A body with no token: the puzzle is cleared. Continue.
5

Finish the clearance

Request GET /_sec/cp_challenge/verify through the same session, with whatever query string the browser used in your powhttp recording. This is the step that actually upgrades _abck. Afterwards the sec_cpt cookie contains ~3~; ~1~ and ~2~ mean the challenge is still open.
6

Tell the sensor about it

For the rest of the session, set sec_cpt: true on your /sensor calls. crypto needs nothing else. For adaptive, also post a sensor for the challenge page itself before the first submission and between rounds: use the challenge page’s URL as url, keep stepper on, and turn keyboard on.

Request fields

Troubleshooting

Either you submitted before the wait elapsed, or the sec_cpt cookie you sent to Roolink is not the one the site holds. Read it from the jar immediately before each /sec-cpt call.
Make sure you replace all four of token, timestamp, nonce and difficulty from each new challenge. Reusing any of them restarts the escalation.
The final GET /_sec/cp_challenge/verify was skipped. It is required.