Know the minute someone tests stolen cards on your app.

A script runs stolen cards through your cheapest credit pack. Zevron sees the burst in your Stripe payments, aims to tell you within 2 minutes, and shows the fix for your stack.

Start 14-day free trial

For AI apps on Stripe · Read-only · No card to start · From $49 a month

Example data: a quiet day, then an attack, run through the real detector.

Fixes for the stack you run. Alerts where you already look.

  • Next.js
  • Express
  • Rails
  • Django
  • Laravel
  • Cloudflare Turnstile
  • hCaptcha
  • reCAPTCHA
  • Stripe
  • Stripe Radar
  • Slack
  • Email
  • Text message
  • Visa
  • Mastercard
  • American Express

Card testing, caught on the way up. An AI app has a signup form, a card field and a cheap credit pack: everything a script needs. We watch for it so you do not have to.

FIG 0.1

Sees the burst

Every charge and card save on your Stripe account, read against your own normal.

FIG 0.2

Aims to tell you in 2 minutes

Email and the app on every plan. Slack and a text on Growth and up.

FIG 0.3

Shows the fix

A rate limit, a CAPTCHA and Radar rules, written for your stack.

One attack, start to finish. An example, run through the same detector that watches a live account.

FIG 0.4 · MOMENT 01
Slack · #alerts
Promptly Studiopromptly-studio.example.com
Card testing attack on your app

9 attempts in 2:30, 8 of them declined. That is how a script checking a list of stolen card numbers looks. We are watching, and we will tell you if it grows or stops.

Different cards
8
From addresses
3
Moment 01 of 05Example data

The example: a quiet day, then 340 attempts in half an hour from 340 different cards. The cost is an estimate: processing fees Stripe keeps on a refund, plus the dispute fees if three in ten of the small charges that got through are reported as fraud.

How it decides. No black box. Each reading starts from the odds that any quarter hour is card testing, about one in a hundred, and each sign moves them.

WHAT IT LOOKS FOR
  • Declines jumpThe share of attempts that fail, against your own normal. A launch raises attempts. It does not raise the share that fail.
  • A new card almost every timeReal customers retry the card they have. A script works down a list, so nearly every failure is a different card.
  • Few sourcesMany cards from one or two IP addresses, or one customer trying nine cards.
  • Tiny amountsA $1 charge or a $0 card save, when you do not usually sell anything that small.
  • Guessing codesWrong CVC, wrong postal code, wrong number, and every kind of decline in one hour.
  • Bursts of new customersCustomers created far faster than you usually get them, each with a failing card.
WHAT IT DOES NOT CALL AN ATTACK
  • A Product Hunt launchFour times the traffic, the usual share declined, people retry and pay.
  • Black FridayMany more attempts, slightly more declines, from customers who have bought before.
  • A failed billing runRenewals are your own charges. Their failures are expired and empty cards, and they are left out.

Each of these is a test in our code, run against made-up traffic that looks like it. They do not alert. A real attack does, usually within a few minutes of the burst crossing the alert line.

What Stripe does not give us. Some of what would make this easy is not in what Stripe hands over. Here is each gap, and what we do instead.

MissingWhyWhat we do
The buyer's IP addressNot on a charge. Stripe keeps it, and so does your server.Put it in payment metadata (one line, we show which). Until then we work from cards, customers and timing, and the page says the address signal is off.
The card's BINNot on a charge on most accounts.We never guess one. Radar can block a BIN you read from your Dashboard, and the page tells you when the rule is unconfirmed.
Whether this is an attackStripe shows each payment on its own. It does not say that two hundred of them are one script.That is the whole product: your normal against this hour, with every line of the reasoning shown.
What Visa countsVisa's enumerated-authorization count is not available to you or to us.An estimate from what we see, labelled as an estimate, with the line it is measured against.
Permission to actA read-only key can read charges. It cannot block, refund or charge.We stay read-only. Radar list blocking is a separate permission you can allow later, and revoke.

If a claim here is wrong for your account, the page shows it as unknown and does not fill it in. Costs are estimates and the page marks which parts are assumed. The Visa reading is ours, not Visa’s.

Then the fix, for your stack. We cannot block a payment, and no read-only tool can. We show you the change that would have stopped this one.

  • Next.js
  • Express
  • Rails
  • Django
  • Laravel
  • Turnstile
  • hCaptcha
  • reCAPTCHA
