Device fingerprinting API: one visitor_id built to survive cookie clears
Each check returns a visitor_id built to survive cleared cookies and private windows, how often and since when the device has been seen, and how many of your accounts it has used. Account links stay inside your account.
- Free plan: 10,000 visitor checks a month
- No card
- Paid plans from €29 a month
- visitor_id
demo_visitor_a8c91b- Fake browser
- Detected
- Automation
- Detected
- Private window
- Not detected
- Virtual machine
- Not detected
- tampering_score
- 0.78
"decision": "block""reasons": ["antidetect_browser", "automation_detected"]What one check says about the device
visitor_id- The device’s ID, built to survive cleared cookies and private windows.
times_seen,first_seen- How often and since when the device has been seen. This is the one figure shared across customers, kept against a hash of the ID with no site or account attached.
linked_accounts- Send your own
accountIdand get how many of your accounts the device has used, withmulti_accountand the reasonmulti_account_device. The links stay inside your account, as keyed hashes. antidetect,automation,emulator- A faked, scripted or emulated browser: each one blocks.
virtual_machineon its own is review. incognito,privacy_mode- A private window or strict privacy settings; with
high_activityandip_blocklisted, context that doesn’t change the decision on its own.
Add it to your signup and login
Load https://maskbreak.com/assets/sentinel.js on the page and give the form the class monocle-enriched; your server sends the two fields it adds to /v1/evaluate, with your own accountId for the account links. The example starts in watch mode: it logs each verdict and lets every request through, even when Maskbreak can’t be reached. Once the log matches Events in your dashboard, uncomment the enforce line; the integration guide has the full checks.
// Server side: one call returns identity, history, and account links // Watch mode first: log the verdict, always continue, fail open const body = req.body || {}; // sentinel.js adds monocle + sentinel_fp to your form let risk = null; try { const verdictRes = await fetch('https://maskbreak.com/v1/evaluate', { method: 'POST', signal: AbortSignal.timeout(5000), headers: { 'Authorization': 'Bearer ' + process.env.MASKBREAK_API_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ token: body.token || body.monocle, // network evidence fingerprintEventId: body.fingerprintEventId || body.sentinel_fp, // device evidence tz: body.tz || body.sentinel_tz, accountId: user.id // your id — linked inside your account only }) }); if (verdictRes.ok) risk = await verdictRes.json(); } catch {} // unreachable or timed out: your handler still runs console.log('[maskbreak]', JSON.stringify({ decision: risk?.decision ?? null, reasons: risk?.reasons ?? null, risk_score: risk?.risk_score ?? null, degraded: risk ? !!risk.degraded : null, linked_accounts: risk?.device?.linked_accounts ?? null })); // Enforce later: if (risk?.device?.multi_account) flagForReview(risk.device.linked_accounts);
What it can’t see
- Another machine
- A different machine is a different device, and a major hardware or system change can give the same machine a new
visitor_id. - Every faked device
- Some antidetect browser profiles get past both the identification and the tampering check. Test the tools you worry about.
- A browser check that didn’t run
- The answer then has no
deviceobject, rather than one that is all false. Check for it before you treat a result as clean. - Test checks
- Test keys and the dashboard’s own checks write no history, so their answers have no
times_seenorlinked_accounts.
Common questions
What is device intelligence?
What a fraud check learns about the device behind a visit, beyond its IP address: an ID built to survive cleared cookies, how often the device has been seen, how many of your accounts it has used, and whether it is faked, scripted or emulated. Maskbreak returns it in the device object of the same /v1/evaluate answer as the VPN, proxy and Tor checks, on every plan.
Can Maskbreak link a user across different customers’ sites?
No. Account links stay inside the customer account that made them, stored as keyed hashes, so another customer never learns your accounts and you never learn theirs. The one device record shared across customers is a hashed device’s visit count and first-seen date, with no site or account attached.
Is device fingerprinting GDPR-compatible?
Fraud prevention is a recognised legitimate interest under the GDPR, and Maskbreak keeps the footprint small: device IDs are stored as hashes, account links stay inside your account, and device history is deleted after 90 days without activity. You still disclose the processing in your own privacy policy and run your own assessment; ours is the privacy policy, and none of this is legal advice.
Recognize returning devices on your signups
Setup starts in watch mode, so nobody is blocked until you turn blocking on.