Skip to main content

ParallaxAPIs SDK

Project description

🚀 Parallax SDK: Datadome & Perimeterx (Python)

Powerful Python SDK for bypassing DataDome and PerimeterX anti-bot protection.

Built with both async and sync support, this SDK is perfect for Python developers who need flexibility. Whether you're building async web scrapers with aiohttp/httpx or traditional synchronous applications, this SDK has you covered.

✨ Why Choose the Python SDK?

  • 🔄 Dual Mode Support: Both async (AsyncDatadomeSDK) and sync (DatadomeSDK) clients for maximum flexibility
  • ⚡ Async-First Design: Native asyncio support with context managers for efficient concurrent operations
  • 🎯 Type Hints: Full type annotations with dataclass-based models for better IDE support
  • 🛠️ Pythonic API: Clean, intuitive interfaces following Python best practices
  • 📦 Easy Integration: Works seamlessly with popular HTTP libraries (aiohttp, httpx, requests)
  • 🔧 Flexible Configuration: Context manager support with automatic resource cleanup

📦 Installation

pip

 pip install parallax-sdk-py

uv

 uv add parallax-sdk-py

🧑‍💻 Datadome Usage

⚡ SDK Initialization

Async Client

from parallax_sdk_py.src.datadome import AsyncDatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig

# Basic configuration
cfg = SDKConfig(
    host="dd.parallaxsystems.io",
    api_key="key"
)

# Advanced configuration with timeout and proxy
cfg = SDKConfig(
    host="dd.parallaxsystems.io",
    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 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()

Sync Client

from parallax_sdk_py.src.datadome import DatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig

# Basic configuration
cfg = SDKConfig(
    host="dd.parallaxsystems.io",
    api_key="key"
)

# Advanced configuration with timeout and proxy
cfg = SDKConfig(
    host="dd.parallaxsystems.io",
    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()

🕵️‍♂️ Generate New User Agent

Async Client

from parallax_sdk_py.src.datadome import AsyncDatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGenerateUserAgent

cfg = SDKConfig(host="dd.parallaxsystems.io", api_key="key")

async with AsyncDatadomeSDK(cfg=cfg) as sdk:
    user_agent = await sdk.generate_user_agent(TaskGenerateUserAgent(
        region="pl",
        site="vinted",
        pd="optional"
    ))

    print(user_agent)
    # Output:
    # {
    #     'UserAgent': 'Mozilla/5.0 ...',
    #     'secHeader': '...',
    #     'secFullVersionList': '...',
    #     'secPlatform': '...',
    #     'secArch': '...'
    # }

Sync Client

from parallax_sdk_py.src.datadome import DatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGenerateUserAgent

cfg = SDKConfig(host="dd.parallaxsystems.io", api_key="key")

with DatadomeSDK(cfg=cfg) as sdk:
    user_agent = sdk.generate_user_agent(TaskGenerateUserAgent(
        region="pl",
        site="vinted",
        pd="optional"
    ))

    print(user_agent)
    # Output: Same as async version

🔍 Get Task Data

Async Client

from parallax_sdk_py.src.datadome import AsyncDatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig

cfg = SDKConfig(host="dd.parallaxsystems.io", api_key="key")

async with AsyncDatadomeSDK(cfg=cfg) as sdk:
    challenge_url = "https://geo.captcha-delivery.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=s&e=e"
    cookie = "cookie"
    task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)

    print(task_data, product_type)
    # Output:
    # GenerateDatadomeCookieData(
    #     cid="cookie",
    #     b="",
    #     e="e",
    #     s="s",
    #     initialCid="initialCid"
    # ), ProductType.Captcha

Sync Client

from parallax_sdk_py.src.datadome import DatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig

cfg = SDKConfig(host="dd.parallaxsystems.io", api_key="key")

with DatadomeSDK(cfg=cfg) as sdk:
    challenge_url = "https://geo.captcha-delivery.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=s&e=e"
    cookie = "cookie"
    task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)

    print(task_data, product_type)
    # Output: Same as async version

