The full-page interstitial Cloudflare serves before it will show you the site — the one that says "Checking your browser" — is a Turnstile WAF challenge. SolveGate clears it through the same endpoint, with gate=waf.
// failed solves are never billed · credits never expire · first 1,000 solves free
A WAF challenge page is not the inline widget. Cloudflare serves it in place of the page, holds the request, and only proxies through once the challenge clears. It is what sits behind most "Just a moment…" screens and many 403s on Cloudflare-fronted origins.
The interstitial that renders a Turnstile widget and blocks the page until it is satisfied.
The scripted hold with no visible widget, issued and verified before the origin is reached.
Once cleared, the clearance is reusable for the window Cloudflare grants it, so a solve covers more than one request.
The inline Turnstile widget embedded in a form is a different gate. It has its 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=waf \
-d sitekey=0x4AAAAAAAAA_target \
-d url=https://app.example.com{
"id": "slv_8Kd2…aF9",
"status": "solved",
"gate": "waf",
"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.
An interstitial Cloudflare serves instead of the site while it decides whether to let the request through. It is issued by the WAF rather than embedded by the site author, which is why it replaces the page rather than sitting inside a form. SolveGate treats it as gate=waf.
Turnstile is a widget the site owner embeds in their own markup and verifies server-side. A WAF challenge is served by Cloudflare's edge in front of the origin, so there is no form to attach a token to — clearing it is what lets the request reach the site at all.
For the window Cloudflare grants, yes — that is what token reuse means. A single solve can cover a run of requests rather than one, which is why WAF work is usually cheaper in practice than the per-request rate suggests.
A 1020 is a firewall rule denying the request outright — there is no challenge to solve, and no solver can help. If you are getting 1020 rather than an interstitial, the fix is at the rule level on a property you control, not at the solve level.
The same meter as Turnstile: prepaid credits from $0.40 per 1,000 solves down to $0.075 per 1,000 on the largest pack, with failed solves never billed.