Skip to main content

Official Python SDK for PassXAPI — solve reCAPTCHA, hCaptcha, Cloudflare, Akamai, PerimeterX, Kasada, DataDome, Shape and 27 anti-bot types

Project description

PassXAPI Python SDK

Official Python SDK for PassXAPI captcha & anti-bot solving service

PyPI Python License Docs

Python · Node.js · API Docs · Pricing · 中文文档


Monthly Unlimited Plan

Unlimited requests for ALL 27 captcha types. View plans →


Installation

pip install passxapi

Requires Python 3.7+. Only dependency: requests.

Quick Start

  1. Sign up at www.passxapi.com — free, no credit card
  2. Create API key in your dashboard
  3. Install: pip install passxapi
from passxapi import PassXAPI

client = PassXAPI("YOUR_API_KEY")

result = client.cloudflare_turnstile(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
    site_key="0x4AAAAAAA...",
)

print(result["token"])       # Verification token
print(result["cookies"])     # {"cf_clearance": "..."}
print(result["ua"])          # User-Agent string to use

Configuration

client = PassXAPI(
    api_key="YOUR_API_KEY",
    polling_interval=1.5,  # Seconds between polls (default: 1.5)
    timeout=120.0,         # Max wait in seconds (default: 120)
)

Supported CAPTCHA Types

Type Method Avg. Time Sites
reCAPTCHA v3 recaptcha_v3() 8-15s Google, YouTube, LinkedIn, Steam, PayPal
hCaptcha hcaptcha() 5-12s Cloudflare, Discord, Epic Games, Coinbase
hCaptcha Pro hcaptcha_pro() 8-15s Cloudflare Enterprise, Binance, Kraken
Cloudflare Turnstile cloudflare_turnstile() 3-8s DHL, Notion, Canva, Vercel, GitLab, Figma
Cloudflare WAF cloudflare_waf() 5-10s Shopify, Medium, Discord, OpenAI
Akamai Bot Manager akamai() 5-15s Nike, Adidas, United Airlines, Walmart
Akamai sec_cpt akamai_sec_cpt() 5-15s Nike, Ticketmaster, Best Buy, Nordstrom
PerimeterX Silent perimeterx_silent() 5-12s Zillow, Craigslist, Indeed, StockX
PerimeterX Challenge perimeterx_challenge() 8-15s Zillow, Wayfair, Glassdoor, Redfin
Kasada ct kasada_ct() 5-12s Kick, bet365, DraftKings, PlayStation
Kasada cd kasada_cd() 5-12s Kick, bet365, FanDuel, Canada Goose
Kasada TL Payload kasada_tl_payload() 5-10s Kick, bet365, DraftKings, Twitch
DataDome Silent datadome_silent() 5-12s Reddit, SoundCloud, TripAdvisor, Vinted
DataDome Invisible datadome_invisible() 5-12s Reddit, Rakuten, AllTrails, Foot Locker EU
DataDome Slider datadome_slider() 5-15s Reddit, Leboncoin, Hermes, TripAdvisor
Shape Security shape() 8-20s Southwest Airlines, Starbucks, Citibank
FunCaptcha funcaptcha() 8-15s Microsoft, Roblox, GitHub, Snapchat, X
AWS WAF aws() 5-12s Amazon, Twitch, IMDb, Audible, Zappos
Vercel Challenge vercel_challenge() 3-8s TikTok Web, Hashnode, Cal.com, Loom
Castle castle() 5-10s Carta, Plaid, Mercury, Brex, Notion
Reese84 reese84() 5-15s Glassdoor, Western Union, HSBC, Siemens
UTMVC utmvc() 5-15s Glassdoor, Indeed, Kroger, AutoTrader
Sbsd sbsd() 5-12s Ticketmaster, StubHub, SeatGeek, AXS
CaptchaFox captchafox() 3-8s Zalando, Otto, Booking.com, BMW
Forter forter() 5-12s Nordstrom, Instacart, Sephora, Uber Eats
ThreatMetrix threatmetrix() 5-15s Chase, Wells Fargo, PayPal, Robinhood
TLS Forward tls_forward() 3-8s Any site with JA3/JA4 fingerprint detection

27 types supported · Failed requests are never charged · Avg success rate 99.5%+


Why PassXAPI?

PassXAPI 2Captcha CapSolver
Price per solve $0.001 $0.003 $0.002
Captcha types 27 ~15 ~12
Akamai / PerimeterX / Kasada
Shape / Forter / ThreatMetrix
TLS fingerprint forwarding
Webhook callback
Failed = free

