Documentation
Docs API Reference SDKs Guides Changelog Status
v4.1
Log in Dashboard →

Prynt Documentation

Everything you need to integrate device intelligence into your application.

What is Prynt?

Prynt is a device intelligence platform that identifies devices with 99.5% accuracy, detects bots, prevents fraud, and secures your application from automated abuse. Our lightweight SDK collects hundreds of device signals — from hardware fingerprints to behavioral patterns — and returns a persistent visitorId that stays stable across sessions, incognito mode, cookie clearing, and VPNs.

Built for developers, Prynt provides a simple identify → verify workflow that takes less than 5 minutes to integrate. Use it to stop credential stuffing, prevent multi-accounting, detect payment fraud, enforce rate limits, and build adaptive authentication flows.

How it Works

Prynt follows a three-step flow that balances client-side collection with server-side verification:

1

Install Client SDK

Add our JavaScript, iOS, or Android SDK to your app. The agent runs in the background and collects device signals — canvas fingerprints, WebGL parameters, CPU cores, timezone, installed fonts, and 100+ other attributes.

2

Call identify()

Call identify() on key events (page load, login, checkout). The SDK sends signals to Prynt's API and returns a visitorId (persistent device ID) and requestId (unique per call) in under 50ms.

3

Server Verification

Send the requestId to your server. Use the Server API with your secret key to retrieve full results: signals (bot, VPN, incognito, tampering), ML scores, Rules Engine verdict, and device metadata.

Key Capabilities

Prynt provides a complete device intelligence stack with these core features:

Jump directly to the section you need:

Get started in 30 seconds

Here's the complete client-side integration — install the SDK and call identify() to get a visitor ID:

app.js
// 1. Install
npm install @prynt/sdk

// 2. Import and initialize
import {Prynt} from '@prynt/sdk';
const prynt = new Prynt({apiKey: 'pk_live_xxx'});

// 3. Identify visitor
const {visitorId, requestId} = await prynt.identify();

// 4. Verify server-side (see Quick Start)
await fetch('/api/verify', {body: JSON.stringify({requestId})})

From here, send the requestId to your server and use the Server API to retrieve full results. See Quick Start for the complete workflow.

Regions & Endpoints

Prynt operates in three regions for data residency compliance. Choose the region closest to your users or required by your compliance requirements:

RegionCodeAPI Base URL
United Statesushttps://api.prynt.io
European Unioneuhttps://eu.api.prynt.io
Asia-Pacificaphttps://ap.api.prynt.io

Specify the region when initializing the client SDK: new Prynt({apiKey: 'pk_...', region: 'eu'}). All data (device signals, visitor history, events) is processed and stored exclusively in the selected region.

Getting Help

Need assistance or found an issue? Here's how to reach us:

Support
Email us at support@prynt.io or visit our Contact page — we respond within 24 hours.
GitHub
Report bugs, request features, or browse SDK source code at github.com/prynt.
Status Page
Monitor API uptime and regional status at docs.prynt.io/status.
Community
Join our Discord server to chat with other developers and the Prynt team.
LANGUAGE
Client-Side Integration
app.js
import {Prynt} from '@prynt/sdk';

// Initialize with your public key
const prynt = new Prynt({
  apiKey: 'pk_live_xxxxxxxxxxxx',
  region: 'us',
});

// Identify the current visitor
const result = await prynt.identify();

console.log(result.visitorId);  // pv_8kX2mNqR3jT7p
console.log(result.requestId);  // req_1707832921_a7f2c9
console.log(result.confidence); // 0.995
Client Response
200 OKidentify()
{
  "visitorId":    "pv_8kX2mNqR3jT7p",
  "requestId":    "req_1707832921_a7f2c9",
  "confidence":   0.995,
  "visitorFound": true
}
Server-Side Verification
server.js
import {PryntServer} from '@prynt/node';

const prynt = new PryntServer({
  secretKey: process.env.PRYNT_SECRET_KEY,
});

// Retrieve full results
const event = await prynt.getEvent(requestId);

// Access signals and scores
if (event.signals.bot.detected) {
  // Block bot traffic
}

if (event.scores.abuse > 0.8) {
  // Require additional verification
}
Server Response (Full)
200 OKGET /v1/events/{id}
{
  "requestId":    "req_1707832921_a7f2c9",
  "visitorId":    "pv_8kX2mNqR3jT7p",
  "visitorFound": true,
  "confidence":   0.995,
  "firstSeenAt":  "2025-09-14T08:12:33Z",
  "lastSeenAt":   "2026-02-14T11:45:22Z",

  "device": {
    "platform":  "macOS",
    "browser":   "Chrome 121",
    "gpu":       "Apple M3 Pro",
    "type":      "desktop"
  },

  "signals": {
    "bot":       {"detected": false},
    "vpn":       {"detected": false},
    "incognito": false,
    "tampered":  false,
    "emulator":  false
  },

  "scores": {
    "abuse":   0.03,
    "ato":     0.01,
    "bot":     0.02,
    "suspect": 4
  },

  "verdict": "allow"
}
Common Use Cases
examples.js
// Prevent bot registrations
if (event.signals.bot.detected) {
  throw new Error('Registration blocked');
}

// Require MFA for risky logins
if (event.scores.ato > 0.7) {
  await sendMFAChallenge(user);
}

// Block VPN + high abuse score
if (event.signals.vpn.detected &&
    event.scores.abuse > 0.8) {
  return res.status(403).send('Blocked');
}

// Trust known devices
const trusted = await getTrustedDevices(userId);
if (trusted.includes(event.visitorId)) {
  await skipMFA(user);
}