Fraud prevention playbooks

Stop fraud by attack type: seven playbooks

Seven attacks come up again and again against account and payment flows, and each lands at a predictable moment: the signup form, the login, the checkout, the bonus claim. The tools behind them are shared. A residential proxy supplies a clean home address, a fake browser a fresh device, a script the volume and a burner inbox the confirmation email. Each playbook names the moment, the tell, the reason codes the check returns and what your app should do with them.

Last reviewed: September 2026, against the live POST /v1/evaluate response. The worked attack models linked below are illustrations, not customer results.

Seven fraud attacks at a glance

Read across a row: where the attack lands, what gives it away, which reasons the evaluation returns and what the default policy does before you change anything on the console's Rules tab.

AttackWhere it landsThe tellReasons that fireDefault decision
Account takeover Login, after the account lookup and before the password compare and the session. Password reset, email and payout changes. An established account signs in from a device it has never used, through a proxy, driven by a script. One attempt per address, so per-IP limits never trip. proxy_detected automation_detected antidetect_browser vpn_detected Block on proxy, automation or fake browser. A VPN alone is review: ask for a one-time code.
Fake signups The signup form and the OAuth callback, before the user row or the confirmation email. Registrations from a headless browser, each from a fresh residential address, often with a throwaway inbox. automation_detected proxy_detected datacenter_asn disposable_email Block on automation or proxy. A cloud-server address alone stays allow, with datacenter_asn listed.
Card testing Checkout and donation forms, before the payment intent reaches your processor. One machine runs small authorizations for card after card while its address changes every time. automation_detected proxy_detected high_activity_device Block on automation or proxy. high_activity_device alone stays allow; rate-limit on device.visitor_id.
Bonus & promo abuse The bonus claim, referral payout or promo redemption, before anything is credited. Dozens of accounts that pass every identity check, each on its own fake-browser profile behind a residential proxy. multi_account_device antidetect_browser proxy_detected emulator_detected Block on fake browser, proxy or emulator. multi_account_device is listed and changes nothing by default; read device.linked_accounts in the claim handler.
Free-trial abuse Trial signup, before a workspace, API key or free quota exists. The same device starts trial after trial, with a new email address each time. multi_account_device disposable_email vpn_detected A VPN alone or a throwaway domain gives review. For repeat trials, read device.linked_accounts in the trial-signup handler.
Multi-accounting Signup and login, then wherever value moves: payouts, referrals, ranked play. A banned user is back within the hour on a device already linked to the banned account. multi_account_device with device.linked_accounts, antidetect_browser Reported only: multi_account_device changes nothing by default. Act on device.linked_accounts in your handler. A fake browser blocks by default.
Disposable emails Signup and email change, sent as the optional email field. The address sits on a throwaway-mail domain. It receives your confirmation email without trouble. disposable_email Raises allow to review and adds 15 to the risk score. Never blocks on its own.

A VPN on its own is flagged for review, never blocked, because plenty of real customers use one. Proxy, Tor, automation, emulator and fake-browser signals block by default.

The Rules tab sets an action per signal for every check on your account, logins and checkouts included. A rule changes the decision only for the signal it names: set multi-account to Review and a second account opened from a fake browser still blocks, because the fake browser keeps its default. To lower a block, set a rule on each signal that caused it; emulators have no rule, so an emulator block stays. When a rule changes the answer, decision carries the rule's answer, engine_decision the engine's, and rule_matched names the rule that fired. How rules combine.

Start from the symptom you noticed

Teams usually meet an attack as a symptom in support tickets or a dashboard before they see it in a log. Pick the one that sounds familiar.