Table of Contents


Solve CAPTCHA

All methods follow the same pattern: submit → poll → return result. The SDK handles polling automatically.

  • Proxy required for all methods. Format: http://user:pass@ip:port (residential recommended)
  • Result is a dict containing token, and optionally cookies and ua

reCAPTCHA v3

Google, YouTube, LinkedIn, Steam, PayPal, Binance · API docs →

result = client.recaptcha_v3(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
    site_key="6Le-wvkSAAAA...",
    action="login",          # Action parameter
    enterprise=False,        # Set True for Enterprise
    title="Page Title",      # Optional
)
Parameter Required Description
target_url Page URL with reCAPTCHA
proxy HTTP proxy string
site_key Google site key
action Action parameter (default: "verify")
enterprise Enterprise version (default: False)
title Page title

hCaptcha

Cloudflare, Discord, Epic Games, Coinbase, NordVPN · API docs →

result = client.hcaptcha(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
    site_key="SITE_KEY",
)
Parameter Required Description
target_url Page URL
proxy HTTP proxy
site_key hCaptcha site key

hCaptcha Pro

Cloudflare Enterprise, Coinbase, Binance, Kraken · API docs →

result = client.hcaptcha_pro(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
)

Cloudflare Turnstile

DHL, Notion, Canva, Vercel, GitLab, Figma, HubSpot · API docs →

result = client.cloudflare_turnstile(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
    site_key="0x4AAAAAAA...",
)
Parameter Required Description
target_url Page URL
proxy HTTP proxy
site_key Turnstile site key

Cloudflare WAF

Shopify, Medium, Discord, OpenAI, Notion, Figma · API docs →

result = client.cloudflare_waf(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
    target_method="GET",     # HTTP method (GET/POST)
)

Akamai

Nike, Adidas, Delta Airlines, Walmart, Costco, Airbnb · API docs →

result = client.akamai(
    target_url="https://nike.com",
    proxy="http://user:pass@ip:port",
    akamai_js_url="https://nike.com/_sec/cp_challenge/ak-challenge-xxx.js",
    page_fp="abc123",        # Optional: page fingerprint
)
Parameter Required Description
target_url Page URL
proxy HTTP proxy
akamai_js_url Akamai challenge JS URL
page_fp Page fingerprint value

Akamai sec_cpt

Nike, Adidas, Ticketmaster, Best Buy, Nordstrom · API docs →

result = client.akamai_sec_cpt(
    target_url="https://nike.com",
    proxy="http://user:pass@ip:port",
    sec_cpt="challenge_token",
    sec_json={
        "nonce": "...",
        "difficulty": 5,
        "token": "...",
        "count": 0,
        "timestamp": 1234567890,
    },
)

PerimeterX

Zillow, Craigslist, Indeed, StockX, Wayfair, Reddit · API docs →

Silent (no visual challenge):

result = client.perimeterx_silent(
    target_url="https://zillow.com",
    proxy="http://user:pass@ip:port",
    perimeterx_js_url="https://client.px-cdn.net/PX.../main.min.js",
    pxAppId="PX...",
)

Interactive challenge:

result = client.perimeterx_challenge(
    target_url="https://zillow.com",
    proxy="http://user:pass@ip:port",
    pxvid="...",
    pxuuid="...",
    pxAppId="PX...",
    perimeterx_js_url="...",
    captcha_js_url="...",
    init_cookies={"pxhd": "..."},
)

Kasada

Kick, bet365, DraftKings, FanDuel, PlayStation, Twitch · API docs →

ct:

result = client.kasada_ct(
    target_url="https://kick.com",
    proxy="http://user:pass@ip:port",
    protected_api_domain="kick.com",
    kasada_js_domain="k.tl",
)

cd (advanced):

result = client.kasada_cd(
    target_url="https://kick.com",
    proxy="http://user:pass@ip:port",
    ct="...", st="...", fc="...", site="kick.com",
)

TL Payload:

result = client.kasada_tl_payload(
    target_url="https://kick.com",
    proxy="http://user:pass@ip:port",
)

DataDome

Reddit, SoundCloud, Rakuten, TripAdvisor, Vinted, Hermes · API docs →

Silent:

result = client.datadome_silent(
    target_url="https://reddit.com",
    proxy="http://user:pass@ip:port",
    target_method="GET",
)

Invisible:

