NSLSolver

Introduction

A fast, reliable HTTP API for solving Cloudflare Turnstile, Cloudflare Challenge, Kasada, Akamai, and reCAPTCHA v3. Pay only for successful solves.

NSLSolver is a single HTTP endpoint that returns a valid captcha token in seconds. Drop it into any language, with or without a proxy, and your scrapers stop hitting walls.

What you get

One endpoint, five protections

POST /solve handles Cloudflare Turnstile, Cloudflare Challenge, Kasada, Akamai, and reCAPTCHA v3 through the same JSON contract.

Pay only for solves that work

Failed attempts are not charged. There is no refund flow because the balance is never deducted in the first place.

Per-key rate limiting

Each API key has a max-captchas-per-minute (CPM) bucket. Run as many parallel workers as you want under that ceiling.

No queueing

The HTTP connection stays open while the solver works. When the response arrives, you already have the token — no polling, no task IDs.

Supported captcha types

Typetype valueReturns
Cloudflare Turnstileturnstile or cloudflare-turnstiletoken string
Cloudflare Challengechallenge or cloudflare-challengecookies (cf_clearance) + user_agent
Kasadakasada or kasada-bypassheaders object (x-kpsdk-*)
Akamaiakamai or akamai-bypasscookies (_abck)
reCAPTCHA v3 (+ Enterprise)recaptchav3 or recaptcha-v3token string

Both the short name (turnstile) and the long slug (cloudflare-turnstile) are accepted on the wire and produce identical results.

Base URL

https://api.nslsolver.com

All endpoints use HTTPS and return JSON.

Hello, captcha

curl -X POST https://api.nslsolver.com/solve \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NSL_API_KEY" \
  -d '{
    "type": "turnstile",
    "site_key": "0x4AAAAAAAB...",
    "url": "https://example.com"
  }'
import requests

r = requests.post(
    "https://api.nslsolver.com/solve",
    headers={"X-API-Key": "your-api-key"},
    json={
        "type": "turnstile",
        "site_key": "0x4AAAAAAAB...",
        "url": "https://example.com",
    },
    timeout=120,
)
print(r.json()["token"])
const r = await fetch("https://api.nslsolver.com/solve", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": process.env.NSL_API_KEY,
  },
  body: JSON.stringify({
    type: "turnstile",
    site_key: "0x4AAAAAAAB...",
    url: "https://example.com",
  }),
  signal: AbortSignal.timeout(120_000),
});
console.log((await r.json()).token);
payload := []byte(`{"type":"turnstile","site_key":"0x4AAAAAAAB...","url":"https://example.com"}`)
req, _ := http.NewRequest("POST", "https://api.nslsolver.com/solve", bytes.NewReader(payload))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", os.Getenv("NSL_API_KEY"))
resp, _ := (&http.Client{Timeout: 120 * time.Second}).Do(req)
defer resp.Body.Close()

Where do I get an API key?

Sign in at the dashboard or ask an admin to provision one. Each key carries its own balance, allowed captcha types, and CPM ceiling — see Authentication.

Where to go next

On this page