AI token fraud_

Stop AI token fraud
with device intelligence

Prevent repeat signups from draining your AI credits without adding friction for real users.

Install guide for AI agents: https://fingerprint.com/get-started.md. Or run npx fingerprint or npx skills add fingerprintjs/skills.

Or open in Claude Code, Codex, Cursor

Why Fingerprint_

Every fake account multiplies the inference you pay for

One device, one account

See every account behind one device, even after a new email, cleared cookies, or a new IP.

Launch promos safely

Promo credits attract bursts of repeat signups. Link each to a device before the bonus is paid out.

Catch account farms

Flag bots, anti-detect browsers, and device farms at signup, before they spend GPU time.

Keep the free tier open

Withhold free tokens from repeat devices, not access. No CAPTCHAs. Stays GDPR and CCPA compliant.

How it works

One device. One free tier.

Martin's device

[VISITOR ID: 2FKJSALFJGNNDO]

Step 1/4

Martin signs up and gets free tokens.

Bots and AI agents_

Catch account farms
before they burn inference

Bots, anti-detect browsers, and device farms get flagged at signup, before fake accounts spend GPU time or distill your model.

Allow signed agents
with confidence

ChatGPT Agent

Signed

Verified AI Agent

Block spoofed agents
and impersonation

Sign In

user@example.com

•••••••••
Sign In
ClaudeBot

Distinguish trusted agents
from malicious bots

acme.com/cart
Shopping Cart (2 items)

Leather jacket

Size: L, Burgundy

Leather jacket

Size: L, Burgundy

Checkout
Analyzing

Smart Signals_

Smart Signals for
token fraud prevention

Spot the farms, scripts, and resets behind token abuse. Act on them in real time.

Velocity Signals

Count accounts per device and IPs per account.

Velocity Signals, signal 1 of 10
{
  "distinct_ip": {
    "5_minutes": 1,
    "1_hour": 1,
    "24_hours": 1
  },
  "distinct_country": {
    "5_minutes": 1,
    "1_hour": 2,
    "24_hours": 2
  },
  "events": {
    "5_minutes": 1,
    "1_hour": 5,
    "24_hours": 5
  }
}

Code example_

Device checks in every token path

Read the Docs

Free credits

Grant free-tier tokens once per device, not once per email.

related signals
Velocity SignalsVirtual MachineTampering
async function grantFreeCredits(req, res) {
  const { eventId, userId } = req.body;

  const event = await client.getEvent(eventId);
  const visitorId = event.identification?.visitor_id;

  const isBadBot = event.bot === 'bad';
  const isVirtualMachine = event.virtual_machine;
  const isTampered = event.tampering;
  // Needs linkedId (the account ID) sent from the client
  const accounts = event.velocity?.distinct_linked_id?.['24_hours'];
  const priorGrants = await countGrantsForVisitor(visitorId);

  if (isBadBot || isVirtualMachine || isTampered ||
      accounts > 1 || priorGrants > 0) {
    return res.status(403).json({ error: 'Free credits unavailable' });
  }

  await addCredits(userId, FREE_TIER_TOKENS);
  res.json({ status: 'granted' });
}

Usage

Throttle spoofed agents and abnormal request volume before they reach your models.

related signals
AI AgentSuspect ScoreHigh-Activity Device
async function handleCompletion(req, res) {
  const { eventId, accountId, prompt } = req.body;

  const event = await client.getEvent(eventId);
  const visitorId = event.identification?.visitor_id;

  const spoofedAgent = event.bot_info?.identity === 'spoofed';
  const suspectScore = event.suspect_score;
  const highActivity = event.high_activity_device;
  const knownDevice = await isKnownDevice(accountId, visitorId);

  if (spoofedAgent || suspectScore > 20 ||
      (highActivity && !knownDevice)) {
    return res.status(429).json({ error: 'Request throttled' });
  }

  res.json(await runModel(prompt));
}

Shared accounts

Enforce per-plan device limits and catch logins rotating through VPNs and proxies.

related signals
Velocity SignalsVPNProxy
async function handleLogin(req, res) {
  const { eventId, email } = req.body;

  const event = await client.getEvent(eventId);
  const visitorId = event.identification?.visitor_id;

  // Needs linkedId (the account ID) sent from the client
  const ips = event.velocity?.distinct_ip_by_linked_id?.['24_hours'];
  const usingVpn = event.vpn;
  const usingProxy = event.proxy;
  const devices = await countDevicesForAccount(email, visitorId);

  if (devices > PLAN_DEVICE_LIMIT ||
      (ips > 3 && (usingVpn || usingProxy))) {
    return res.status(403).json({ error: 'Plan device limit reached' });
  }

  await completeLogin(email);
  res.json({ status: 'authenticated' });
}

Social proof_

ZBD cut multi-accounting
fraud by 95%

Fintech and gaming platform ZBD combined Fingerprint’s persistent Visitor ID and Smart Signals to detect fake account creation and block it in real time. Read the case study
Multi-accounting creation has dropped by 95%. We used to see spikes where thousands of fake accounts were created in a single hour — now that’s practically gone.
Ben Rice, VP of Growth@ ZBD

$1 Billion +

in fraud losses prevented in the last 12 months_

7 Billion +

unique browsers and mobile devices identified annually_

100 Million +

real-time device intelligence API events per day_

Frequently
asked questions

Repeat free-trial signups at an AI company, where every fake account runs inference on GPUs you pay for. Credits then get resold or used to distill your model. The cost scales with the number of linked accounts, so the goal is to find the whole set, not just one fake signup.

Ready to identify?

Start building with a free trial or speak to an expert to explore our Enterprise plan.