Account takeoverLogin
Customers report password changes and new payout details they never made.
Leaked passwords replayed one attempt per address through rotating residential proxies, and stolen session cookies replayed in fake browsers. The playbook covers login, password reset and the email or payout change where the damage is done.
Stop account takeover →
Fake signupsSignup
Signups climb, activation falls and last month's cohort stops making sense.
Scripted registrations through the form and through "Sign in with Google". Score the signup before the user row exists or the confirmation email is queued, and apply the same check in the OAuth callback.
Stop fake signups →
Card testingCheckout
A wall of small declined authorizations, then disputes weeks later.
A bot finds out which stolen cards are live on your checkout or donation form. The check runs before the payment intent, so a blocked attempt never reaches the processor and never becomes a fee or a chargeback.
Stop card testing →
Bonus & promo abuseBonus claim
Promo spend grows faster than real deposits, and the new accounts all cash out the same way.
Welcome offers, referral rewards and deposit matches claimed by one operator across many accounts. Check at signup, and again at the claim itself, so an account that slipped through still does not get paid.
Stop bonus abuse →
Free-trial abuseTrial signup
Trials never convert, yet the same usage pattern keeps appearing on brand-new accounts.
One person restarting the trial with a new email each time. On an AI product each restart is inference you pay for. Send the new account's ID with the signup check and the response says whether the device already has another account.
Stop trial abuse →
Multi-accountingSignup & login
You ban an account and the same person is back within the hour.
Ban evasion, sock-puppet reviews, self-referrals and smurfing. device.linked_accounts counts how many of your accounts a device has used; links are one-way hashes and never cross to another customer.
Stop multi-accounting →
Disposable emailsSignup
A growing share of signups use mail domains nobody on the team has heard of.
Throwaway inboxes pass format checks and receive the confirmation email. One optional field on the same evaluation flags the domain from a list refreshed daily; the address itself is not stored.
Stop disposable emails →

Worked attack models follow five incidents end to end (models, not customer results): serial SaaS trials, fintech signup-bonus farms, stolen cards behind residential proxies on a store checkout, a sportsbook bonus ring and a multi-account ring on a creator platform.

The fraud toolkit behind all seven attacks

The person farming your free trials and the crew stuffing your login rent from the same shelf. Each tool beats one familiar defence, and each leaves its own trace in the response:

ToolWhat it gets pastWhat the response shows
Residential proxy Per-IP rate limits, IP blocklists and country rules. Every attempt arrives from a different home connection. proxy_detected, and the proxy network in network.service when known. Proxy detection.
Commercial VPN Country rules. Also used every day by privacy-minded customers. vpn_detected and the VPN service when known. Review on its own, never block.
Fake browser Cookie and fingerprint checks. An antidetect browser such as Multilogin, GoLogin or AdsPower gives every account its own device profile. antidetect_browser and device.tampering_score (0 to 1). How fake browsers are caught.
Scripts and emulators Limits that assume a person at a keyboard, and checks that trust a phone to be a phone. automation_detected, emulator_detected, virtual_machine. Bot detection.
Burner inbox Email format validation and the confirmation email. disposable_email when you send the optional email field.
Many accounts Per-account limits, bans and "one offer per customer". multi_account_device and device.linked_accounts when you send accountId, counted within your account only.

One check cannot see the history you hold about an account. That is why several playbooks ask you to send your own accountId, and to compare device.visitor_id with the devices an account has used before. The evaluation reads the visit; your app knows the customer. Missing evidence is not a clean result either: when the browser check did not complete, the device block is absent, and your code should treat that as unknown.

What the API returns for two of the attacks

Trial number five from one laptop, over a VPN

The signup sends the new account's ID. Example response, selected fields:

{
  "decision": "review",
  "risk_score": 65,
  "reasons": ["vpn_detected", "datacenter_asn", "multi_account_device"],
  "network": { "vpn": true, "proxy": false, "datacenter": true,
               "tor": false, "service": "<VPN service, when known>" },
  "device": { "automation": false, "antidetect": false, "returning": true,
              "linked_accounts": 5, "multi_account": true }
}

The decision is review because of the VPN, not because of the five accounts. multi_account_device is reported and left to your policy, so the simplest move is to refuse the trial in your own handler once device.linked_accounts passes your limit. Set multi-account to Block on the Rules tab instead (it then acts on every check that sends an accountId, logins from a shared family laptop included) and decision becomes block, with engine_decision: "review" keeping the engine's answer and rule_matched naming multi_account. A review rule changes nothing in this example, because the engine already said review.

A card-testing script behind a residential proxy

Same endpoint, called from the checkout route. Example response, selected fields:

{
  "decision": "block",
  "risk_score": 90,
  "reasons": ["proxy_detected", "automation_detected"],
  "network": { "vpn": false, "proxy": true, "datacenter": false,
               "tor": false, "service": "<proxy network, when known>" },
  "device": { "automation": true, "antidetect": false, "emulator": false,
              "tampering_score": 0 }
}

A proxy and automation are both hard signals, so the default is block and the payment intent is never created. Route on decision rather than on a score threshold of your own; risk score thresholds explains why. Every response also reports its own processing time in evaluated_in_ms, and /status publishes measured figures.

Where to put fraud checks: four moments

