Skip to main content

Parallax Logo ParallaxAPIs SDK - Python Library for Bot Protection Bypass (Datadome & PerimeterX)

license MIT Python downloads

Discord

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:

  1. Join our Discord - Connect with our community
  2. Get your free trial - Start testing immediately
  3. Install the SDK - Choose your preferred language
  4. Solve all antibots in seconds - Start bypassing DataDome, PerimeterX & more

📦 Installation

pip

 pip install parallaxapis-sdk-py

uv

 uv add parallaxapis-sdk-py

Pip Install Demo


🧑‍💻 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)

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)

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()

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

🌟 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)

Source distribution for parallaxapis-sdk-py 1.2.5
File Size Uploaded
parallaxapis_sdk_py-1.2.5.tar.gz 9.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for parallaxapis-sdk-py 1.2.5
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.2.5 This release

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page