Velocity rules and customer limits: how to set them

A velocity rule counts how often something happens in a time window, such as payments per card in an hour, and acts when the count passes a limit. A customer limit caps attempts or spend per customer. Set both from your own data, use short windows for attacks and longer ones for abuse, count each identifier separately, treat known good customers differently, and review what each rule stopped.

Topic
Risk
Published
Updated
Reading time
8 min

In 30 seconds

  • Every velocity rule has four parts: an identifier, an event, a time window and an action. Change one and you have a different rule.
  • Thresholds should come from your own customers' behaviour, because no scheme or vendor publishes a limit that fits every shop.
  • IP limits catch bots but also shared networks, so pair them with card, device and customer counts and test them on past payments.
  • 12 sources cited
Talk to us
On this page8 sections

Velocity rules are among the simplest fraud controls to write and among the easiest to get wrong. One line in a rules engine can stop a bot in minutes. The same line can stop your best customer on the morning of a sale, and nobody tells you, because a blocked payment leaves no complaint behind.

This article explains how velocity rules and customer limits are built, which identifiers and time windows to use, how to set thresholds without catching good repeat customers, and how to review the result. For where velocity sits among your other fraud checks, read our article on fraud screening and approval rates. For what to do during an attack, see card testing attacks.

What is a velocity rule?

A velocity rule counts events for one identifier over a time window and acts when the count passes a limit. Stripe describes velocity checks as monitoring the frequency and pattern of transactions over a window, per card, per IP address or device ID, per account, per shipping or billing address, or by total amount spent.

Every rule has four parts:

PartOptionsExample
IdentifierCard, customer account, email, device, IP addressCard
EventAttempts, approvals, declines, blocks, amount spentDeclined attempts
WindowMinutes, hours, days, months1 hour
ActionAllow, challenge, review, blockRequire 3-D Secure

The event matters as much as the limit. Stripe’s rule attributes separate total, authorised, declined and blocked charges for each identifier, because five approvals in an hour and five declines in an hour mean different things.

A customer limit is the same idea applied to one customer and often measured in money: maximum spend per day, maximum attempts per order, maximum cards on an account. Adyen’s premium rules include an authorised amount velocity check, which triggers when a shopper’s total spend exceeds a limit within a period, with different scores at different limits.

Which identifiers should you count?

Count several, because each fails in its own way. Visa’s merchant guide advises tracking velocity on more than transactions, including email, IP address and device fingerprints. Stripe’s documentation gives a reason: an attacker can vary one signal, so rules based on a single signal, such as IP address, usually aren’t enough alone.

IdentifierGood at catchingRisk of false positivesCommon use
CardRepeat attempts on one card, card cashingLow to medium: genuine customers retry after a typoAttempts and approvals per hour and day
Customer accountAccount takeover, abuse of promotionsLow, if accounts are realSpend per day, cards per account
EmailRepeat fraud from one personLow to medium: households and offices share addressesOrders per day
DeviceMany cards from one machineMedium: identifiers can change or be sharedDifferent cards per device
IP addressBots and scriptsHigh: many people can share one addressAttempts per minute, new accounts per day
Card shared across customersStolen cards used on several accountsMedium: couples and families share cardsAdyen’s check over three months

The strongest signals are often counts of different things, such as different cards on one account. Stripe offers card counts per customer and per IP address, and Visa advises limiting the cards that can be added per account and session, and the accounts that can be created per IP address in a set time.

Why are IP limits so risky?

Because an IP address is not a person. Cloudflare’s 2025 research on carrier-grade NAT says a single IPv4 address may represent hundreds or even thousands of users, and that these shared addresses are rate limited three times more often than non-shared ones. Cloudflare says the harm falls especially on users in developing regions. For a cross-border merchant, a tight IP limit can act as a block on a mobile network in one of your growth markets. Keep IP limits high, or use them to trigger a challenge rather than a decline.

Which time windows work best?

Short windows catch attacks, and long windows catch abuse. Use more than one for the same identifier.

