GH GambleHub

Velocity limits and anti-abuse

1) What is velocity and why it is needed

Velocity limits are limits on the frequency and volume of operations within specified time windows. Purpose:
  • reduce fraud and exploitation of bonuses/promos,
  • protect payment infrastructure from "storms" of retrays,
  • keep a healthy conversion by converting dubious attempts to challenge (3DS/SCA) instead of "hard failure" where possible.

Velocity controls complement scoring, AVS/CVV, 3DS2/SCA, and smart routing.

2) Which entities to limit (scopes)

Design limits at multiple levels at the same time:
  • Payment entities: 'card _ token' (vault/network), 'bin', 'issuer', 'psp _ route'.
  • Custom: 'account _ id', 'kyc _ level', 'email/phone'.
  • Technical: 'device _ id' (fingerprint/SDK), 'ip', 'asn', 'session _ id'.
  • Business context: 'bonus _ id', 'campaign _ id', 'country', 'mcc 7995' subtype (deposit/output).
  • Financial: 'amount _ bucket' (micro/medium/large), 'currency', 'payment _ method'.
💡 Principle: at least one personal and one non-personal scope (for example, 'device _ id' + 'card _ token') - this is how you catch both multi-account and "flights" of cards.

3) Windows and counters

Fixed window (T = 15m/1h/24h) - simple, but sensitive to boundaries.
Sliding window - more precisely, counts at a "sliding" interval.
Leaky bucket/Token bucket - smooth out bursts, set stable bandwidth.
Combined: burst (short burst) + sustained (long stream).

Sample sets:
  • 'device _ id ': ≤ 3 authorization attempts in 15 minutes, ≤ 10 in 24 hours.
  • 'card _ token ': ≤ 2 consecutive decline without 3DS; the third is mandatory 3DS.
  • 'ip ': ≤ 5 unique'card _ token' per hour (aka captcha/block).
  • 'account _ id ': ≤ 2 cancelled deposits in a row; further - kuldown 1 hour.

4) Constraint algorithms (short)

Token Bucket (allows bursts):
  • Initialize 'capacity' and 'refill _ rate'.
  • Before each attempt, "take out" 1 token; if there are no tokens - challenge/decline.
Leaky Bucket (smoothing):
  • The queue leaks at a constant rate; incoming events overflow - throttle.
Exponential backoff + jitter (for retrays):
  • 1st repeat: 2-5 min → 2nd: 10-20 min → 3rd: 1-2 h → stop, or transfer to an alternative method.

5) Decision policies

Classify velocity test outcomes:
  • Allow: low risk, within thresholds.
  • Challenge: exceeded the "soft" threshold → 3DS/SCA/captcha/KBA (questions).
  • Throttle: Temporarily restrict (cooldown) with transparent UX.
  • Decline: gross violations (mass search of cards, bot pools, bonus abuse).
  • Reroute: change of PSP/method (e.g. A2A) with '91/96' spike at issuer.

Mini-matrix of examples

'device _ id'attempts to ≥ 3 in 15 minutes and'cvv = N' ≥2 → Decline + captcha.
'card _ token '2 soft-decline → 3DS-challenge (required).
'ip '≥ 5 unique'account _ id' in 30 minutes → Throttle 30 minutes + KYC check.
'account _ id'deposit-withdrawal-deposit in 10 minutes (carousel) → Challenge or amount limit.

6) Velocity for deposits, retreats and withdrawals

Deposits:
  • Protect "micro-stuffing" (many small transactions): limit on quantity and total turnover per T.
  • With the sequence '05 '/' 14 '/' 54' - stop the "search" of details, translate to 3DS.
Retrai:
  • Post the CIT and MIT queues. For MIT, use soft T + 1/T + 24h windows.
  • Soft-decline 'SCA required' → immediately 3DS, do not burn attempts.
Conclusions:
  • Individual limits for amount/frequency: e.g. ≤ 2 outputs/24h and ≤ N per amount/week.
  • KYC "ladder": the higher the check, the higher the limits.
  • Detection "circling": quick deposit and instant withdrawal - manual review/hold.

7) Anti-abuse promo and bonuses

