Docs

Create a key in the panel, then send the page URL that shows the Turnstile widget.

Solve

curl -X POST https://pc-bn9wxsy57bl5.manus.host/api/solve \
  -H 'Content-Type: application/json' \
  -H 'X-Api-Key: YOUR_KEY' \
  -d '{"page_url":"https://example.com/login","sitekey":""}'

Leave sitekey empty and the solver reads it from the page. A call usually returns in 8–20 seconds.

{"ok": true, "token": "...", "elapsed_ms": 14200}

Check a key

curl https://pc-bn9wxsy57bl5.manus.host/api/v1/me -H 'X-Api-Key: YOUR_KEY'

Status codes

401Missing, unknown, revoked, or expired key
403Page host is not on that key's allowlist
429Per-minute limit, daily quota, or all workers are busy
502The page did not produce a token

Self-host

Python 3.10+, Node 18+, and Chrome. From the turnstile_solver directory:

npm install
export CHROME_PATH=/usr/bin/google-chrome
export ADMIN_PASSWORD='a-long-password'
export SOLVER_DATA=/var/lib/turnstile-solver/data.json
export SOLVER_WORKERS=4
export BIND=127.0.0.1
export PORT=8787
export PUBLIC_URL=https://pc-bn9wxsy57bl5.manus.host
python3 -m turnstile_solver.service

Put a reverse proxy on 443 and allow at least 180 seconds for /api/solve. Sign in at /panel to create keys. A key can have a daily solve cap, an expiry in days, and an optional host allowlist. Blank means unlimited, never expires, and any host. Set ACCESS_KEY once if you already have a client key; it is imported as checker with those defaults.