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
Example checkWhat the device part says
Blockrisk_score 83
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"]
The device fields of the public bot sample, as your server gets them. See the JSON

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 accountId and get how many of your accounts the device has used, with multi_account and the reason multi_account_device. The links stay inside your account, as keyed hashes.
antidetect, automation, emulator
A faked, scripted or emulated browser: each one blocks. virtual_machine on its own is review.
incognito, privacy_mode
A private window or strict privacy settings; with high_activity and ip_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.

Your server
// 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 device object, 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_seen or linked_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.