Sign in
An image of the Stripe logo
Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
Security
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Support
Overview
Testing
No-code options
HomePayments

Testing

Simulate payments to test your integration.

Not a developer?

Hire a Stripe certified expert or use a prebuilt solution created by one of our verified partners (no code required).

To confirm that your integration works correctly, simulate transactions without moving any money, using special values in test mode.

Test cards let you simulate several scenarios:

  • Successful payments by card brand or country
  • Card errors due to declines, fraud, or invalid data
  • Disputes and refunds
  • Authentication with 3D Secure and PINs

Testing non-card payments works similarly. Each payment method has its own special values.

Because of rate limits, we don’t recommend using test mode to load-test your integration. Instead, see our documentation on load testing.

How to use test cards

Any time you work with a test card, use test API keys in all API calls. This is true whether you’re serving a payment form to test interactively or writing test code.

Testing interactively

When testing interactively, use a card number, such as 4242 4242 4242 4242. Enter the card number in the Dashboard or in any payment form.

  • Use a valid future date, such as 12/34.
  • Use any three-digit CVC (four digits for American Express cards).
  • Use any value you like for other form fields.
An example payment form showing how to enter a test card number. The card number is "4242 4242 4242 4242", the expiration date is "12/34", and the CVC is "567". Other fields have arbitrary values. For instance, the email address is "test@example.com"

Testing a form interactively with the test card number 4242 4242 4242 4242

Test code

When writing test code, we don’t recommend using a card number. Instead, use the corresponding PaymentMethod, such as pm_card_visa.

curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \ -d amount=500 \ -d currency=gbp \ -d payment_method=pm_card_visa

We don’t recommend using card numbers directly in API calls or server-side code, even in test mode. If you do use them, your code might not be PCI-compliant when you go live.

Most integrations don’t use Tokens anymore, but we make test Tokens such as tok_visa available if you need them.

When you’re ready to take your integration live, replace your test publishable and secret API keys with live ones. You can’t process live payments if your integration is still using your test API keys.

Cards by brand

To simulate a successful payment, use test cards from the following list. The billing country for each test card is set to the United States. If you need to create test card payments using cards for other billing countries, use international test cards.

Brand
Number
CVC
Date
Visa Any 3 digitsAny future date
Visa (debit)Any 3 digitsAny future date
MastercardAny 3 digitsAny future date
Mastercard (2-series)Any 3 digitsAny future date
Mastercard (debit)Any 3 digitsAny future date
Mastercard (prepaid)Any 3 digitsAny future date
American ExpressAny 4 digitsAny future date
American ExpressAny 4 digitsAny future date
DiscoverAny 3 digitsAny future date
DiscoverAny 3 digitsAny future date
Diners ClubAny 3 digitsAny future date
Diners Club (14-digit card)Any 3 digitsAny future date
JCBAny 3 digitsAny future date
UnionPayAny 3 digitsAny future date

Most Cartes Bancaires cards are co-branded with either Visa or Mastercard. The test cards in the following table simulate successful payments with co-branded cards.

Brand/Co-brand
Number
CVC
Date
Cartes Bancaires/VisaAny 3 digitsAny future date
Cartes Bancaires/MastercardAny 3 digitsAny future date

Cards by country

To simulate successful payments from many countries, use test cards from the following sections.

Americas

Use these test cards to simulate successful payments from North and South America.

Country
Number
Brand
United States (US)Visa
Brazil (BR)Visa
Canada (CA)Visa
Mexico (MX)Visa

Europe and Middle East

Use these test cards to simulate successful payments from Europe and the Middle East.

Strong Customer Authentication regulations require 3D Secure authentication for online payments within the European Economic Area. The test cards in this section simulate a payment that succeeds without authentication. We recommend also testing scenarios that involve authentication, using 3D Secure test cards.

Country
Number
Brand
United Arab Emirates (AE)Visa
United Arab Emirates (AE)Mastercard
Austria (AT)Visa
Belgium (BE)Visa
Bulgaria (BG)Visa
Croatia (HR)Visa
Cyprus (CY)Visa
Czech Republic (CZ)Visa
Denmark (DK)Visa
Estonia (EE)Visa
Finland (FI)Visa
France (FR)Visa
Germany (DE)Visa
Gibraltar (GI)Visa
Greece (GR)Visa
Hungary (HU)Visa
Ireland (IE)Visa
Italy (IT)Visa
Latvia (LV)Visa
Liechtenstein (LI)Visa
Lithuania (LT)Visa
Luxembourg (LU)Visa
Malta (MT)Visa
Netherlands (NL)Visa
Norway (NO)Visa
Poland (PL)Visa
Portugal (PT)Visa
Romania (RO)Visa
Slovenia (SI)Visa
Slovakia (SK)Visa
Spain (ES)Visa
Sweden (SE)Visa
Switzerland (CH)Visa
United Kingdom (GB)Visa
United Kingdom (GB)Visa (debit)
United Kingdom (GB)Mastercard

