Resolving PerimeterX/HUMAN 403 Errors
PerimeterX (now HUMAN) uses behavioral analysis with "Press & Hold" challenges to detect bots. When requests lack valid _px3 tokens, servers return 403 errors. MeshPrivacy resolves these challenges by simulating valid behavioral patterns and generating short-lived tokens.
Error Codes
| Code | Meaning | Resolution |
|---|---|---|
| 403 | Bot detected, access denied | Generate valid _px3 token via API |
| 200 | "Press & Hold" challenge page | Complete challenge via API |
Token TTL: approximately 60 seconds. Tokens must be used quickly after generation.
Real-time API status: trust.meshprivacy.com
Cookies & Detection
_px - Primary detection cookie_px2 - Extended session data_px3 - Challenge token (~60s)_pxhd - Device fingerprint hash_pxvid - Video frame analysisService Variants
PerimeterX/HUMAN ships two distinct service IDs in MeshPrivacy. Pick the one matching the challenge type the target serves.
perimeterx_invisiblePrimary
Invisible behavioral challenge. Collects fingerprint data and submits for verification without visible user interaction.
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Target URL protected by PerimeterX/HUMAN |
app_id | string | Yes | PX App ID (starts with PX) |
script_url | string | Yes | PerimeterX script URL (init.js) |
proxy_config | string | Yes | Proxy in http://user:pass@ip:port format |
user_agent | string | No | Custom user agent |
// Submit PerimeterX Invisible task
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: 'perimeterx_invisible',
url: 'https://target-site.com/', // required
app_id: 'PX12345678', // required - starts with PX
script_url: 'https://client.px-cloud.net/PX.../init.js', // required - PerimeterX init.js
proxy_config: 'http://user:pass@ip:port', // required
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 { cookies } = await result.json();
// IMPORTANT: Use cookies._px3 immediately - expires in ~60 secondsperimeterx_hold
"Press & Hold" interactive challenge. Simulates the hold-button interaction pattern required by HUMAN's challenge page.
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Target URL |
app_id | string | No | PX App ID (starts with PX) |
vid | string | No | Visitor ID from _pxvid cookie |
uuid | string | No | UUID from PerimeterX session |
pxhd | string | No | pxhd cookie value |
captcha_url | string | No | Captcha challenge URL |
proxy_config | string | No | |
user_agent | string | No |
// Submit PerimeterX "Press & Hold" task
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: 'perimeterx_hold',
url: 'https://target-site.com/', // required
app_id: 'PX12345678', // optional
vid: '', // optional - _pxvid cookie
uuid: '', // optional - PX session UUID
pxhd: '', // optional - pxhd cookie
captcha_url: '', // optional - challenge URL
proxy_config: 'http://user:pass@ip:port', // optional
user_agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'// optional
})
});FAQ
_px3 token has a ~60 second TTL by design to prevent token sharing and replay attacks. Plan your request flow to use tokens immediately after generation.