uniqid · live cpu fingerprint · dev preview
outputfloat ∈ [0,1]
uniqid/bot-defense
./apply.sh
[ proprietary cpu trace ][ live, not static ][ ml-scored ]

Bots can fake software.
They can't fake silicon.

UniqID is a proprietary CPU fingerprinting algorithm. Hardware changes at a far slower rate than software — so a fingerprint rooted in the processor itself stays stable while user-agents, fonts, and canvas quirks shift underneath. Static techniques can't keep up. Ours can.

fingerprint.live
probing
uniqid score · this visitor
0.3921
a single float between 0 and 1 — your service decides the threshold
// hardware-rooted (uniqid)
power_profile
stable across browsers
cpu_microarch
stable across browsers
timing_signature
stable across browsers
core_count_class
stable across browsers
// software-rooted (typical)
user_agent
spoofed in one line
canvas_hash
changes per release
installed_fonts
easily faked
webgl_vendor
masked by drivers
// pipeline

Bots waste resources. We make sure they can't hide.

01
probe()

Our algorithm runs a lightweight probe on the visitor's CPU — entirely in the browser. No plugin, no permission prompt, no installed agent.

02
fingerprint()

A CPU trace is captured and passed through our proprietary ML model.

03
score()

You receive one float. Threshold it, log it, feed it to your existing fraud model, or chain it behind your edge — the policy stays yours.

// integration

One float. Your call.

We don't ship a verdict — we ship a number. The only opinion the algorithm has is about the hardware. Everything else is your call.

client.html
<script src="https://cdn.uniqid.dev/v2.js"></script> <script> const score = await uniqid.fingerprint(); fetch('/login', { method: 'POST', headers: { 'X-UniqID-Score': score }, body: JSON.stringify(payload), }); </script>
your-server.ts
// the score is the only thing we return. // the policy is the only thing you write. const score = Number(req.headers['x-uniqid-score']); if (score < YOUR_HARD_BLOCK) { return res.status(403).end(); } if (score < YOUR_CHALLENGE) { return showChallenge(res); } // or pipe it into your existing fraud model fraudModel.observe({ uniqid: score, ...features }); return handle(req, res);
> apply --program=devs

~/dev-program/apply

Fifty design-partner slots open this quarter. Tell us about your stack and the bot problem you're trying to solve.

  • Direct communication channel with founding engineers
  • One-year price lock at design-partner rates
  • Custom integration support for your stack
  • Early access to mobile SDK
POST /apply9 fields · 2 min
By applying you agree to our terms & privacy policy.