Looking for the broader Akamai _abck flow? See /docs/akamai. SecCPT is the proof-of-work step on top.
Resolving Akamai SecCPT 428 Challenges
Akamai SecCPT is the proof-of-work challenge served on high-security operations such as login or checkout. When triggered, the server returns HTTP 428 with a challenge payload (often base64 or hex) in the response. MeshPrivacy computes the proof and returns a valid sec_cpt token to retry the original request.
Service Schema
| Field | Type | Required | Description |
|---|---|---|---|
challenge | string | Yes | Challenge payload (base64/hex) from sec-cpt headers |
url | string | No | Target URL |
script_url | string | No | SecCPT script URL |
challenge_data | object | No | JSON with nonce, difficulty, token, count, timestamp |
proxy_config | string | No | Proxy in http://user:pass@ip:port format |
user_agent | string | No | Custom user agent |
Service ID: sec_cpt · Status: Stable
Where to find the challenge
When the server returns 428, look for headers prefixed with sec-cpt (e.g. sec-cpt-challenge) or a x-akamai-sitekey-style payload in the body. Pass the raw value as challenge. If the server returns parsed nonce/difficulty/token JSON instead, also pass it as challenge_data.
Integration Example
sec-cpt.js
// Submit Akamai SecCPT task to MeshPrivacy
const response = await fetch('https://api.meshprivacy.com/v1/tasks/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },
body: JSON.stringify({
service: 'sec_cpt',
challenge: '<base64-or-hex-payload-from-sec-cpt-headers>', // required
url: 'https://target-site.com/', // optional
script_url: 'https://target-site.com/akam/sec-cpt.js', // optional
challenge_data: { // optional - challenge JSON
nonce: '...',
difficulty: 16,
token: '...',
count: 1,
timestamp: 1715500000
},
proxy_config: 'http://user:pass@ip:port', // optional
user_agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...' // optional
})
});
const { task_id } = await response.json();
const result = await fetch(`https://api.meshprivacy.com/v1/tasks/result/${task_id}`, {
headers: { 'X-API-Key': API_KEY }
});
const { sec_cpt_token, cookies } = await result.json();
// Send sec_cpt_token in retry of the original requestFAQ
Approximately 5 minutes. The token must be replayed against the original request before expiry.