result = client.datadome_invisible(
    target_url="https://reddit.com",
    proxy="http://user:pass@ip:port",
    datadome_js_url="https://js.datadome.co/tags.js",
    ddjskey="ABCDEF123",
    ddoptions='{"ajaxListenerPath":"..."}',
)

Slider:

result = client.datadome_slider(
    target_url="https://reddit.com",
    proxy="http://user:pass@ip:port",
    target_method="GET",
    init_cookies={"datadome": "..."},
)

Shape Security

Southwest Airlines, Starbucks, Citibank, Capital One, Macy's · API docs →

result = client.shape(
    target_url="https://southwest.com",
    proxy="http://user:pass@ip:port",
    target_api="https://southwest.com/api/air-booking/...",
    shape_js_url="https://southwest.com/.../shape.js",
    method="POST",
    title="Page Title",      # Optional
)

FunCaptcha

Microsoft, Roblox, GitHub, Snapchat, LinkedIn, Adobe, X · API docs →

result = client.funcaptcha(
    target_url="https://outlook.com",
    proxy="http://user:pass@ip:port",
    public_key="B7D8911C-5CC8-A9A3-...",
    custom_api_host="client-api.arkoselabs.com",  # Optional
)

AWS WAF

Amazon, Twitch, IMDb, Audible, Zappos · API docs →

result = client.aws(
    target_url="https://amazon.com",
    proxy="http://user:pass@ip:port",
    aws_js_url="https://xxx.token.awswaf.com/xxx/challenge.js",
)

Vercel Challenge

TikTok Web, Hashnode, Cal.com, Loom, Neon · API docs →

result = client.vercel_challenge(
    target_url="https://example.vercel.app",
    proxy="http://user:pass@ip:port",
)

Castle

Carta, Gusto, Plaid, Mercury, Brex, Notion · API docs →

result = client.castle(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
    config_json={"pk": "pk_xxx", "avoidCookies": False},
)
# Returns "request_token" instead of "token"

Reese84

Glassdoor, Western Union, HSBC, Singapore Airlines · API docs →

result = client.reese84(
    target_url="https://glassdoor.com",
    proxy="http://user:pass@ip:port",
    reese84_js_url="https://glassdoor.com/.../reese84.js",
)

UTMVC

Glassdoor, Indeed, Kroger, AutoTrader, TripAdvisor · API docs →

result = client.utmvc(
    target_url="https://indeed.com",
    proxy="http://user:pass@ip:port",
    utmvc_js_url="https://indeed.com/.../incapsula.js",
    incap_cookie={
        "visid_incap_xxx": "...",
        "nlbi_xxx": "...",
        "incap_ses_xxx": "...",
    },
)

Sbsd

Ticketmaster, StubHub, Vivid Seats, SeatGeek, AXS · API docs →

result = client.sbsd(
    target_url="https://ticketmaster.com",
    proxy="http://user:pass@ip:port",
    sbsd_js_url="https://ticketmaster.com/.../bot-manager.js",
    init_cookies={"bm_s": "...", "bm_sc": "..."},
)

CaptchaFox

Zalando, Otto, Booking.com, BMW, Deutsche Telekom · API docs →

result = client.captchafox(
    target_url="https://example.de",
    proxy="http://user:pass@ip:port",
    site_key="sk-xxx",
)

Forter

Nordstrom, Instacart, Sephora, Lululemon, Uber Eats · API docs →

result = client.forter(
    target_url="https://nordstrom.com",
    proxy="http://user:pass@ip:port",
    forter_js_url="https://cdn4.forter.com/xxx.js",
    site_id="xxx",
)

ThreatMetrix

Chase, Wells Fargo, Bank of America, PayPal, Robinhood · API docs →

result = client.threatmetrix(
    target_url="https://chase.com",
    proxy="http://user:pass@ip:port",
    org_id="xxx",
    page_id="xxx",
    session_id="xxx",
    custom_domain="h.online-metrix.net",
    title="Page Title",      # Optional
)

TLS Forward

Any site with JA3/JA4 fingerprint detection · API docs →

result = client.tls_forward(
    target_url="https://example.com",
    proxy="http://user:pass@ip:port",
)

Webhook Callback

Instead of polling, receive results via webhook:

task_id = client.submit(
    task_type="cloudflare_turnstile",
    proxy="http://user:pass@ip:port",
    target_url="https://example.com",
    site_key="0x4AAAAAAA...",
    callback_url="https://your-server.com/webhook",
)

Your server receives:

{
    "taskId": "abc123-def456",
    "status": "ready",
    "errorId": 0,
    "solution": {
        "token": "P0_eyJ...",
        "cookies": {"cf_clearance": "xxx"},
        "userAgent": "Mozilla/5.0..."
    }
}

