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.2.tar.gz (7.1 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.2-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: parallaxapis_sdk_py-1.0.2.tar.gz
  • Upload date:
  • Size: 7.1 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.2.tar.gz
Algorithm Hash digest
SHA256 23a0200b0e999ca0260d67ac212d99e1e7d0c0c3059d39360186bc81e49fe0ca
MD5 cf4dd47b2965d12ed4d3e7da229e636e
BLAKE2b-256 c2bfb9bfcb96dfcac6157856a92ec489881c679d61e3b1267d02c2ae48af535d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for parallaxapis_sdk_py-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 90b856dfed2d916d06ff5e422290f7eaf1976dbfdb2123727f33af99f0de5ef0
MD5 5f265873af7216817577b9721cdd185e
BLAKE2b-256 0a94b59fe6fc86de75187396dedd2d531b2bb6899a333301ec5fabb63084bb5d

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