🍪 Generate Cookie

Async Client

from parallax_sdk_py.src.datadome import AsyncDatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGenerateDatadomeCookie

cfg = SDKConfig(
    host="dd.parallaxsystems.io",
    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://geo.captcha-delivery.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=s&e=e"
    cookie = "cookie"
    task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)

    cookie_response = await sdk.generate_cookie(TaskGenerateDatadomeCookie(
        site="vinted",
        region="pl",
        data=task_data,
        pd=product_type,
        proxy="http://user:pas@addr:port",  # Task-level proxy (for solving)
        proxyregion="eu"
    ))

    print(cookie_response)
    # Output:
    # {
    #     'cookie': 'datadome=cookie_value',
    #     'userAgent': 'Mozilla/5.0 ...'
    # }

Sync Client

from parallax_sdk_py.src.datadome import DatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGenerateDatadomeCookie

cfg = SDKConfig(
    host="dd.parallaxsystems.io",
    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://geo.captcha-delivery.com/captcha/?initialCid=initialCid&cid=cid&referer=referer&hash=hash&t=t&s=s&e=e"
    cookie = "cookie"
    task_data, product_type = sdk.parse_challenge_url(challenge_url, cookie)

    cookie_response = sdk.generate_cookie(TaskGenerateDatadomeCookie(
        site="vinted",
        region="pl",
        data=task_data,
        pd=product_type,
        proxy="http://user:pas@addr:port",  # Task-level proxy (for solving)
        proxyregion="eu"
    ))

    print(cookie_response)
    # Output: Same as async version

🏷️ Generate Tags Cookie

The generate_tags_cookie method is used to generate initial Datadome tags cookies (uses ProductType.Init). This is typically used for the initial page load before any challenge is encountered.

Async Client

from parallax_sdk_py.src.datadome import AsyncDatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGenerateDatadomeTagsCookie, GenerateDatadomeTagsCookieData

cfg = SDKConfig(host="dd.parallaxsystems.io", api_key="key")

async with AsyncDatadomeSDK(cfg=cfg) as sdk:
    tags_cookie_response = await sdk.generate_tags_cookie(TaskGenerateDatadomeTagsCookie(
        site="vinted",
        region="pl",
        data=GenerateDatadomeTagsCookieData(cid="your_datadome_cookie_value"),
        proxy="http://user:pas@addr:port",
        proxyregion="eu"
    ))

    print(tags_cookie_response)
    # Output:
    # {
    #     'cookie': 'datadome=tags_cookie_value',
    #     'userAgent': 'Mozilla/5.0 ...'
    # }

Sync Client

from parallax_sdk_py.src.datadome import DatadomeSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGenerateDatadomeTagsCookie, GenerateDatadomeTagsCookieData

cfg = SDKConfig(host="dd.parallaxsystems.io", api_key="key")

with DatadomeSDK(cfg=cfg) as sdk:
    tags_cookie_response = sdk.generate_tags_cookie(TaskGenerateDatadomeTagsCookie(
        site="vinted",
        region="pl",
        data=GenerateDatadomeTagsCookieData(cid="your_datadome_cookie_value"),
        proxy="http://user:pas@addr:port",
        proxyregion="eu"
    ))

    print(tags_cookie_response)
    # Output: Same as async version

🛡️ Perimeterx Usage

⚡ SDK Initialization

Async Client

from parallax_sdk_py.src.perimeterx import AsyncPerimeterxSDK
from parallax_sdk_py.src.sdk import SDKConfig

# Basic configuration
cfg = SDKConfig(
    host="api.parallaxsystems.io",
    api_key="key"
)

# Advanced configuration with timeout and proxy
cfg = SDKConfig(
    host="api.parallaxsystems.io",
    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()

Sync Client

from parallax_sdk_py.src.perimeterx import PerimeterxSDK
from parallax_sdk_py.src.sdk import SDKConfig

# Basic configuration
cfg = SDKConfig(
    host="api.parallaxsystems.io",
    api_key="key"
)

# Advanced configuration with timeout and proxy
cfg = SDKConfig(
    host="api.parallaxsystems.io",
    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()

🍪 Generate PX Cookie

Async Client

from parallax_sdk_py.src.perimeterx import AsyncPerimeterxSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGeneratePXCookies, TaskGenerateHoldCaptcha

cfg = SDKConfig(
    host="api.parallaxsystems.io",
    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="stockx"
    ))

    print(result)
    # Output:
    # {
    #     'cookie': '_px3=d3sswjaltwxgAd...',
    #     'vid': '514d7e11-6962-11f0-810f-88cc16043287',
    #     'cts': '514d8e28-6962-11f0-810f-51b6xf2786b0',
    #     'isFlagged': False,
    #     'isMaybeFlagged': True,
    #     'UserAgent': 'Mozilla/5.0 ...',
    #     'data': '==WlrBti6vpO6rshP1CFtBsiocoO8...'
    # }

    hold_captcha_result = await sdk.generate_hold_captcha(TaskGenerateHoldCaptcha(
        proxy="http://user:pas@addr:port",
        proxyregion="eu",
        region="com",
        site="stockx",
        data=result['data'],
        POW_PRO=None
    ))

    print(hold_captcha_result)
    # Output:
    # {
    #     'cookie': '_px3=d3sswjaltwxgAd...',
    #     'vid': '514d7e11-6962-11f0-810f-88cc16043287',
    #     'cts': '514d8e28-6962-11f0-810f-51b6xf2786b0',
    #     'isFlagged': False,
    #     'isMaybeFlagged': True,
    #     'UserAgent': 'Mozilla/5.0 ...',
    #     'data': '==WlrBti6vpO6rshP1CFtBsiocoO8...',
    #     'flaggedPOW': False
    # }

Sync Client

from parallax_sdk_py.src.perimeterx import PerimeterxSDK
from parallax_sdk_py.src.sdk import SDKConfig
from parallax_sdk_py.src.tasks import TaskGeneratePXCookies, TaskGenerateHoldCaptcha

cfg = SDKConfig(
    host="api.parallaxsystems.io",
    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="stockx"
    ))

    print(result)
    # Output: Same as async version

    hold_captcha_result = sdk.generate_hold_captcha(TaskGenerateHoldCaptcha(
        proxy="http://user:pas@addr:port",
        proxyregion="eu",
        region="com",
        site="stockx",
        data=result['data'],
        POW_PRO=None
    ))

    print(hold_captcha_result)
    # Output: Same as async version

📚 Documentation & Help


📝 License

MIT


🔑 Keywords

DataDome bypassPerimeterX bypassAnti-bot bypassBot detection bypassCAPTCHA solverCookie generatorPython web scrapingPython bot automationAsync Python anti-botDataDome Python SDKPerimeterX Python SDKHeadless browser alternativeRequest-based bypassPython automationWeb scraping PythonBot mitigation bypassSensor data generationChallenge solverasyncio anti-botpip anti-bot

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

parallaxapis_sdk_py-1.0.1.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

parallaxapis_sdk_py-1.0.1-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file parallaxapis_sdk_py-1.0.1.tar.gz.

File metadata

  • Download URL: parallaxapis_sdk_py-1.0.1.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for parallaxapis_sdk_py-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ed1f7243a3bb624acc0e209ccc44f0439da9a16f4aef6027e2ba13ec5b8f8324
MD5 266069e797ac6a1a19fea430288c86d3
BLAKE2b-256 45df208d087d5dfcc50ffc6a41cfcd30199a155277c13bdd380fa919ceb94b97

See more details on using hashes here.

File details

Details for the file parallaxapis_sdk_py-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for parallaxapis_sdk_py-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b29ffe8d5ddb79d780300761a5301bd374b5a863a2e6ef3a5ffb3cf56395bf4a
MD5 6f349af64d96855da769f685c8f01893
BLAKE2b-256 8b2788b2e6bb3497c41aea25ea3c98ec210fab832f3c4842fe9a403e544e50bd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page