Retry policy: up to 3 retries at 5s, 30s, 120s intervals if HTTP 200 is not returned.


Account & Billing

# Check balance
balance = client.get_balance()
print(f"${balance}")

# API key info (status, limits, today's spend)
info = client.get_key_info()
print(f"Key: {info['keyPrefix']}...")
print(f"Active: {info['isActive']}")
print(f"Today: ${info['todaySpent']}")
print(f"Daily limit: {info['dailySpendLimit'] or 'unlimited'}")

# Spending stats (by day, by type)
stats = client.get_spending_stats()
stats = client.get_spending_stats(queue="cloudflare_turnstile")

# Pricing (no auth required)
for p in client.get_pricing():
    print(f"{p['name']}: ${p['price_per_solve']}/solve, "
          f"~{p['avg_solve_time']}s, {p['success_rate']}%")

Error Handling

from passxapi import (
    PassXAPI,
    AuthError,
    ZeroBalanceError,
    CaptchaUnsolvableError,
    BadParametersError,
)

try:
    result = client.cloudflare_turnstile(...)
except AuthError:
    print("Invalid API key")
except ZeroBalanceError:
    print("Top up at https://www.passxapi.com/app/billing/deposit")
except CaptchaUnsolvableError:
    print("Could not solve")
except BadParametersError as e:
    print(f"Bad params: {e}")
Exception Error Code When
AuthError ERROR_AUTH Invalid API key
ZeroBalanceError ERROR_ZERO_BALANCE Insufficient balance
BadParametersError ERROR_BAD_PARAMETERS Missing or invalid params
CaptchaUnsolvableError ERROR_CAPTCHA_UNSOLVABLE Failed to solve / timeout
TaskNotFoundError ERROR_NO_SUCH_CAPCHA_ID Task ID not found
RateLimitError ERROR_RATE_LIMIT Concurrency limit exceeded
DailyLimitError ERROR_DAILY_LIMIT_REACHED Daily spend limit hit
IPNotAllowedError ERROR_IP_NOT_ALLOWED IP not in whitelist

Failed requests are never charged.


Low-Level API

# Submit task manually
task_id = client.submit(
    task_type="cloudflare_turnstile",
    proxy="http://user:pass@ip:port",
    target_url="https://example.com",
    site_key="0x4AAAAAAA...",
)

# Poll for result
import time
while True:
    result = client.get_result(task_id)
    if result["status"] == "SUCCESS":
        print(result["result"]["token"])
        break
    time.sleep(1.5)

Migration from 2Captcha

- from twocaptcha import TwoCaptcha
- solver = TwoCaptcha("API_KEY")
- result = solver.recaptcha(sitekey="KEY", url="https://example.com")

+ from passxapi import PassXAPI
+ solver = PassXAPI("API_KEY")
+ result = solver.recaptcha_v3(
+     target_url="https://example.com",
+     proxy="http://user:pass@ip:port",
+     site_key="KEY",
+ )

Links

Website https://www.passxapi.com
Sign Up https://www.passxapi.com/login
API Keys https://www.passxapi.com/app/api-keys
API Docs https://www.passxapi.com/docs
Dashboard https://www.passxapi.com/app/dashboard
Pricing https://www.passxapi.com/#pricing
Support contact@passxapi.com

License

MIT © PassXAPI

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

passxapi-2.0.3.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

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

passxapi-2.0.3-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file passxapi-2.0.3.tar.gz.

File metadata

  • Download URL: passxapi-2.0.3.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for passxapi-2.0.3.tar.gz
Algorithm Hash digest
SHA256 34111ee7fa10ba6c4f8de454f5f700ca2792ed1dd126c1c4d0e3f1de0251c720
MD5 da28fa22f8aa7fa5dadeb23c6ac4133a
BLAKE2b-256 8e0b99dba142091e55193d2ab9456137a4a1ae90052a77fb4f775a8b2d6285d6

See more details on using hashes here.

File details

Details for the file passxapi-2.0.3-py3-none-any.whl.

File metadata

  • Download URL: passxapi-2.0.3-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for passxapi-2.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6871090dfb832f026e8bf6b7e8be87e99bd3a8bfe2db2ae79a14569c1bd0380a
MD5 e72197a3efa5e45f8b3134514a13900d
BLAKE2b-256 0412acc479cb8239c21d49c8ea9732bef68671ee606b3325e9b0c2f095935c30

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