Python SDK for bypassing DataDome and PerimeterX anti-bot protection.
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
Get started with ParallaxAPIs SDK's in under 5 minutes:
- Join our Discord - Connect with our community
- Create a ticket - Request your API key
- Get your free trial - Start testing immediately
- Install the SDK - Choose your preferred language
- Solve all anti-bots in seconds - Start bypassing DataDome, PerimeterX & more
pip install parallaxapis-sdk-py uv add parallaxapis-sdk-pyfrom 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
pass
# Option 2: Manual close - remember to call aclose()
sdk = AsyncDatadomeSDK(cfg=cfg)
try:
# Your code here
pass
finally:
await sdk.aclose()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
pass
# Option 2: Manual close - call close() when done
sdk = DatadomeSDK(cfg=cfg)
try:
# Your code here
pass
finally:
sdk.close()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)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)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)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)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)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)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)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)from parallaxapis_sdk_py.datadome import AsyncDatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeTagsCookie, GenerateDatadomeTagsCookieData
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",
data=GenerateDatadomeTagsCookieData(cid="your_datadome_cookie_value"),
proxy="http://user:pas@addr:port",
proxyregion="eu"
))
print(tags_cookie_response)from parallaxapis_sdk_py.datadome import DatadomeSDK
from parallaxapis_sdk_py.sdk import SDKConfig
from parallaxapis_sdk_py.tasks import TaskGenerateDatadomeTagsCookie, GenerateDatadomeTagsCookieData
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",
data=GenerateDatadomeTagsCookieData(cid="your_datadome_cookie_value"),
proxy="http://user:pas@addr:port",
proxyregion="eu"
))
print(tags_cookie_response)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)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)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
pass
# Option 2: Manual close - remember to call aclose()
sdk = AsyncPerimeterxSDK(cfg=cfg)
try:
# Your code here
pass
finally:
await sdk.aclose()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
pass
# Option 2: Manual close - call close() when done
sdk = PerimeterxSDK(cfg=cfg)
try:
# Your code here
pass
finally:
sdk.close()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)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)- Full API docs & support: Discord
Got feedback or found a bug? Feel free to open an issue or send us a pull request!
Unlock enterprise-grade performance with custom solutions, expanded limits, and expert support. Contact us to learn more.
MIT
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