LIMIT CARD ATTEMPTS PER IP · NEXT.JS
import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";

const limiter = new Ratelimit({ redis: Redis.fromEnv(), limiter: Ratelimit.slidingWindow(6, "10 m") });

export async function POST(req: Request) {
  const ip = req.headers.get("x-forwarded-for")?.split(",")[0] ?? "unknown";
  const { success } = await limiter.limit(`card:${ip}`);
  if (!success) return Response.json({ error: "Too many attempts. Try again in a few minutes." }, { status: 429 });
  // ...create the PaymentIntent or SetupIntent.
}
RADAR RULES
Block if :card_count_for_ip_address_hourly: > 4
Block if :card_count_for_customer_daily: > 5
Block if :declined_charges_per_ip_address_hourly: > 5

These numbers are an example. In the app they are set from your own last two weeks, so they would not have touched one real customer. Also in the checklist: CAPTCHA with a server-side check, 3D Secure, refunding what got through, and block lists.

Where you stand with Visa. An estimate of your enumeration ratio, against both of Visa’s lines.

The example, estimated
28.4%
Visa’s share line
20%
Visa’s count line, a month
300,000

Over Visa's share, nowhere near its count. Visa flags only when both lines are crossed, and your processor can act on far less. In the example, 206 of 726 Visa attempts that reached the bank were part of the attack.

FIG 0.5 · THE VISA LINE

Read-only, and plain about it. What every plan gets, from the first attempt.

How we protect your data

One flat price a month. 14 days free, no card to start. The limits are a guide to which plan fits, and nothing is cut off at them.

10,000
FitsStarter$49 a month after 14 free days
STARTER
$49/month

One app, one Stripe account.

  • Up to 20,000 card attempts a month
  • Alerts by email and in the app
  • Attack timeline and costs
  • Fix checklist with code to paste
Start free trial
GROWTH
$99/month

Alerts where you will see them.

  • Up to 100,000 card attempts a month
  • Everything in Starter
  • Slack and text-message alerts
  • One-click Radar block lists
Start free trial
SCALE
$199/month

For apps with real volume.

  • Up to 1,000,000 card attempts a month
  • Everything in Growth
  • Room for a busy launch or a large user base
  • Priority email support
Start free trial

Billed monthly on one invoice. Cancel from the settings page and billing stops that day.

Questions, answered.

Anything else? Email [email protected] and we’ll get back to you.

How do you connect to Stripe?

One click, read-only. Stripe shows you exactly what we ask for. We can see charges, card saves and customers. We cannot refund, charge or change anything. If you later want one-click Radar blocking, you can allow that separately.

Can you stop an attack?

We tell you and show you how. Stopping it means a CAPTCHA, a rate limit or a Radar rule, and each of those lives in your code or your Stripe account. We give you the code and the rule text for your stack. On the Growth plan and up, if you allow it, we can also add attacking addresses and cards to a Radar list for you.

Is this not what Stripe Radar does?

Radar blocks payments, and Stripe says its own card-testing protection works best on Checkout and the Payment Element. We are the part that tells you what is going on and what to change: when it started, how big it is, what it costs, and how close it gets to the Visa line.

What do you keep?

A record of each card attempt for 70 days: the card's fingerprint (a Stripe hash), brand, last four, country and type, the amount, the decline code, and your customer ID. Never a card number. Email addresses are kept as a hash and a shape, not in full. Attack summaries are kept until you delete your account.

Why can I not see IP addresses or BINs?

Stripe does not put the buyer's IP or the card's BIN on a charge. If you add the IP to your payment metadata (one line, and we show you which), the address signals switch on. BINs we cannot get at all on most accounts, and the page says so instead of guessing.

What is the Visa enumeration ratio?

Visa watches card testing apart from disputes: enumerated authorizations as a share of all authorizations, flagged at 20% together with 300,000 of them in a month. We estimate yours from what we see, and tell you plainly that most small apps are nowhere near the count, and that their processor can act on far less.

Do I need Zevron's chargeback recovery?

No. This is its own product. If you do get chargebacks, we can win some of them back, and you can add that from inside the app when you want it.

What does the trial cost?

Nothing. 14 days, no card to start. After that it is a flat monthly fee, billed on one invoice. Cancel from the settings page and billing stops that day.

The next attack will not be a surprise.

Connect Stripe in a few minutes. Read-only, 14 days free, no card to start.

Card-testing alerts for AI apps · Zevron · Zevron