WindowCatchesExample rule shape
MinutesBots, scripted testingAttempts per IP address per minute
1 hourCard testing, card cashingDeclines per card per hour
1 dayRepeat fraud, stolen cards in useSpend per customer per day
1 week to 1 monthSlow abuse, promotion abuseAccounts per device per week
3 months or moreCards moving between accountsCard used by another customer

Vendor windows are not exact, so learn how yours counts. Stripe’s hourly, daily, weekly and all-time attributes use buckets, so an hourly count may reach back up to 3,900 seconds. Its counts also exclude the payment being processed, so the first attempt in an hour has a value of 0. A rule written as more than 1 will not fire on the second attempt, as you might expect, but on the third. Some of its customer counts also update only every 72 hours at most, which makes them unsuited to fast attacks.

Your own retries belong in this picture. Visa’s rules, in the October 2026 edition, allow up to 20 reattempts in 30 days for most decline codes and forbid any reattempt after a Category 1 decline, where the issuer will never approve. Stripe recommends a maximum of eight retries for charges that permit them. These are ceilings for retry jobs, not targets. Our article on merchant advice codes explains which responses to act on.

How do you set thresholds without blocking repeat customers?

Start from what genuine customers do, not from a number found online. Published figures are examples only. Stripe’s Insights tool filters at more than 10 charges per card per hour. Visa’s guide mentions five authorisations in a set timeframe. Stripe’s Radar guide shows an example block at more than 1 charge per IP address per hour. Those three figures differ widely, and that is the point. Stripe’s own advice is to base thresholds on statistical analysis of past data and to set them per risk profile or segment. Adyen says to set limits that match your shoppers’ normal behaviour.

  1. Export 3 to 6 months of attempts. Stripe’s Radar guide suggests backtesting on the last six months. Include declines and blocks.
  2. Remove known fraud. Take out chargebacks, fraud reports and past attacks, so the numbers show genuine behaviour.
  3. Measure the distribution. For each identifier and window, count attempts per customer. Look at the top of the range, not the average.
  4. Split by segment. New customers, established customers and your largest buyers behave differently. So do markets and methods.
  5. Set the limit above normal. Choose a level that very few genuine customers reach, and accept that it will still catch some.
  6. Add room for peaks. Stripe warns that strict rules can flag normal spikes, such as holiday or sale spending. Raise limits before a planned event, and record that you did.
  7. Treat known good customers differently. Customers with a clean history can have higher limits. Stripe’s attributes include how long ago a card was first seen, which allows this kind of rule.

Example figures, for illustration only.

A fashion shop reviews six months of card attempts on 200,000 customers, excluding known fraud.

Attempts per card in 1 hourShare of customersWhat it suggests
191.0%Normal
2 to 38.5%Typos and retries after a decline
4 to 50.45%Size changes, gift orders, some struggling customers
6 or more0.05%Mostly unusual; worth a look

The shop sets a challenge at 4 attempts and a block at 8. A block at 4 would have stopped 1,000 genuine customers in six months, which is 0.5% of the group. The challenge lets them finish, and the block is kept for behaviour its data suggests is rare.

Should a rule block, challenge or review?

Match the response to your certainty. Stripe’s article suggests scaling it from an alert to a decline, a one-time password or a temporary hold, because frequent false positives frustrate customers and can send them to competitors. In Visa’s guide, CAPTCHA is the tool for stopping automated activity such as five authorisations from one IP address, which keeps the door open for people.

Order also matters. In Stripe’s Radar, 3-D Secure rules run first, then allow, block and review rules, and an allow rule stops further checks. A broad allow rule can therefore switch off your velocity blocks. Whatever tool you use, learn its evaluation order before you write the rule.

How do you review the result?

A rule is finished only when you have measured what it did. Stripe’s guidance is plain: it is uncommon to find a perfect rule, so each one is a trade-off.

Before going live, run the rule against past payments. Stripe’s rule testing sorts matches into disputes and fraud warnings, refunds, blocked and failed payments, and succeeded payments. If your tool has no such test, run the rule in report-only mode. The fraud screening article covers shadow testing and how to measure false positives.

