Risk Scoring

A score, a decision, and the reason.

Every response carries a risk score, a recommended action, and the signals that produced it. Your team does not have to reverse-engineer the verdict.

POST /v2/verify
Response
{  "event_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",  "fingerprint": "kvd_8f3a2c1e9b047d56",  "visitor_id": "kvd_8f3a2c1e9b047d56",  "risk_score": 42,  "recommendation": "allow",  "action": "allow",  "reason": [    "VPN_DETECTED",    "INCOGNITO_DETECTED"  ],  "score": 0.42,  "trust_score": 70,  "smart_signals": {    "vpn_detected": true,    "incognito_detected": true,    "risk_score": 42,    "action": "allow",    "browser": "Chrome",    "operating_system": "macOS"  },  "created_at": "2026-07-25T12:00:00Z",  "country_code": "KE",  "country_name": "Kenya",  "times_seen": 3,  "first_seen": "2026-07-01T09:00:00Z",  "last_seen": "2026-07-25T12:00:00Z"}

Field walkthrough

Three fields drive the decision. Scroll the list to highlight each in the response.

POST /v2/verify — documented response shape
Response
{  "event_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",  "fingerprint": "kvd_8f3a2c1e9b047d56",  "visitor_id": "kvd_8f3a2c1e9b047d56",  "risk_score": 42,  "recommendation": "allow",  "action": "allow",  "reason": [    "VPN_DETECTED",    "INCOGNITO_DETECTED"  ],  "score": 0.42,  "trust_score": 70,  "smart_signals": {    "vpn_detected": true,    "incognito_detected": true,    "risk_score": 42,    "action": "allow",    "browser": "Chrome",    "operating_system": "macOS"  },  "created_at": "2026-07-25T12:00:00Z",  "country_code": "KE",  "country_name": "Kenya",  "times_seen": 3,  "first_seen": "2026-07-01T09:00:00Z",  "last_seen": "2026-07-25T12:00:00Z"}

Scores and reasons describe this event and this workspace. They do not expose other customers' data.

Acting on the score

  • allowProceed. The event is within normal risk for this device.
  • challengeStep the user up. Maps to soft_challenge or hard_challenge in the response.
  • blockDeny the action. The signals crossed your risk threshold.

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.