Asia-Pacific

Use these test cards to simulate successful payments from Asia and the Pacific.

Country
Number
Brand
Australia (AU)Visa
China (CN)Visa
Hong Kong (HK)Visa
India (IN)Visa
Japan (JP)Visa
Japan (JP)JCB
Malaysia (my)Visa
New Zealand (NZ)Visa
Singapore (SG)Visa
Thailand (TH)Visa (credit)
Thailand (TH)Visa (debit)

Declined payments

To simulate payments that the issuer declines for various reasons, use test cards from this section. This can be useful for testing your integration’s error handling logic. Using one of these cards results in a card error with the given error code and decline code.

To simulate an incorrect CVC decline, you must provide a CVC. It can be any three-digit number. If you don’t provide a CVC, Stripe doesn’t perform the CVC check, so the check can’t fail.

Description
Number
Error code
Decline code
Generic declinecard_declinedgeneric_decline
Insufficient funds declinecard_declinedinsufficient_funds
Lost card declinecard_declinedlost_card
Stolen card declinecard_declinedstolen_card
Expired card declineexpired_cardn/a
Incorrect CVC declineincorrect_cvcn/a
Processing error declineprocessing_errorn/a
Incorrect number declineincorrect_numbern/a

The cards in the previous table can’t be attached to a Customer object. To simulate a declined payment with a successfully attached card, use the next one.

Description
Number
Details
Decline after attachingAttaching this card to a Customer object succeeds, but attempts to charge the customer fail.

Fraud prevention

Stripe’s fraud prevention system, Radar, can block payments when they have a high risk level or fail verification checks. You can use the cards in this section to test your Radar settings. You can also use them to test how your integration responds to blocked payments.

Each card simulates specific risk factors. Your Radar settings determine which risk factors cause it to block a payment. Blocked payments result in card errors with an error code of fraud.

To simulate a failed CVC check, you must provide a CVC. It can be any three-digit number. To simulate a failed postal code check, you must provide a postal code. It can be any valid postal code. If you don’t provide those values, Radar doesn’t perform the corresponding checks, so the checks can’t fail.

Description
Number
Details

Always blocked

The charge has a risk level of “highest”

Radar always blocks it.

Highest risk

The charge has a risk level of “highest”

Radar might block it depending on your settings.

Elevated risk

The charge has a risk level of “elevated”

If you use Radar for Fraud Teams, Radar might queue it for review.

CVC check fails

If you provide a CVC number, the CVC check fails.

Radar might block it depending on your settings.

Postal code check fails

If you provide a postal code, the postal code check fails.

Radar might block it depending on your settings.

Line1 check fails

The address line 1 check fails.

The payment succeeds unless you block it with a custom Radar rule.

Address checks fail

The address postal code check and address line 1 check both fail.

Radar might block it depending on your settings.

Address unavailable

The address postal code check and address line 1 check are both unavailable.

The payment succeeds unless you block it with a custom Radar rule.

Invalid data

To test errors resulting from invalid data, provide invalid details. You don’t need a special test card for this. Any invalid value works. For instance:

  • invalid_expiry_month: Use an invalid month, such as 13
  • invalid_expiry_year: Use a year in the past, such as 70
  • invalid_cvc: Use a two-digit number, such as 99
  • incorrect_number: Use a card number that fails the Luhn check, such as

Disputes

To simulate a disputed transaction, use the test cards in this section. Then, to simulate winning or losing the dispute, provide winning or losing evidence.

Description
Number
Details
FraudulentWith default account settings, charge succeeds, only to be disputed as fraudulent. This type of dispute is protected after 3D Secure authentication.
Not receivedWith default account settings, charge succeeds, only to be disputed as product not received. This type of dispute isn’t protected after 3D Secure authentication.
InquiryWith default account settings, charge succeeds, only to be disputed as an inquiry.
WarningWith default account settings, charge succeeds, only to receive an early fraud warning.

Evidence

To simulate winning or losing the dispute, respond with one of the evidence values from the table below.

  • If you respond using the API, pass the value from the table as uncategorized_text.
  • If you respond in the Dashboard, enter the value from the table in the Additional information field. Then, click Submit evidence.