After launch, review each rule monthly:

  • Volume. How many payments did it stop? A rule that fires too often is probably mis-set; one that never fires may be dead.
  • Who it stopped. How many blocked customers had a good history? How many paid soon after by another route?
  • Fraud caught. Of the payments it stopped, how many showed other signs of fraud? Stripe suggests feeding true and false positives back into your thresholds.
  • Rate by segment. A rule that fires mostly in one country may be catching a shared mobile network, not fraud.
  • Support tickets. Ask your team which messages customers see, and whether they can tell why a payment stopped.

Three vendor details can distort this review. Adyen counts abandoning a redirect or 3-D Secure step as an attempt, even though it doesn’t appear in your payments list. Its velocity rules skip recurring transactions unless you enable them. And they trigger per merchant account, not across a company, so a multi-brand group may see separate counts.

What are the common mistakes?

  • Copying someone else’s limit. A shop selling phone top-ups and one selling sofas have nothing in common.
  • Using IP alone. It misses rotating bots and hits shared networks.
  • Counting attempts only. Declines, blocks and spend tell you different things.
  • Forgetting the save-card step. Stripe says testers prefer card setup, so limit cards per account too.
  • Ignoring retries and cascades. Your own retries and cascade steps can push genuine customers over a limit.
  • Never loosening. A limit set during an attack should end with the attack.

How does Omno apply customer limits?

In Omno, customer rules assign providers, methods and volume thresholds by customer tag, so a new customer and a long-standing one can have different limits. You can set amount and volume limits per provider and method, block a customer fully or from specific methods, block cards, and use blacklists shared across partner merchants, with fraud scoring on every transaction. The risk controls page lists the settings.

Key facts

  • Visa's merchant guide gives five authorisations from one IP address or card number in a set timeframe as an example of automated activity to stop (Visa, 2026).
  • Stripe's Radar Insights uses more than 10 charges per card number per hour as its default high velocity filter (Stripe docs, 2026).
  • Visa's rules allow up to 20 reattempts in 30 days for most declines, and none after a Category 1 decline (Visa Rules, 2026).
  • Stripe's velocity counts exclude the current payment, and an hourly window can reach back up to 3,900 seconds because of five-minute buckets (Stripe docs, 2026).
  • Cloudflare found that carrier-grade NAT addresses are rate limited three times more often than non-shared addresses (Cloudflare, 2025).
  • Adyen says velocity rules trigger per merchant account, and skip recurring transactions by default (Adyen docs, 2026).

Changelog

  • First published.

Frequently asked questions

What is a good velocity limit for payments per card?

There is no universal figure. Stripe's Insights tool uses more than 10 charges per card per hour as a default filter for high velocity, and Visa's guide mentions five authorisations in a set timeframe as an example, but neither is a recommended limit for your shop. Start from your own data: find how many attempts genuine customers make, then set the limit above that.

Should a velocity rule block or challenge?

Match the action to your certainty. Extreme bursts can be blocked. Borderline counts are better sent to CAPTCHA, 3-D Secure or review, so a genuine customer can still finish. Stripe's article on velocity checks describes scaling the response, from an alert to a decline, a one-time password or a temporary hold.

Do failed attempts count towards a velocity limit?

It depends on the tool and on how you write the rule. Stripe offers separate counts for total, authorised, declined and blocked charges. Adyen counts abandoning a redirect or 3-D Secure step as an attempt, even though it doesn't appear in your payments list. Check this before you set a limit, or a customer who struggled with authentication may be blocked.

How often should velocity rules be reviewed?

Monthly as a routine, and after a sale, a new market launch or a change in checkout flow, because each can shift normal behaviour. Also review after a card testing attack, so emergency limits don't stay in place and catch real customers.

Do velocity rules work across several brands or websites?

Only if the counts are shared. Adyen says velocity rules trigger per merchant account and are not aggregated for the company account, so a customer can reach the limit separately on each. If you run several brands, check how your tool scopes the count before you rely on it.

esc
↑↓ to move ↵ to open All results