Every protected form gets an invisible proof-of-work challenge. The browser spends a moment on arithmetic; bots pay for every attempt. No puzzle, no tracking script, and in first-party mode no visitor data leaves the platform.
People see no puzzle. In first-party mode no third party receives the visitor's address or browser.
Each surface runs off, observe or enforce, so you see the effect before anyone is refused.
If a vendor's check times out, the request is admitted and counted, not refused.
| Capability | How it works | Status |
|---|---|---|
| Modes per surface | off, observe or enforce for sign-in, sign-up and password reset on the console and on your hosted pages, plus magic link, approval and resend-verification doors. | Live |
| Provider per application | First-party, Cloudflare Turnstile, hCaptcha or Google reCAPTCHA, with the application's own keys. The secret is encrypted and never returned. | Live |
| Adaptive difficulty | Each pressure signal adds 2 bits up to a ceiling: more than 20 challenges a minute, or more than 5 refused checks in 10 minutes, from one address digest. | Live |
| Host binding | The host comes from the request's Origin, never from the caller. A token solved on one origin fails on another. | Live |
| Analytics | Per surface and per app: passes, failures by reason (expired, binding, signature, proof, replay), missing tokens, fail-open counts. Daily, kept 35 days. | Live |
| Fail-open | A vendor timeout (5 seconds) or an unreadable secret admits the request and counts error_failopen. | Live |
Not offered today: a standalone verify API for forms outside Identity Studio. Today the check protects the console and your apps' hosted pages.
Set for the deployment, then tightened per application. An application can make its own surfaces stricter, never looser.
| Option | Values | Default |
|---|---|---|
| provider | first_party, turnstile, hcaptcha, recaptcha | first_party |
| surface_modes | off, observe or enforce, per surface | observe |
| difficulty_mode | fixed or adaptive | fixed |
| difficulty_bits · ceiling | 8 to 24 leading zero bits | 16 · 16 |
| challenge_ttl_seconds | 60 to 900 | 300 |
Turn on the first-party check in observe mode and watch the numbers before you enforce.