Docs
Three integration paths, one API. Pick what fits your agent runtime.
Quick start
Get a key, make your first solve — 30 seconds.
Submit the returned token as the cf-turnstile-response field when
posting the target form. Your agent is through.
MCP server
For Claude Desktop, Claude Agent SDK, Cursor, Windsurf, or any MCP-enabled agent host.
Add this block to your MCP server config:
Restart your agent host. The server auto-signs-up on first use and writes the generated key to
stderr. Your agent now has a solve_turnstile(url, sitekey) tool.
Persisting your API key
To avoid re-signup on every restart, copy the key from stderr into the config:
TypeScript SDK
Zero dependencies. Works in Node 20+, Bun, Deno, and modern browsers.
HTTP API
Plain HTTP. Works from any language.
Python
cURL
API reference
POST /signup
Create a new API key. No auth required.
Request body (optional):
| Field | Type | Description |
|---|---|---|
note | string | Optional label (e.g. "my-agent-v1") |
Response (201):
POST /solve
Solve a CAPTCHA challenge. Requires Authorization: Bearer <apiKey>.
Request body:
| Field | Type | Required | Description |
|---|---|---|---|
type | string | yes | Currently "turnstile" only |
url | string | yes | The page where the widget is embedded |
sitekey | string | yes | From the widget's data-sitekey attribute |
action | string | no | Turnstile action parameter |
cdata | string | no | Custom data passed to validator |
Response (success, 200):
Response (failure, 502):
Errors
| Status | Error | Meaning |
|---|---|---|
| 400 | invalid_request | Missing or malformed fields |
| 401 | unauthorized | Missing or invalid API key |
| 402 | quota_exceeded | Free tier used up (x402 top-up coming Week 2) |
| 502 | solver_threw / timeout | Solver failed — auto-refund if paid |
SLA & refunds
- Target success rate: 95%+ on Cloudflare Turnstile, rolling 7-day window
- Target p95 latency: < 10 seconds
- Failed solves are automatically refunded (no credit consumed)
- Public status dashboard: status (live metrics coming Week 3)
This is a beta — no uptime guarantees yet. Real enterprise SLA arrives when we're past 10k MRR.