Seven attacks, but only four places in a typical app where a check changes the outcome:

Signup and the OAuth callback. Fake signups, trial resets, throwaway emails and the first account of every multi-accounting ring. Send the email and the new account's accountId with the evaluation.

Login and password reset. Account takeover. Evaluate after the account lookup and before the password compare and the session, and answer a block exactly like a wrong password. Which endpoints need the check.

Checkout. Card testing. Before the payment intent, so a blocked attempt never costs an authorization fee.

The moment value moves. Bonus claims, referral payouts, promo codes, payout and email changes. This is where bonus abuse gets paid and where a takeover does its damage, so it deserves a second check even when signup and login already have one.

Start in watch mode: log each decision and its reasons, let every visitor through, and read a few days of Events in the console before you enforce anything. Then switch to enforce, which stops a block and holds a review. Decide separately what a check that never answered means for each action: a login may continue, a payout or email change should wait. Log that as your fallback, never as an allow. The quickstart, the SDKs and Workers example and the staged rollout guide cover each step, and fraud API timeouts covers the fallback per action.

What these playbooks do not cover

Every playbook here is about the visit: the network it came through and the browser it ran in. A stolen identity typed in by a real person on an ordinary home connection looks like a customer at that layer. Keep the tools that work on other layers.

Identity and payments. Maskbreak runs no KYC or document checks, scores no orders or transactions and offers no chargeback guarantee. Keep your identity provider, 3-D Secure and your processor's fraud tools; put this check in front of them so fewer bad attempts reach them.

Authentication. It does not replace passwords, passkeys, MFA or session handling. It flags a sign-in that arrives through infrastructure the account's owner is unlikely to use, whether or not the password turns out to be right.

Other companies' data. There is no shared consortium network. Account links stay inside your own account, and email checks stop at the disposable-domain signal.

Lists of IP addresses. A bare IP lookup covers Tor exits and published cloud ranges only. VPN and proxy verdicts, the service name when known, and every device signal need a live visit through POST /v1/evaluate. Why an IP lookup misses proxies.

Looking at it by industry instead? Fraud detection by industry maps the same attacks to SaaS, fintech, e-commerce, gaming, healthcare and government. Terms you meet in the playbooks are defined in the glossary.

Questions about fraud attack types

What are the most common types of fraud attacks on websites and apps?

These playbooks cover the seven that land on account and payment flows: account takeover at login, fake signups, card testing at checkout, bonus and promo abuse, free-trial abuse, multi-accounting and throwaway email addresses. SMS pumping, scraping and friendly fraud are real too, but they hit other endpoints or play out after the order, and sit outside these playbooks.

What is the difference between multi-accounting, bonus abuse and trial abuse?

Multi-accounting is the method: one person running several accounts. Bonus abuse and trial abuse are what the accounts are for, claiming the same welcome offer or referral reward again and again, or restarting a free trial. Detection is the same in all three: send your accountId and read multi_account_device and device.linked_accounts. The check point differs: the claim or payout for bonus abuse, the trial signup for trial abuse, signup and login for ban evasion.

Does a login from a VPN mean an account has been taken over?

No. A VPN on its own returns review under the default policy, because many real customers use one. The takeover pattern is a combination on an established account: a device the account has never used, arriving through a proxy or driven by automation. Proxy and automation block by default; a lone VPN is better answered with a one-time code than a refusal.

Can blocking IP addresses stop these attacks?

Rarely. Residential proxies give every attempt a clean home address, so per-IP limits and blocklists miss them. A bare IP lookup with Maskbreak covers only Tor exits and published cloud ranges; VPN and proxy verdicts, with the service name when known, and every device signal need a live visit evaluated through POST /v1/evaluate.

Do these playbooks replace KYC, MFA or my payment processor's fraud tools?

No. They add a check on the visit in front of those tools. Maskbreak does no identity-document checks, no order or transaction scoring, gives no chargeback guarantee and has no manual review team. Keep MFA, KYC and your processor's checks, and use the decision to choose who reaches them.

How much does it cost to run these checks?

The Free plan includes 10,000 visitor checks a month, every signal included, no card. Paid plans raise the allowance, from €29 a month for 50,000 checks; larger volumes are on Enterprise. Approved public-interest organisations can have the cap removed.

Free plan: 10,000 visitor checks a month, no card. Paid plans from €29 a month.
Pick one playbook, add the check to one endpoint in watch mode and read your own Events before you enforce.