verifi

bot protection — passive detection + progressive challenges
your site id
click to copy <script src="https://verifi.zo0p.dev/v.js"
       data-site=""></script>
drop-in
<!-- add to <head> — auto-detects + challenges after 10s analysis --> <script src="https://verifi.zo0p.dev/v.js" data-site="YOUR_ID"></script>
embed widget
// renders an inline checkbox widget — like cf turnstile verifi.embed( '#my-div', // selector or element 'dark', // 'dark' | 'light' 'normal', // 'normal' | 'compact' r => unlock(), // onPass — r.token, r.probability r => block() // onFail — r.reason )
config
verifi.config({ threshold: 0.6, // bot cutoff 0–1, default 0.45 autoChallenge: true, // show challenge automatically onPass: r => unlock(), // r.probability, r.confidence onFail: r => block(), // r.probability, r.reason })
on-the-spot check
// runs a fresh challenge — good for login buttons, checkout, form submit verifi.check({ threshold: 0.6, onPass: r => submitForm(), onFail: r => showError(), })
promise api
verifi.verify({ threshold: 0.5 }) .then(r => submitForm()) // r.probability, r.confidence .catch(r => showError()) // r.reason, r.timed_out verifi.profile() // { probability, confidence, signals, sessions } verifi.botScore() // { score, behavioural, verified, isBot }
living token
// token issued after pass, refreshes every 60s while session is active verifi.getToken() // current token string or null verifi.waitForToken(8000) // Promise — resolves when token issued verifi.isTokenValid() // bool — false if expired verifi.tokenExpiry() // Date or null verifi.on('token', r => attachToForm(r.token)) // verify server-side fetch('https://verifi.zo0p.dev/verify', { method: 'POST', body: JSON.stringify({ token: verifi.getToken() }) }).then(r => r.json()) // { valid, probability, site_id, expires_at }
events
verifi.on('pass', r => console.log(r.probability, r.confidence)) verifi.on('fail', r => console.log(r.reason)) verifi.on('score', r => console.log(r.p, r.c)) verifi.on('token', r => console.log(r.token, r.expires_in)) verifi.off('score', fn)
manual triggers
verifi.botCheck() // trigger challenge (respects tier) verifi.botCheck(true) // force-fail — harder stage verifi.fullscreenTest() // fullscreen gate verifi.fullscreenTest(true) // force-fail gate verifi.powVerify() // verify PoW server-side — Promise<{ok}>