Evidence
Description
winning_evidenceThe dispute is closed and marked as won. Your account is credited the amount of the charge and related fees.
losing_evidenceThe dispute is closed and marked as lost. Your account isn’t credited.

Refunds

In live mode, refunds are asynchronous: a refund can appear to succeed and later fail, or can appear as pending at first and later succeed. To simulate refunds with those behaviors, use the test cards in this section. (With all other test cards, refunds succeed immediately and don’t change status after that.)

Description
Number
Details
Asynchronous successThe charge succeeds. If you initiate a refund, its status begins as pending. Some time later, its status transitions to succeeded and sends a charge.refund.updated webhook event.
Asynchronous failureThe charge succeeds. If you initiate a refund, its status begins as succeeded. Some time later, its status transitions to failed and sends a charge.refund.updated webhook event.

Available balance

To send the funds from a test transaction directly to your available balance, use the test cards in this section. Other test cards send funds from a successful payment to your pending balance.

Description
Number
Details
Bypass pending balanceThe US charge succeeds. Funds are added directly to your available balance, bypassing your pending balance.
Bypass pending balanceThe international charge succeeds. Funds are added directly to your available balance, bypassing your pending balance.

3D Secure authentication

3D Secure requires an additional layer of authentication for credit card transactions. Use the test cards in this section to simulate payment flows that involve authentication. Other test cards are not enrolled in 3D Secure, which means that no authentication can occur.

3D Secure redirects won’t occur for payments created directly in the Stripe Dashboard. Instead, use your integration’s own frontend or an API call.

Authentication and setup

To simulate payment flows that include authentication, use the test cards in this section. Some of these cards can also be set up for future payments, or have already been.

Description
Number
Details
Authenticate unless set upThis card requires authentication for every payment unless you set it up for future payments. After you set it up, it no longer requires authentication.
Always authenticateThis card requires authentication on all transactions, regardless of how the card is set up.
Already set upThis card is already set up for off-session use. It requires authentication for one-time and other on-session payments. However, all off-session payments succeed as if the card has been previously set up.
Insufficient fundsThis card requires authentication for one-time payments. All payments are be declined with an insufficient_funds failure code even after being successfully authenticated or previously set up.

Support and availability

Stripe requests authentication when required by regulation, or when triggered by your Radar rules or custom code. Even if authentication is requested, it can’t always be performed—for instance, the customer’s card might not be enrolled, or an error might occur. Use the test cards in this section to simulate various combinations of these factors.

3D Secure usage
Outcome
Number
Details
3DS2 RequiredOK3D Secure 2 authentication must be completed for the payment to be successful. By default, your Radar rules request 3D Secure authentication for this card.
3DS RequiredOK3D Secure authentication must be completed for the payment to be successful. By default, your Radar rules request 3D Secure authentication for this card.
3DS RequiredDeclined3D Secure authentication is required, but payments are declined with a card_declined failure code after authentication. By default, your Radar rules request 3D Secure authentication for this card.
3DS RequiredError3D Secure authentication is required, but the 3D Secure lookup request fails with a processing error. Payments are declined with a card_declined failure code. By default, your Radar rules request 3D Secure authentication for this card.
3DS SupportedOK3D Secure authentication might still be performed, but isn’t required. By default, your Radar rules don’t request 3D Secure authentication for this card.
3DS SupportedError3D Secure authentication might still be performed, but isn’t required. However, attempts to perform 3D Secure result in a processing error. By default, your Radar rules don’t request 3D Secure authentication for this card.
3DS SupportedUnenrolled3D Secure is supported for this card, but this card isn’t enrolled in 3D Secure. This means that if your Radar rules request 3D Secure, the customer doesn’t go through additional authentication. By default, your Radar rules don’t request 3D Secure authentication for this card.
3DS Not supported 3D Secure isn’t supported on this card and can’t be invoked. The PaymentIntent proceeds without performing authentication.

3D Secure mobile challenge flows

In a mobile payment, several challenge flows for authentication—where the customer has to interact with prompts in the UI—are available. Use the test cards in this section to trigger a specific challenge flow for test purposes. These cards aren’t useful in browser-based payment forms or in API calls. In those environments, they work but don’t trigger any special behavior. Because they’re not useful in API calls, we don’t provide any PaymentMethod or Token values to test with.

