Identification

One device. One ID. Every session.

Keverd assigns a stable identifier to every device that touches your product. Cleared cookies, private windows, and fresh accounts do not reset it.

Collect response — visitorId highlighted
Response
{  "fingerprint": "kvd_8f3a2c1e9b047d56",  "visitorId": "kvd_8f3a2c1e9b047d56",  "event_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",  "session_id": "sess_4e91c2a0",  "risk_score": 12,  "score": 0.12,  "action": "allow",  "reason": [],  "similarity": 0.98,  "is_new": false,  "times_seen": 3,  "first_seen": "2026-07-01T09:00:00.000000",  "last_seen": "2026-07-25T12:00:00.000000"}

The two-ID model

vis_* is the global device ID. kvd_* is that same device, scoped to your workspace.

Two-ID modelOne device maps to one global visitor ID, which scopes to a separate workspace ID under each tenant.Devicevis_9c2f4a7eGlobal device IDWorkspace Alphakvd_a81f02c4Workspace Betakvd_b39e17d1Workspace Gammakvd_c04d88a7
vis_* is the global device ID. kvd_* is that same device, scoped to your workspace. You see your own customers. You never see anyone else's. This boundary makes shared defence possible without exposing customer data between tenants.

Integrate once

Quick integration

const keverdPromise = import(  'https://cdn.keverd.com/v1/YOUR_PUBLIC_API_KEY/keverd.min.js').then((Keverd) => Keverd.start()); keverdPromise  .then((k) => k.getVisitorData())  .then((r) => {    console.log(r.requestId); // billable event id — send to your server    console.log(r.visitorId);  // persistent device id  });

Compliance posture

Kenya Data Protection Act 2019
GDPR
Metadata only, no PII

Start free. 1,000 calls a month.