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
| Type | type value | Returns |
|---|---|---|
| Cloudflare Turnstile | turnstile or cloudflare-turnstile | token string |
| Cloudflare Challenge | challenge or cloudflare-challenge | cookies (cf_clearance) + user_agent |
| Kasada | kasada or kasada-bypass | headers object (x-kpsdk-*) |
| Akamai | akamai or akamai-bypass | cookies (_abck) |
| reCAPTCHA v3 (+ Enterprise) | recaptchav3 or recaptcha-v3 | token 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.comAll 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.