What you embed, what stays on your server, and the two lines that make it work. Read once, ship today.
/v1/check. Only hashes ever leave the machine — the raw hardware ID never does.
The SDK never blocks by itself — it's a messenger. The verdict comes back to your server, and your login code is the door. That's deliberate: a patched client can't skip a check that lives where the attacker can't reach.
ban in a distributed client.The collector reads the hardware signals and hashes them. You send that to /v1/check. Pick your stack:
Clean device. Let the login through.
Banned device. Block it — even inside a VM.
Flagged, not blocked. Your call / step-up.
X-HWID-Monitor-Verdict) and automatic verdicts (VM/origin/bot DENY) are not enforced. Watch who would be caught, then flip to enforce when you're confident. Note: an explicit BAN from your banlist (an operator decision) still blocks in monitor mode, same as in enforce.
deny/review/allow on its own. Three of them ship a recommended default per app type — root/jailbreak, browser-bot, and emulator, not VM, IP, or TLS fingerprint — opt-in per tenant, off by default; enable via manage.py set-surface-policy-defaults: mobile apps review root/jailbreak; web apps review browser-bot. Root/bot detection is heuristic on client-reported signal (not cryptographic proof) and cheap to evade, so start in review if you can't tolerate a false positive. Emulator policy is real and configurable the same way, and the mobile surface default even ships deny for it — but since no client today sends an emulator signal, that default never fires in practice. VM stays deny everywhere by default — it's the one policy that's never loosened automatically. VM, root/jailbreak, browser-bot, and emulator are all configurable per app in the Apps tab of the admin panel, or via PATCH /v1/apps/{app_id}.
deny/review/allow on its own (both allow by default), but set via the HWID_GUARD_IP_POLICY/HWID_GUARD_TLS_FINGERPRINT_POLICY env vars, not per app — there's no per-app or per-tenant override for either one yet.
When a moderator flags a cheater, ban the device from your backend with a separate ban-scope key — never the client's check key. After that, every new account on that hardware gets BAN at /v1/check.
/v1/check from your server or the gateway.Pilot support is hands-on — send a message and we'll get your first check live together.