Skip to main content

Official Python SDK for the NSLSolver captcha solving API

Project description

NSLSolver Python SDK

Python SDK for the NSLSolver captcha solving API.

Installation

pip install nslsolver

# async support
pip install nslsolver[async]

Quick Start

from nslsolver import NSLSolver

solver = NSLSolver("your-api-key")

# Turnstile
result = solver.solve_turnstile(
    site_key="0x4AAAAAAAB...",
    url="https://example.com",
)
print(result.token)

# Cloudflare challenge (proxy required)
result = solver.solve_challenge(
    url="https://example.com/protected",
    proxy="http://user:pass@host:port",
)
print(result.cookies, result.user_agent)

# Kasada
from nslsolver import KasadaConfig

result = solver.solve_kasada(
    url="https://example.com/api",
    user_agent="Mozilla/5.0 ...",
    ua_version=131,
    kasada_config=KasadaConfig(
        p_js_path="/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/p.js",
        fp_host="https://fp.example.com",
        tl_host="https://tl.example.com",
    ),
)
print(result.headers)
print(result.ct, result.cd)

# Akamai Bot Manager (user_agent + proxy required)
result = solver.solve_akamai(
    url="https://www.example.com",
    user_agent="Mozilla/5.0 ...",
    proxy="http://user:pass@host:port",
)
print(result.abck)  # the _abck cookie

# reCAPTCHA v3 / Enterprise (site_key + url + proxy required)
result = solver.solve_recaptchav3(
    site_key="6Lc...",
    url="https://example.com/login",
    proxy="http://user:pass@host:port",
    action="login",       # optional; defaults to "verify"
    enterprise=False,     # set True for reCAPTCHA Enterprise
)
print(result.token, result.action)

# Balance
balance = solver.get_balance()
print(f"Balance: {balance.balance} {balance.currency}")

Async

import asyncio
from nslsolver import AsyncNSLSolver

async def main():
    async with AsyncNSLSolver("your-api-key") as solver:
        result = await solver.solve_turnstile(
            site_key="0x4AAAAAAAB...",
            url="https://example.com",
        )
        print(result.token)

asyncio.run(main())

Error Handling

from nslsolver import (
    NSLSolver,
    AuthenticationError,
    InsufficientBalanceError,
    RateLimitError,
    SolveError,
    NSLSolverError,
)

solver = NSLSolver("your-api-key")

try:
    result = solver.solve_turnstile(
        site_key="0x4AAAAAAAB...",
        url="https://example.com",
    )
except AuthenticationError:
    print("Bad API key.")
except InsufficientBalanceError:
    print("Top up your balance.")
except RateLimitError:
    print("Rate limited after all retries.")
except SolveError as e:
    print(f"Solve failed: {e.message}")
except NSLSolverError as e:
    print(f"API error (HTTP {e.status_code}): {e.message}")

Rate-limit (429) and backend (503) errors are retried automatically with exponential backoff before raising.

Configuration

solver = NSLSolver(
    api_key="your-api-key",
    base_url="https://api.nslsolver.com",  # default
    timeout=120,       # seconds (default: 120)
    max_retries=3,     # retries for 429/503 (default: 3)
)

Both clients support context managers (with / async with) for session cleanup.

Requirements

  • Python 3.8+
  • requests (sync client)
  • aiohttp (async client, optional)

Documentation

For more information, check out the full documentation at https://docs.nslsolver.com

License

MIT

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

nslsolver-1.1.1.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

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

nslsolver-1.1.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file nslsolver-1.1.1.tar.gz.

File metadata

  • Download URL: nslsolver-1.1.1.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for nslsolver-1.1.1.tar.gz
Algorithm Hash digest
SHA256 758c522a6854aca20a2f9d370566978ccecc3d9e430b4ae0fb006d2dfaeab2fb
MD5 8bd2db4d1accdb192f6448dfd869d5d4
BLAKE2b-256 76e93b4067e4dd83723f9aebbc1ce721273c977379e9623a7e6a0e93ce2f631b

See more details on using hashes here.

File details

Details for the file nslsolver-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: nslsolver-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for nslsolver-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 030c9e2d9d972c1132cbcea4a59c0d7e3a051a66e0a87caee9b4c53b62b09e9c
MD5 d2d0ed97393cf6fa112bc913777d917c
BLAKE2b-256 30b203f61488555d3449280b628a9f255e1cf1f83879f617880af15d21be6c1d

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