Total Events
—
Loading…
Unique Visitors
—
New Devices
—
First-time visitors
High Risk Rate
—
Avg Risk Score
—
Linked Identities
—
Cross-device links
VPN Detected
—
Incognito Detected
—
Events · 24h
Trusted
High Risk
Signal Coverage
22 signals · v3 SDK
Loading…
Merchants
| Merchant | API Key | Events | Unique Devices | High Risk | Risk Rate |
|---|---|---|---|---|---|
| Loading… | |||||
| Timestamp | Visitor ID | Merchant | Match Tier | Risk Score | IP Address | Signals | New? |
|---|---|---|---|---|---|---|---|
Loading events… | |||||||
| Visitor ID | Merchant | First Seen | Last Seen | Risk Score | Signals | Links | Visits |
|---|---|---|---|---|---|---|---|
Loading identities… | |||||||
Active API Keys
| Name | Public Key | Status | Created |
|---|---|---|---|
| Loading… | |||
API Endpoints
Base URL
https://api.arch-hayder.workers.dev
POST /v1/fingerprintIdentify device
GET /v1/dashboardPortfolio overview
GET /v1/visitor/:idDevice profile
GET /healthHealthcheck
SDK Quick Start
1. Add the SDK
<script src="https://deviceid-cdn.pages.dev/deviceid.min.js"></script>
2. Initialize & identify
const sdk = new DeviceID({
apiKey: 'pk_live_YOUR_KEY',
endpoint: 'https://api.arch-hayder.workers.dev'
});
sdk.identify().then(result => {
console.log(result.visitorId); // stable device ID
console.log(result.riskScore); // 0-100
console.log(result.confidence); // match certainty
console.log(result.matchTier); // stored_id | exact | fuzzy | cross_device | new
console.log(result.identity); // linked devices & cross-device graph
console.log(result.riskSignals); // vpn, bot, incognito, ipChanged, linkedRisk
console.log(result.geo); // country, city, ASN
});
3. API Response Format
{
"visitorId": "dvc_a1b2c3d4e5f6",
"isNew": false,
"confidence": 0.92,
"matchTier": "stored_id", // stored_id | exact | fuzzy | cross_device | new
"matchedSignals": ["canvas", "webgl", "fonts", "browser", "audio"],
"riskScore": 15,
"riskSignals": {
"vpn": false, "incognito": false, "headless": false,
"bot": false, "tampered": false, "multiAccount": false,
"ipChanged": true,
"linkedRisk": { "vpn": false, "incognito": false, "headless": false, "bot": false }
},
"identity": {
"linkedDeviceCount": 2,
"linkedVisitorIds": ["dvc_x9y8z7..."],
"links": [{ "visitorId": "dvc_x9y8z7...", "linkType": "same_network", "confidence": 0.45 }],
"previousIp": "203.0.113.5",
"currentIp": "203.0.113.1"
},
"signals": {
"collected": 19, // out of 22 total
"total": 19,
"hashes": { ... }, // individual SHA-256 per signal
"groups": { // 7 composite groups for matching
"canvas": { "hash": "a1b2...", "signals": ["canvas"] },
"webgl": { "hash": "c3d4...", "signals": ["webgl","webglRender"] },
"audio": { "hash": "e5f6...", "signals": ["audio"] },
"screen": { "hash": "g7h8...", "signals": ["screen","clientRects"] },
"fonts": { "hash": "i9j0...", "signals": ["fonts","arabicFonts","emoji"] },
"browser": { "hash": "k1l2...", "signals": ["intlProbe","cssSupports","codecs","voices"] },
"hardware": { "hash": "m3n4...", "signals": ["hardware","mathml","browser"] }
}
},
"ip": "203.0.113.1",
"geo": { "country": "IQ", "city": "Baghdad", "timezone": "Asia/Baghdad", "asOrganization": "..." },
"linkedDevices": 2,
"processingMs": 42,
"sdkVersion": "3.0.0"
}