Per-campaign caps: 'bonus _ id' ≤ X activations on 'device _ id '/' ip '/' payment _ fingerprint'.
"Plugs" (money transfer between accounts): graph analysis of common cards/IP/devices.
Cool-off windows: after a bonus deposit - prohibition of instant output, transparent rules in ToS.
Sanctions by level: from temporary locks to "forever," with a log of reasons.

8) Architecture: where to live velocity-rules

Real-time gateway (in orchestrator): solution ≤ 50-100 ms.
Counter storage: in-memory (Redis/KeyDB) + long-term "summaries" (DWH).
Fichestor: single windows/aggregates (15m/1h/24h/7d).
Rule engine + ML scoring: "safety-net" rules on top of the model.

Config flags: "turn on 3DS," "stricter in region X," "pause PSP-A."

Idempotence: protection against duplicates at repetitions/timeouts.

9) Pseudo code of rules (sketch)

pseudo on payment_attempt(ctx):
s = features(ctx) // device/ip/account/bin/score/avs/cvv/history if counter(device, 15m) >= 3 and cvv_fail(device, 15m) >= 2:
return DECLINE(reason="velocity_device_cvv")
if soft_declines(card_token, 1h) >= 2:
return CHALLENGE_3DS()
if uniq_accounts(ip, 30m) >= 5:
return THROTTLE(ttl=30m)
if score > T2 and velocity(account, 1h) > Vmax:
return DECLINE(reason="high_risk_burst")
return ALLOW

10) UX patterns (not breaking conversion)

Clear messages: "Too many attempts in a short time. Please try in 15 minutes or confirm with the bank.
Repeat Later button with timer.
Offering alternatives: A2A/local wallets when throttling.
Auto-3DS without re-entering details with SCA-soft.
Captcha only pointwise (by IP/ASN/bot signals), not to all.

11) Compliance and privacy

GDPR/PII: store minimum identifiers (device hashes, card tokens, last4), transparent policies.
PCI DSS: no PAN/CVV in the logs; velocity events without sensitive data.
PSD2/SCA: convert excesses to challenge where appropriate, instead of total failures.

12) Metrics, alerts, SLO

KPI:
  • Approval Rate (general and when the rules are triggered).
  • False Positive Rate of velocity rules (share of honest blocks of → by subsequent legitimacy).
  • The number of "storms" of retreats and the average recovery time.
  • Percentage of decline → challenge transfers with success.
  • Chargeback rate in segments where limits have worked (we expect ↓).
Alerts:
  • Spike '05/14/54' + increase in attempts> X in 15 min in BIN/ASN cluster.
  • Burst '91/96' → auto-raising T1 threshold + routing in PSP-B.
  • FP-rate rules> target (for example, 1. 5 × weekly median).
SLO:
  • Velocity solution ≤ 100ms p95.
  • Percentage of successful payments transferred to 3DS instead of failing ≥ target.

13) Anti-patterns

Universal "total" limit for all markets and customer types.
Block by'AVS = U/S/G'in countries where AVS does not work normally.
Do not separate CIT/MIT - breaks subscriptions/repeats.
Retrain without jitter and idempotence - takes and storms.
Hide the reasons for refusal - support and toxicity are growing.

14) Implementation checklist

  • Entity map (scopes) and windows (15m/1h/24h/7d).
  • Algorithm selection: sliding + token bucket for bursts.
  • Return normalization: backoff + jitter, separate for CIT/MIT.
  • Integration with 3DS/SCA: auto-challenge for soft overclocks.
  • Separate limits for conclusions and bonuses; graph-checking relationships.
  • Observability: KPI/alert/rule audit dashboards.
  • UX message templates and alternative methods.
  • PCI/GDPR policies: tokens, masking, PII minimization.
  • A/B thresholds tests by market/BIN/ASN and customer profiles.
  • Incident playbooks: Issuer/PSP degradation, bot spike.

15) Summary

Effective velocity limits are multi-level windows and counters for various entities, anti-aliasing algorithms (token/leaky bucket), smart retrays and tight communication with 3DS/SCA and scoring. Such a circuit reduces fraud and abuse, does not stifle conversion, and helps to keep stable monetization with volatility of issuers and traffic.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Telegram
@Gamble_GC
Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.