- Blog
- Stripe Bookkeeping
- Stripe Test Cards: Every Number for Payments, Declines & 3D Secure
Stripe Test Cards: Every Number for Payments, Declines & 3D Secure

You're wiring up Stripe checkout. You need to know it works before a real customer hits it. That's what stripe test cards are for. They're fake card numbers that trigger one exact result: a good charge, a decline, a 3D Secure prompt, or a fraud flag. No real money moves.
Every card here only works with Stripe's test-mode API keys (sk_test_… and pk_test_…). Flip your dashboard to test mode. Pick a number below, and Stripe runs the exact case that card is built for. We show you where to grab those keys and where to paste them further down, in the "Where to paste your test cards" section.
This page covers every card type Stripe documents: working payments by brand, 3D Secure, declines by code, fraud and Radar, disputes, refunds, country cards, and the newer pm_card_* PaymentMethod tokens. Every number below is copied straight from Stripe's own docs.
What is a Stripe test card number?
A Stripe test card number is a fake card that only works with Stripe's test-mode API keys (sk_test_…/pk_test_…). Each one triggers one exact result: a good charge, a decline, a 3D Secure prompt, or a fraud flag. The universal success card is4242 4242 4242 4242(Visa). It works with any future expiry date, any 3-digit CVC, and any ZIP code. Stripe documents dozens of these numbers, one for nearly every case you'd want to test before going live. None of them move real money. A test card just fails in live mode. A real card in test mode breaks the Stripe Services Agreement. Test mode settles right away. Live mode takes a few days.
Key Takeaways
- The one card to memorize:
4242 4242 4242 4242is Stripe's universal Visa success card. Reach for it any time you just need a charge that works. - CVC, expiry, and ZIP are throwaway values: any 3-digit CVC (4 digits for Amex), any future expiry date, any ZIP code. A Stripe test card CVC is never checked against anything real.
- Test cards do nothing in live mode: they only work with test-mode keys (
sk_test_…/pk_test_…). A real card in test mode breaks Stripe's terms. - The number picks the result: decline codes, 3D Secure prompts, and Radar fraud flags each get their own card. Match the row to the case you're testing, not just the happy path.
- PaymentMethod tokens skip the raw number entirely: pass
pm_card_visaor a similar token as thepayment_methodvalue when you test at the API level. - Mixing test and live keys is the top setup mistake: check which mode you're in before you paste anything into your checkout form.
Grab-and-go: the test cards you'll copy most
Here are the numbers you'll reach for again and again. Each block has a copy button, so you can grab the raw digits and paste them straight into your checkout form or API call. The full reference tables are further down.
Visa, successful payment (the one to memorize):
14242424242424242
Mastercard, successful payment:
15555555555554444
American Express, successful payment (use a 4-digit CVC):
1378282246310005
Generic decline:
14000000000000002
Insufficient funds decline:
14000000000009995
Requires 3D Secure authentication:
14000002760003184
PaymentMethod token for API tests (no raw number needed):
1pm_card_visa
Expiry is any future date, CVC is any 3 digits (4 for Amex), and the ZIP is any value. These work only in test mode. The tables below cover every other card Stripe documents.
Stripe test cards for successful payments (every brand)
See how Growthy handles Stripe Bookkeeping
Free during alpha. Read-only access. You review every sync.
Get startedUse these test credit card numbers any time you need a charge that works, across every brand your customers might use, not just Visa.
Brand | Card number | CVC |
|---|---|---|
Visa |
| Any 3 digits. |
Visa (debit) |
| Any 3 digits. |
Mastercard |
| Any 3 digits. |
Mastercard (2-series) |
| Any 3 digits. |
Mastercard (debit) |
| Any 3 digits. |
Mastercard (prepaid) |
| Any 3 digits. |
American Express |
| Any 4 digits. |
American Express (alt) |
| Any 4 digits. |
Discover |
| Any 3 digits. |
Discover (alt) |
| Any 3 digits. |
Discover (debit) |
| Any 3 digits. |
Diners Club |
| Any 3 digits. |
Diners Club (14-digit) |
| Any 3 digits. |
JCB |
| Any 3 digits. |
UnionPay |
| Any 3 digits. |
UnionPay (debit) |
| Any 3 digits. |
UnionPay (19-digit) |
| Any 3 digits. |
See the full list and current test-mode keys on Stripe's site.
3D Secure test cards
Need a 3D Secure test card? Some cards must pass 3D Secure under SCA rules. These numbers force each result on purpose, so your whole auth flow gets tested, not just the happy path.
Scenario | Card number | Behavior |
|---|---|---|
Requires authentication (SCA) on all transactions |
| Always prompts 3DS. |
Requires auth for off-session unless set up |
| 3DS unless saved for future use. |
Already set up for off-session |
| On-session needs auth; off-session succeeds. |
Auth required, then declined |
| Authenticates, then declines. |
3DS2 required, succeeds |
| Must complete 3DS2. |
3DS2 required, declined after auth ( |
| Completes 3DS, then declines. |
3DS supported but not required |
| Optional 3DS. |
Supports 3DS but not enrolled (no prompt) |
| Same as basic Visa. |
Does not support 3DS |
| Amex, proceeds without auth. |
See how the 3D Secure flow works in Stripe's docs.
Declined payments: test every decline code
A generic decline card covers catch-all error handling in your checkout. To run a stripe declined card test for one exact reason, like insufficient_funds or stolen_card, use the matching row below. That tests the specific decline your code will hit, not a generic stand-in.
Decline code | Card number | Error code returned |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Attaches to Customer, then charge fails |
|
|
See the full decline code list on Stripe's site.
Fraud and Radar test cards
These numbers trigger Stripe Radar's risk score and the AVS/CVC checks. Use them if your code reacts to a risk level or a check failure, like a manual-review queue.
Scenario | Card number |
|---|---|
Always blocked (risk = highest) |
|
Highest risk |
|
Elevated risk |
|
CVC check fails |
|
ZIP / postal check fails |
|
Address line 1 check fails |
|
Both ZIP and line 1 fail |
|
Dispute and chargeback test cards
Use these to test your dispute logic, including the charge.dispute.created webhook, without waiting on a real chargeback.
Dispute type | Card number |
|---|---|
Fraudulent (3DS-protected) |
|
Product not received |
|
Inquiry |
|
Early fraud warning |
|
Multiple disputes |
|
Refund test cards (async outcomes)
Refunds aren't always instant. These two cards test the pending-then-succeeds and succeeds-then-fails paths, through the refund.updated and refund.failed webhooks.
Scenario | Card number |
|---|---|
Refund pending, then succeeds ( |
|
Refund succeeds, then fails ( |
|
Country-specific test cards
This is a sample, not the full list. For every country Stripe covers, use the link below.
Country | Card number | Brand |
|---|---|---|
United States |
| Visa. |
Canada |
| Visa. |
Mexico |
| Visa. |
Brazil |
| Visa. |
United Kingdom |
| Visa. |
France |
| Visa. |
Germany |
| Visa. |
Australia |
| Visa. |
India |
| Visa. |
Japan |
| Visa. |
See the full country list on Stripe's site.
PaymentMethod test tokens (no raw card numbers)
Pass these as the payment_method value instead of a raw card number, when you test at the API level: the Payment Element, SetupIntents, or saved cards. Same results as the tables above, no card number needed.
- Success by brand:
pm_card_visa,pm_card_visa_debit,pm_card_mastercard,pm_card_amex,pm_card_discover,pm_card_diners,pm_card_jcb,pm_card_unionpay. - Declines:
pm_card_visa_chargeDeclined,pm_card_visa_chargeDeclinedInsufficientFunds,pm_card_visa_chargeDeclinedLostCard,pm_card_visa_chargeDeclinedStolenCard,pm_card_chargeDeclinedExpiredCard,pm_card_chargeDeclinedIncorrectCvc,pm_card_chargeDeclinedProcessingError,pm_card_visa_chargeDeclinedVelocityLimitExceeded. - 3D Secure:
pm_card_threeDSecure2Required,pm_card_threeDSecureRequiredChargeDeclined,pm_card_threeDSecureOptional,pm_card_authenticationRequired. - Disputes:
pm_card_createDispute,pm_card_createDisputeProductNotReceived,pm_card_createDisputeInquiry. - Fraud:
pm_card_radarBlock,pm_card_riskLevelHighest,pm_card_riskLevelElevated,pm_card_cvcCheckFail,pm_card_avsZipFail.
Older tokens use tok_ (for example tok_visa, tok_visa_chargeDeclined). Most new setups use PaymentMethods instead.
Where to paste your test cards (test keys and setup)
Stripe card testing only works with test-mode keys, never live ones. Grab yours from the Stripe Dashboard. They start with sk_test_… (secret) and pk_test_… (public). A "Test mode" toggle in the dashboard switches your whole account view between test and live data.
Never mix test and live keys in the same setup. A test card against a live key just fails. But a live key sitting in what you think is a test run is how a real charge slips through.
Once you're in test mode, paste any card number from this page into Stripe Checkout, the Payment Element, or a raw Elements card field. Same screen your real customers see, fake number, exact result. No separate sandbox needed. Test mode settles right away. Live mode takes a few days, like any real charge.
One rule doesn't bend: never put a real card into test mode, even to "just check" something. It breaks the Stripe Services Agreement, and it won't show you anything a test card can't already show.
See test-mode keys and the full setup steps on Stripe's site.
Frequently asked questions
Quick answers to what people ask most about stripe test cards, straight from Stripe's own docs.
Are Stripe test cards real card numbers?
No. They're numbers Stripe reserves for testing, tied to no real account and no real person. They only work with test-mode keys, and they never move money. The best-known one is 4242 4242 4242 4242, the standard Visa success card used all through this guide.
What CVC and expiration do I use?
Any future date works (for example 12/34), any 3-digit CVC (4 digits for American Express), and any ZIP or postal code. Stripe doesn't check these against anything real in test mode.
Can I test Stripe on production with my own card?
No. Test cards and test keys stay in test mode only. A real card number in test mode breaks the Stripe Services Agreement. Use test keys with test cards, and live keys with real cards. Live-mode charges move real money. Test-mode charges never do.
How do I test a declined payment?
Use generic_decline, 4000 0000 0000 0002, for a catch-all decline. To test one exact reason, like insufficient_funds, use the matching row instead: 4000 0000 0000 9995 triggers insufficient_funds on the nose.
What's the 3D Secure test card?
4000 0027 6000 3184 always prompts 3D Secure, no matter what. To test auth that only fires for off-session charges unless the card was saved first, use 4000 0025 0000 3155 instead.
Do test cards charge real money?
No. Nothing in test mode settles to a real account, on either side. Test mode exists so you can run every case without moving a dollar.
Why test with multiple cards?
Because your real customers won't all hand you the same one. They'll pay with Visa, Mastercard, Amex, and Discover. Some will get declined. Some will trigger 3D Secure. Some will trip a fraud rule. One card, one happy path, leaves every one of those cases unchecked.
Where can I find the full official list of Stripe test cards?
Stripe's own testing page at docs.stripe.com/testing is the source, and it covers more country cards and edge cases than fit on this page. This guide sorts and links back to that list. Stripe's docs stay the last word.
Where Growthy fits in
Get your checkout working, and money starts moving for real. It doesn't land as line items, though. It lands as one net payout: a single $3,847.92 deposit that's actually 47 charges minus 3 refunds minus $127 in fees, all bundled together. Matching that number back to the sales, refunds, and fees behind it is a real bookkeeping problem, and it's not one this guide tries to solve.
This guide comes from Growthy. We build AI bookkeeping software that matches your Stripe payouts back to the charges, refunds, and fees behind them. For how the Stripe fees hit your chart of accounts, why one payout isn't one sale, and what to do when your deposits don't match your sales, start with our Stripe bookkeeping guide. Past testing and into real revenue? Get started with Growthy.
Growthy is bookkeeping software, not a CPA firm. This content is educational, not professional advice.
Verified against docs.stripe.com/testing on 2026-07-15.
See It Work on Your Data
Free during alpha. Read-only access. You review every sync.
Bobby Huang • Partner, SDO CPA LLC / CEO, Growthy
CPA firm partner who got tired of watching bookkeepers click categorize 500 times a day. Built Growthy to fix it.
View author profileGrowthy is dedicated to helping businesses of all sizes make informed decisions. We adhere to strict editorial guidelines to ensure that our content meets and maintains our high standards.
Keep reading

Stripe Chargeback Accounting: Refunds, Disputes, and Fees
Stripe refunds and chargebacks look similar in payouts but hit the books differently. Use the right entries, reserve logic, and fee treatment here now.

Best Stripe Accounting Tools Compared (2026)
A practitioner comparison of A2X, Synder, Bookkeep, Acodei, native Stripe-QBO sync, and Growthy for Stripe reconciliation, with pricing, model breakdowns, and a decision table.

Stripe Payouts vs. Individual Transactions: Which Booking Method?
Payout-level summary journal entries vs. individual transaction booking in Stripe: when each method works, where individual booking breaks, and why most bookkeepers land on the summary approach.