Protection
Invisible human verification — no CAPTCHA, no friction, pure behavioral signals.
Human score
Step 1 — Add the script to your page's <head>:
Step 2 — Call AckgeoHuman.getToken() on form submit and verify server-side:
// Client — get token before submitting
const token = await AckgeoHuman.getToken();
// Include in your form POST
fetch('/your-form', {
method: 'POST',
body: JSON.stringify({ token, ...formData })
});
Server-side verification — POST the token to ACKgeo:
// Node.js example
const res = await fetch('https://ackgeo.com/human/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token })
});
const { human, score } = await res.json();
// human: true/false score: 0-100
if (!human) return res.status(403).json({ error: 'Bot detected' });
Natural curved paths with velocity variation. Bots move in straight lines or not at all.
Human typing has irregular rhythm. Bot keystrokes are evenly spaced.
Bots submit forms in milliseconds. Humans take seconds to read.
Real users scroll with natural deceleration. Bots skip straight to submit.
Touch input is almost always a real human on a real device.
A hidden field bots fill in but humans never see. Instant fail if triggered.
Scores below the threshold are flagged as bots. Default is 25 — conservative enough to catch most bots without false positives. Higher threshold = stricter (more false positives). Lower = more permissive.