SolveGate solves Cloudflare Turnstile through one REST call. POST the sitekey and the page it sits on; a single-use token comes back in about a second, ready to submit as cf-turnstile-response.
// failed solves are never billed · credits never expire · first 1,000 solves free
Cloudflare Turnstile is the challenge widget that replaced reCAPTCHA on Cloudflare-fronted sites. It renders in three modes and SolveGate handles all of them.
The visible checkbox widget. Cloudflare decides whether to show an interaction based on its own risk signals.
A visible widget that never asks the visitor to click. It still issues a token that the origin verifies.
No widget at all. The challenge runs in the background and the token lands in a hidden input.
Turnstile WAF challenge pages — the full-page interstitial Cloudflare serves before the site itself — are a different gate. They have their own page.
data-sitekey attribute on the challenge element, or a value beginning 0x4 in the page source.cf-turnstile-response field, or hand it to the site's explicit-render callback.curl https://api.solvegate.io/v1/solve \
-H "Authorization: Bearer sk_live_•••" \
-d gate=turnstile \
-d sitekey=0x4AAAAAAAAA_target \
-d url=https://app.example.com{
"id": "slv_8Kd2…aF9",
"status": "solved",
"gate": "turnstile",
"token": "0.Xa3f…X9_cleared",
"solve_ms": 980,
"billed": true
}| Field | Type | Description |
|---|---|---|
| gate | string | Which challenge stands in the way — turnstile or waf. |
| sitekey | string | The widget's public key. Read data-sitekey off the challenge markup. |
| url | string | The page the challenge is on. Used to match the origin the token is issued for. |
| action | string | Optional. The Turnstile action value, when the site sets one. |
| proxy | string | Optional. Solve through your own egress IP instead of ours. |
Full reference, including the async form and every error code, is in the API documentation.
Credits are prepaid in packs and one credit is one successful solve. Bigger packs carry a lower effective rate; nothing is metered in arrears and nothing auto-renews.
| Pack | Price | Per 1,000 solves |
|---|---|---|
| 30k credits | $12 | $0.40 |
| 100k credits | $25 | $0.25 |
| 250k credits | $60 | $0.24 |
| 500k credits | $100 | $0.20 |
| 1M credits | $150 | $0.15 |
| 5M credits | $600 | $0.12 |
| 10M credits | $1,000 | $0.10 |
| 20M credits | $1,500 | $0.075 |
Failed solves, timeouts and our internal retries are never billed. Credits do not expire. Full breakdown on the pricing page.
A service that completes a Turnstile challenge on your behalf and returns the token the widget would have produced. You send the sitekey and the URL the widget is on; you get back a cf-turnstile-response value to submit with your form or request. SolveGate does this in about a second and only charges when a token actually comes back.
It is public and sits in the widget's markup — look for the element with class cf-turnstile and read its data-sitekey attribute, or search the page source for a key starting 0x4. That is the value you pass as sitekey.
Into the hidden input named cf-turnstile-response inside the form the widget guards, then submit the form normally. If the site uses an explicit-render callback, pass the token to that callback instead. Tokens are single-use and short-lived, so request one at the moment you need it rather than caching.
Typically under 1.5 seconds end to end. The API is synchronous by default — you can wait on the response — and there is also an async form where you poll GET /v1/solve/{id} until the status flips from pending to solved.
Credits are prepaid in packs. The smallest pack works out at $0.40 per 1,000 solves and the largest at $0.075 per 1,000, with every pack in between priced on that curve. Credits do not expire. Failed solves, timeouts and our internal retries are never billed — you pay per gate that actually opens.
You may use SolveGate only against properties you own or are explicitly authorized to test or automate — your own sites, staging environments, uptime and QA checks, and engagements where the owner has granted permission. Using it against third parties in breach of their terms is prohibited by our Acceptable Use Policy and we enforce it.