Challenge flow
Number
Details
Out of band3D Secure 2 authentication must be completed on all transactions. Triggers the challenge flow with Out of Band UI.
One time passcode3D Secure 2 authentication must be completed on all transactions. Triggers the challenge flow with One Time Passcode UI.
Single select3D Secure 2 authentication must be completed on all transactions. Triggers the challenge flow with single-select UI.
Multi select3D Secure 2 authentication must be completed on all transactions. Triggers the challenge flow with multi-select UI.
Webview3D Secure authentication must be completed for the payment to be successful. Triggers the challenge flow using a webview. You can check that your return_url dismisses the modal.

Payments with PINs

Use the test cards in this section to simulate successful in-person payments where a PIN is involved.

There are many other options for testing in-person payments, including a simulated reader and physical test cards. See Test Stripe Terminal for more information.

Description
Number
Details
Offline PINThis card simulates a payment where the cardholder is prompted for and enters an offline PIN. The resulting charge has cardholder_verification_method set to offline_pin.
Offline PIN retrySimulates an SCA-triggered retry flow where a cardholder’s initial contactless charge fails and the reader then prompts the user to insert their card and enter their offline PIN. The resulting charge has cardholder_verification_method set to offline_pin.
Online PINThis card simulates a payment where the cardholder is prompted for and enters an online PIN. The resulting charge has cardholder_verification_method set to online_pin.
Online PIN retrySimulates an SCA-triggered retry flow where a cardholder’s initial contactless charge fails and the reader then prompts the user to insert their card and enter their online PIN. The resulting charge has cardholder_verification_method set to online_pin.

Webhooks

To test webhooks, you have two options:

  1. Perform actions in test mode that send legitimate events to your endpoint. For instance, to trigger the charge.succeeded event, you can use a test card that produces a successful charge.
  2. Trigger events using the Stripe CLI or using Stripe for Visual Studio Code.

Rate limits

If your requests in test mode begin to receive 429 HTTP errors, make them less frequently. These errors come from our rate limiter, which is stricter in test mode than in live mode.

We don’t recommend load testing your integration using the Stripe API in test mode. Because the load limiter is stricter in test mode, you might see errors that you wouldn’t see in production. See our documentation on load testing for an alternative approach.

Non-card payments

Any time you use a test non-card payment method, use test API keys in all API calls. This is true whether you’re serving a payment form you can test interactively or writing test code.

Different payment methods have different test procedures:

Sepa direct debit

Create a test PaymentIntent that either succeeds or fails by doing the following:

  1. Create a test PaymentMethod with a test account number.
  2. Use the resulting PaymentMethod in a confirmSepaDebitPayment request to create the test charge.
Account Number
Description
AT611904300234573201The PaymentIntent status transitions from processing to succeeded.
AT321904300235473204The PaymentIntent status transitions from processing to succeeded after three minutes.
AT861904300235473202The PaymentIntent status transitions from processing to requires_payment_method.
AT051904300235473205The PaymentIntent status transitions from processing to requires_payment_method after three minutes.
AT591904300235473203The PaymentIntent status transitions from processing to succeeded, but a dispute is immediately created.

See also

  • Testing your Connect integration
  • Testing Stripe Billing
  • Testing Stripe Terminal
  • Load testing
Was this page helpful?
Questions? Contact us.
View developer tutorials on YouTube.
Check out our product changelog.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
How to use test cards
Cards by brand
Cards by country
Declined payments
Fraud prevention
Invalid data
Disputes
Refunds
Available balance
3D Secure authentication
Payments with PINs
Webhooks
Rate limits
Non-card payments
See also
Stripe Shell
Test mode
▗▄ ▄▟█ █▀▀ ▗▟████▙▖ ██████ ███▗▟█ ███ ███▗▟██▙▖ ▗▟█████▙▖ ███▖ ▀▀ ███ ███▀▀▀ ███ ███▀ ███ ███ ███ ▝▜████▙▖ ███ ███ ███ ███ ███ █████████ ▄▄ ▝███ ███ ▄ ███ ███ ███▄ ███ ███ ▄▄ ▝▜████▛▘ ▝▜███▛ ███ ███ ███▝▜██▛▘ ▝▜█████▛▘ ███ ▀▘
Welcome to the Stripe Shell! This is a graphical user interface of the Stripe CLI. You can use it to discover webhook events and manage your Stripe resources. By pressing ctrl + ` you can toggle it open from any page within the Stripe documentation. - View supported commands: - Listen for webhook events: - Trigger webhook events: - Call Stripe APIs: stripe [api resource] [api operation] (e.g. )
The Stripe Shell is best experienced on desktop.
$