ParallaxAPIs SDK - Python Library for Bot Protection Bypass (Datadome & PerimeterX)
Python SDK for bypassing DataDome and PerimeterX anti-bot protection.
📖 Overview
ParallaxAPIs provides a request-based solution for bypassing DataDome and PerimeterX anti-bot systems. Instead of relying on slow, resource-heavy browser automation, our API generates valid cookies and tokens in 200-400ms through direct HTTP requests.
What We Solve:
- ✅ DataDome - Slider captchas, interstitial pages, cookie generation, tags payload
- ✅ PerimeterX - Cookie generation (_px3), challenge solver, vid & cts tokens
Key Benefits:
- ⚡ Lightning Fast - 200-400ms response times vs 5-10+ seconds for browsers
- 🔧 Simple Integration - Clean API with comprehensive documentation, no browser management required
- 🚀 Highly Scalable - Handle thousands of concurrent requests with minimal resources
- ⚙️ Flexible Configuration - Custom timeouts, HTTP clients, and proxy settings
- 💰 Cost Effective - Lightweight infrastructure, minimal proxy usage
- 🔄 Always Updated - We handle all reverse engineering and updates for you
🚀 Quick Start
Get started with ParallaxAPIs SDK's in under 5 minutes:
- Join our Discord - Connect with our community
- Get your free trial - Start testing immediately
- Install the SDK - Choose your preferred language
- Solve all antibots in seconds - Start bypassing DataDome, PerimeterX & more
📦 Installation
pip
pip install parallaxapis-sdk-py
uv
uv add parallaxapis-sdk-py
🧑💻 Datadome Usage
⚡ SDK Initialization
Async Client
from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
# Basic configuration
cfg = SDKConfig(
host="host.com", # optional
api_key="Key"
)
# Advanced configuration with timeout and proxy
cfg = SDKConfig(
host="host.com", # optional
api_key="Key",
timeout=60, # Optional: request timeout in seconds (default: 30)
proxy="http://user:pass@proxy.example.com:8080", # Optional: proxy URL
insecure=True # Optional: configures a client to skip SSL certificate verification
)
# Option 1: Context manager (Recommended) - automatic cleanup
async with AsyncDatadomeSDK(cfg=cfg) as sdk:
# Your code here
usage = await sdk.check_usage("site")
pass
# Option 2: Manual close - remember to call aclose()
sdk = AsyncDatadomeSDK(cfg=cfg)
try:
# Your code here
pass
finally:
await sdk.aclose()
Sync Client
from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
# Basic configuration
cfg = SDKConfig(
host="host.com", # optional
api_key="Key"
)
# Advanced configuration with timeout and proxy
cfg = SDKConfig(
host="host.com", # optional
api_key="Key",
timeout=60, # Optional: request timeout in seconds (default: 30)
proxy="http://user:pass@proxy.example.com:8080" # Optional: proxy URL
)
# Option 1: Context manager - automatic cleanup
with DatadomeSDK(cfg=cfg) as sdk:
# Your code here
usage = sdk.check_usage("site")
pass
# Option 2: Manual close - call close() when done
sdk = DatadomeSDK(cfg=cfg)
try:
# Your code here
pass
finally:
sdk.close()
🕵️♂️ Generate New User Agent
Async Client
from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateUserAgent
cfg = SDKConfig(host="host.com", api_key="Key")
async with AsyncDatadomeSDK(cfg=cfg) as sdk:
user_agent = await sdk.generate_user_agent(TaskGenerateUserAgent(
region="com",
site="site",
pd="optional"
))
print(user_agent)
Sync Client
from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateUserAgent
cfg = SDKConfig(host="host.com", api_key="Key")
with DatadomeSDK(cfg=cfg) as sdk:
user_agent = sdk.generate_user_agent(TaskGenerateUserAgent(
region="com",
site="site",
pd="optional"
))
print(user_agent)
🔍 Get Task Data
Async Client
from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
cfg = SDKConfig(host="host.com", api_key="Key")
async with AsyncDatadomeSDK(cfg=cfg) as sdk:
challenge_url = "https://www.example.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=1&e=e"
cookie = "cookie_value"
task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)
print(task_data, product_type)
Sync Client
from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
cfg = SDKConfig(host="host.com", api_key="Key")
with DatadomeSDK(cfg=cfg) as sdk:
challenge_url = "https://www.example.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=s&e=e"
cookie = "cookie_value"
task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)
print(task_data, product_type)
📄 Parse Challenge HTML
Async Client
from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
cfg = SDKConfig(host="host.com", api_key="Key")
async with AsyncDatadomeSDK(cfg=cfg) as sdk:
# HTML body containing dd object
html_body = "<html><script>dd={'b':'example'}</script></html>"
prev_cookie = "cookie_value"
# Parse HTML challenge
task_data, product_type = sdk.parse_challenge_html(
html_body=html_body,
datadome_cookie=prev_cookie
)
print(task_data, product_type)
Sync Client
from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
cfg = SDKConfig(host="host.com", api_key="Key")
with DatadomeSDK(cfg=cfg) as sdk:
# HTML body containing dd object
html_body = "<html><script>dd={'t':'it','s':123456,'e':'example','cid':'initialCid','b':'optional'}</script></html>"
prev_cookie = "cookie_value"
# Parse HTML challenge
task_data, product_type = sdk.parse_challenge_html(
html_body=html_body,
datadome_cookie=prev_cookie
)
print(task_data, product_type)
🍪 Generate Cookie
Async Client
from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeCookie
cfg = SDKConfig(
host="host.com", # Optional
api_key="Key",
timeout=60, # Optional: custom timeout
proxy="http://user:pass@proxy.example.com:8080" # Optional: SDK-level proxy
)
async with AsyncDatadomeSDK(cfg=cfg) as sdk:
challenge_url = "https://www.example.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=s&e=e"
cookie = "cookie_value"
task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)
cookie_response = await sdk.generate_cookie(TaskGenerateDatadomeCookie(
site="site",
region="com",
data=task_data,
pd=product_type,
proxy="http://user:pas@addr:port", # Task-level proxy (for solving)
proxyregion="eu"
))
print(cookie_response)
Sync Client
from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeCookie
cfg = SDKConfig(
host="host.com", # Optional
api_key="Key",
timeout=60, # Optional: custom timeout
proxy="http://user:pass@proxy.example.com:8080" # Optional: SDK-level proxy
)
with DatadomeSDK(cfg=cfg) as sdk:
challenge_url = "https://www.example.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=s&e=e"
cookie = "cookie_value"
task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)
cookie_response = sdk.generate_cookie(TaskGenerateDatadomeCookie(
site="site",
region="com",
data=task_data,
pd=product_type,
proxy="http://user:pas@addr:port", # Task-level proxy (for solving)
proxyregion="eu"
))
print(cookie_response)
🏷️ Generate Tags Cookie
Async Client
from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeTagsCookie, TagsData
cfg = SDKConfig(host="host.com", api_key="Key")
async with AsyncDatadomeSDK(cfg=cfg) as sdk:
tags_cookie_response = await sdk.generate_tags_cookie(TaskGenerateDatadomeTagsCookie(
site="site",
region="com",
proxy="http://user:pas@addr:port",
proxyregion="eu",
data=TagsData(cid="null/old_cookie_val")
))
print(tags_cookie_response)
Sync Client
from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeTagsCookie, TagsData
cfg = SDKConfig(host="host.com", api_key="Key")
with DatadomeSDK(cfg=cfg) as sdk:
tags_cookie_response = sdk.generate_tags_cookie(TaskGenerateDatadomeTagsCookie(
site="site",
region="com",
proxy="http://user:pas@addr:port",
proxyregion="eu",
data=TagsData(cid="null/old_cookie_val")
))
print(tags_cookie_response)
🔍 Detect and Parse Challenge
Async Client
from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeCookie
cfg = SDKConfig(host="host.com", api_key="Key")
async with AsyncDatadomeSDK(cfg=cfg) as sdk:
# Response body from website (could be HTML or JSON)
response_body = "<html>...</html>"
prev_cookie = "cookie_value"
# Detect if challenge exists and parse it
is_blocked, task_data, product_type = sdk.detect_challenge_and_parse(
body=response_body,
datadome_cookie=prev_cookie
)
if is_blocked:
# Generate new cookie using the parsed data
cookie_resp = await sdk.generate_cookie(TaskGenerateDatadomeCookie(
site="site",
region="com",
data=task_data,
pd=product_type,
proxy="http://user:pass@addr:port",
proxyregion="eu"
))
print(cookie_resp)
Sync Client
from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeCookie
cfg = SDKConfig(host="host.com", api_key="Key")
with DatadomeSDK(cfg=cfg) as sdk:
# Response body from website (could be HTML or JSON)
response_body = "<html>...</html>"
prev_cookie = "cookie_value"
# Detect if challenge exists and parse it
is_blocked, task_data, product_type = sdk.detect_challenge_and_parse(
body=response_body,
datadome_cookie=prev_cookie
)
if is_blocked:
# Generate new cookie using the parsed data
cookie_resp = sdk.generate_cookie(TaskGenerateDatadomeCookie(
site="site",
region="com",
data=task_data,
pd=product_type,
proxy="http://user:pass@addr:port",
proxyregion="eu"
))
print(cookie_resp)
🛡️ Perimeterx Usage
⚡ SDK Initialization
Async Client
from parallaxapis_sdk_py.perimeterx import AsyncPerimeterxSDK
from parallaxapis_sdk_py.sdk import SDKConfig
# Basic configuration
cfg = SDKConfig(
host="host.com",
api_key="Key"
)
# Advanced configuration with timeout and proxy
cfg = SDKConfig(
host="host.com",
api_key="Key",
timeout=60, # Optional: request timeout in seconds (default: 30)
proxy="http://user:pass@proxy.example.com:8080" # Optional: proxy URL
)
# Option 1: Context manager (Recommended) - automatic cleanup
async with AsyncPerimeterxSDK(cfg=cfg) as sdk:
# Your code here
usage = await sdk.check_usage("site")
pass
# Option 2: Manual close - remember to call aclose()
sdk = AsyncPerimeterxSDK(cfg=cfg)
try:
# Your code here
pass
finally:
await sdk.aclose()
Sync Client
from parallaxapis_sdk_py.perimeterx import PerimeterxSDK
from parallaxapis_sdk_py.sdk import SDKConfig
# Basic configuration
cfg = SDKConfig(
host="host.com",
api_key="Key"
)
# Advanced configuration with timeout and proxy
cfg = SDKConfig(
host="host.com",
api_key="Key",
timeout=60, # Optional: request timeout in seconds (default: 30)
proxy="http://user:pass@proxy.example.com:8080" # Optional: proxy URL
)
# Option 1: Context manager - automatic cleanup
with PerimeterxSDK(cfg=cfg) as sdk:
# Your code here
usage = sdk.check_usage("site")
pass
# Option 2: Manual close - call close() when done
sdk = PerimeterxSDK(cfg=cfg)
try:
# Your code here
pass
finally:
sdk.close()
🍪 Generate PX Cookie
Async Client
from parallaxapis_sdk_py.perimeterx import AsyncPerimeterxSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGeneratePXCookies, TaskGenerateHoldCaptcha
cfg = SDKConfig(
host="host.com",
api_key="Key",
timeout=60 # Optional: custom timeout
)
async with AsyncPerimeterxSDK(cfg=cfg) as sdk:
result = await sdk.generate_cookies(TaskGeneratePXCookies(
proxy="http://user:pas@addr:port",
proxyregion="eu",
region="com",
site="site"
))
print(result)
hold_captcha_result = await sdk.generate_hold_captcha(TaskGenerateHoldCaptcha(
proxy="http://user:pas@addr:port",
proxyregion="eu",
region="com",
site="site",
data=result.data,
POW_PRO=None
))
print(hold_captcha_result)
Sync Client
from parallaxapis_sdk_py.perimeterx import PerimeterxSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGeneratePXCookies, TaskGenerateHoldCaptcha
cfg = SDKConfig(
host="host.com",
api_key="Key",
timeout=60 # Optional: custom timeout
)
with PerimeterxSDK(cfg=cfg) as sdk:
result = sdk.generate_cookies(TaskGeneratePXCookies(
proxy="http://user:pas@addr:port",
proxyregion="eu",
region="com",
site="site"
))
print(result)
hold_captcha_result = sdk.generate_hold_captcha(TaskGenerateHoldCaptcha(
proxy="http://user:pas@addr:port",
proxyregion="eu",
region="com",
site="site",
data=result.data,
POW_PRO=None
))
print(hold_captcha_result)
📚 Documentation & Help
- Full API docs & support: Discord
🌟 Contributing
Got feedback or found a bug? Feel free to open an issue or send us a pull request!
🏢 Enterprise
Unlock enterprise-grade performance with custom solutions, expanded limits, and expert support. Contact us to learn more.
📝 License
MIT
🔑 Keywords
DataDome bypass • PerimeterX bypass • Anti-bot bypass • Bot detection bypass • CAPTCHA solver • Cookie generator • Python web scraping • Python bot automation • Async Python anti-bot • DataDome Python SDK • PerimeterX Python SDK • Headless browser alternative • Request-based bypass • Python automation • Web scraping Python • Bot mitigation bypass • Sensor data generation • Challenge solver • asyncio anti-bot • pip anti-bot
Metadata
Release files for parallaxapis-sdk-py 1.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| parallaxapis_sdk_py-1.2.5.tar.gz | 9.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| parallaxapis_sdk_py-1.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.5 kB
Release files / parallaxapis_sdk_py-1.2.5.tar.gz
| Download URL | parallaxapis_sdk_py-1.2.5.tar.gz |
|---|---|
| Size | 9.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1184c0433cb521f188e5efc90ebda26fba6335c42a73297a2403d60e5d51aa0e
|
|
BLAKE2b-256 checksum How to use checksums |
4bfebc241443387489d318dc48b0cfb77cd71d3ef339030363cef927af1547d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.8
|
Release files / parallaxapis_sdk_py-1.2.5-py3-none-any.whl
| Download URL | parallaxapis_sdk_py-1.2.5-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c2ac860bd1699b5b992f46731e5f234cbdcc74b4ee3d65d7ca5571e232e5eeec
|
|
BLAKE2b-256 checksum How to use checksums |
3c4e559b5bfc09f2082fd4f0b1ca278d9d966930dd4ca14a9b63c672ef7e7280
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.8
|