How to recognize it
A request returns428 Precondition Required with a JSON body:
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,nonceanddifficulty: 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
The Roolink call times out
The Roolink call times out
Very high difficulty takes longer to solve. Retry once. If it repeats, the challenge is escalating against a flagged session; start a fresh session.
Every submission answers success false
Every submission answers success false
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.The difficulty never drops and the rounds keep coming
The difficulty never drops and the rounds keep coming
Make sure you replace all four of
token, timestamp, nonce and difficulty from each new challenge. Reusing any of them restarts the escalation.Cleared, but _abck is still ~-1~
Cleared, but _abck is still ~-1~
The final
GET /_sec/cp_challenge/verify was skipped. It is required.