Test Card Numbers for Stripe, Paddle, Polar and Creem
Test card numbers for Stripe, Polar, Lemon Squeezy, Paddle and Creem, for success, declines, 3D Secure and failed renewals, and where the same card differs.
- Runs in your browser
Checked
01Tool
Tool
Every provider here takes any future expiry date.
37 cards
- 4242 4242 4242 4242Stripe
Successful payment
Supports 3D Secure but is not enrolled, so the customer is never asked to authenticate.
VisaCVC: Any 3 digits
- 4000 0566 5566 5556Stripe
Successful payment
A Visa debit card.
VisaCVC: Any 3 digits
- 5555 5555 5555 4444Stripe
Successful payment
MastercardCVC: Any 3 digits
- 2223 0031 2200 3222Stripe
Successful payment
A Mastercard from the 2-series range.
MastercardCVC: Any 3 digits
- 3782 822463 10005Stripe
Successful payment
3D Secure is not supported, so payments go ahead without authentication.
American ExpressCVC: Any 4 digits
- 4000 0000 0000 0002Stripe
Generic decline
card_declined with the decline code generic_decline.
VisaCVC: Any 3 digits
- 4000 0000 0000 9995Stripe
Insufficient funds decline
card_declined with the decline code insufficient_funds.
VisaCVC: Any 3 digits
- 4000 0000 0000 9987Stripe
Lost card decline
card_declined with the decline code lost_card.
VisaCVC: Any 3 digits
- 4000 0000 0000 9979Stripe
Stolen card decline
card_declined with the decline code stolen_card.
VisaCVC: Any 3 digits
- 4000 0000 0000 0069Stripe
Expired card decline
The error code expired_card.
VisaCVC: Any 3 digits
- 4000 0000 0000 0127Stripe
Incorrect CVC decline
The error code incorrect_cvc. Enter a CVC, or Stripe skips the check and it cannot fail.
VisaCVC: Any 3 digits
- 4000 0000 0000 0119Stripe
Processing error decline
The error code processing_error.
VisaCVC: Any 3 digits
- 4000 0000 0000 0341Stripe
Decline after attaching
Attaching it to a Customer succeeds, but charging that customer fails, which is how a renewal fails.
VisaCVC: Any 3 digits
- 4000 0025 0000 3155Stripe
Authenticate unless set up
Off-session payments ask for authentication until the card is set up for future payments. On-session payments always ask.
VisaCVC: Any 3 digits
- 4000 0027 6000 3184Stripe
Always authenticate
Every transaction asks for authentication, however the card was set up.
VisaCVC: Any 3 digitsDiffers by provider
- 4000 0038 0000 0446Stripe
Already set up
One-time and other on-session payments ask for authentication. Off-session payments succeed as if the card were set up.
VisaCVC: Any 3 digitsDiffers by provider
- 4000 0082 6000 3178Stripe
Insufficient funds after authentication
Asks for authentication on one-time payments, then declines every payment with insufficient_funds, even after authentication or set-up.
VisaCVC: Any 3 digits
- 4000 0000 0000 3220Stripe
3D Secure required
The payment succeeds once 3D Secure is completed. Issued in Ireland.
VisaCVC: Any 3 digits
- 4000 0000 0000 0259Stripe
Dispute: fraudulent
With default account settings the charge succeeds, then is disputed as fraudulent.
VisaCVC: Any 3 digits
- 4000 0000 0000 2685Stripe
Dispute: product not received
With default account settings the charge succeeds, then is disputed as product not received.
VisaCVC: Any 3 digits
- 4000 0000 0000 1976Stripe
Dispute: inquiry
With default account settings the charge succeeds, then is disputed as an inquiry.
VisaCVC: Any 3 digits
- 4242 4242 4242 4242Polar
Successful payment
The only card Polar’s sandbox page names, though the sandbox takes Stripe’s test numbers.
VisaCVC: Any
- 4242 4242 4242 4242Lemon Squeezy
Successful payment
VisaCVC: Any 3 digits
- 5555 5555 5555 4444Lemon Squeezy
Successful payment
MastercardCVC: Any 3 digits
- 3782 822463 10005Lemon Squeezy
Successful payment
American ExpressCVC: Any 3 digits, says Lemon Squeezy; Stripe’s list gives Amex 4
- 4000 0000 0000 9995Lemon Squeezy
Insufficient funds
VisaCVC: Any 3 digits
- 4000 0000 0000 0069Lemon Squeezy
Expired card
VisaCVC: Any 3 digits
- 4000 0027 6000 3184Lemon Squeezy
- 4000 0566 5566 5556Paddle
Valid Visa debit card
VisaCVC: Not published
- 4242 4242 4242 4242Paddle
Valid card without 3DS
VisaCVC: Not published
- 4000 0038 0000 0446Paddle
Valid card with 3DS
VisaCVC: Not publishedDiffers by provider
- 4000 0000 0000 0002Paddle
Declined card
VisaCVC: Not published
- 4000 0027 6000 3184Paddle
Initial success, subsequent decline
The first payment goes through and later ones decline, which suits a failed renewal.
VisaCVC: Not publishedDiffers by provider
- 4111 1111 1111 1111Creem
Successful payment
VisaCVC: Any
- 4507 9900 0000 0028Creem
Card declined
VisaCVC: Any
- 4507 9900 0000 0010Creem
Insufficient funds
VisaCVC: Any
- 4507 9900 0000 0044Creem
Incorrect CVC
VisaCVC: Any
Same number, different result
A test card does what the provider’s own page says it does. These numbers appear on more than one provider’s page with different outcomes, so a test written for one provider can pass or fail for the wrong reason at another.
| Provider | What its page says |
|---|---|
| Stripe | Always authenticateEvery transaction asks for authentication, however the card was set up. |
| Lemon Squeezy | 3D SecureLemon Squeezy’s page says only 3D Secure. |
| Paddle | Initial success, subsequent declineThe first payment goes through and later ones decline, which suits a failed renewal. |
Not listed by Polar and Creem.
| Provider | What its page says |
|---|---|
| Stripe | Already set upOne-time and other on-session payments ask for authentication. Off-session payments succeed as if the card were set up. |
| Paddle | Valid card with 3DS |
Not listed by Polar, Lemon Squeezy, and Creem.
Where these work
Stripe
- Test environment
- Sandbox
- How to get there
- Pick a sandbox in the Dashboard’s account picker and use its test keys, which start with pk_test_ and sk_test_.
- Test API
- The live API; test keys reach only test data
- CVC
- Any 3 digits
- Cards from
- docs.stripe.com
Polar
- Test environment
- Sandbox, a separate server
- How to get there
- Sign up again at sandbox.polar.sh and create a sandbox access token. Production tokens do not work there.
- Test API
- https://sandbox-api.polar.sh
- CVC
- Any
- Cards from
- polar.sh
Lemon Squeezy
- Test environment
- Test mode
- How to get there
- Turn on the test mode toggle in the dashboard. A new store starts in test mode, and test-mode API keys see only test data.
- Test API
- The live API; test keys reach only test data
- CVC
- Any 3 digits
- Cards from
- docs.lemonsqueezy.com
Paddle
- Test environment
- Sandbox, a separate account
- How to get there
- Create a sandbox account at sandbox-vendors.paddle.com. Its API keys contain _sdbx and its client-side tokens start with test_.
- Test API
- https://sandbox-api.paddle.com
- CVC
- Not published
- Cards from
- developer.paddle.com
Creem
- Test environment
- Test mode
- How to get there
- Turn on the Test Mode toggle at the bottom of the dashboard’s sidebar and use the test API key.
- Test API
- https://test-api.creem.io
- CVC
- Any
- Cards from
- docs.creem.io
02Guide
How it works
Test and live are kept apart
Where these work, above, shows each provider's test environment. The difference that matters: at Stripe and Lemon Squeezy, test and live share one API and the key alone decides which data a call reaches, while Polar's and Paddle's sandboxes are separate accounts, so nothing made while testing reaches the live dashboard.
Stripe warns that state from one test can carry over to later tests on the same card, so use a different card for each end-to-end scenario.
Testing a failed renewal
Most integrations never see a failed renewal before launch: the first payment works, a later charge fails, and the subscription enters the provider's retry window. At Stripe, 4000 0000 0000 0341 attaches to a customer and then fails every charge. Stripe's billing docs suggest making it the customer's default payment method on a subscription with a trial of a few minutes, so the charge at the end of the trial fails. Expect the attempt about an hour after the trial ends, when the invoice opens. Test clocks move a sandbox subscription through time, so an annual renewal can fail without a year's wait.
Paddle's 4000 0027 6000 3184 does the same in its sandbox: the first payment succeeds and later ones decline. Lemon Squeezy's page names no card for this. Instead, its test mode can simulate the subscription payment webhooks, once a subscription has renewed at least once.
Testing 3D Secure
Stripe's 3D Secure cards differ in when they ask, and for subscriptions that difference is the point, because renewals happen off session. Use 4000 0025 0000 3155 to check that setting the card up at checkout lets later charges go through without the customer, and 4000 0027 6000 3184 to see what your code does when a renewal still asks for authentication.
Two details trip people up. Stripe doesn't redirect to 3D Secure for payments created in its Dashboard, so test through your own checkout or the API. And other Stripe cards may still trigger 3D Secure, but Stripe answers with attempt_acknowledged and skips the challenge, so only the cards in its 3D Secure section test the flow.
Sending webhooks in test mode
A test payment fires the same events a live one does, so a test checkout is the simplest webhook test. To send one event without a checkout:
- Stripe:
stripe listen --forward-tosends sandbox events to a local URL and prints the signing secret, andstripe trigger payment_intent.succeededfires a single event. - Polar:
polar listenforwards a sandbox organization's events to a local URL, andpolar trigger order.createdsends a sample. - Paddle: the webhook simulator sends single events or whole scenarios, such as a subscription renewal, in sandbox and live.
- Lemon Squeezy: in test mode, each subscription's side panel has a Simulate event option.
- Creem: test mode sends events to your test webhook URL, so a test checkout is the way to fire one.
Mistakes that pass in test and fail in production
- Test credentials left in production. Creem warns that its test key or test API host in production makes every payment fail, and Paddle answers a sandbox key on the live API with
forbidden. - Testing only the success card. It proves the checkout loads, not that a decline, a 3D Secure challenge or a failed renewal reaches your code.
03Questions
Questions
- What is the Stripe test card number?
- 4242 4242 4242 4242 is Stripe's basic Visa test card. Use it in a sandbox with test API keys, any future expiry date and any three-digit CVC. Stripe lists more cards for each major brand, for declines, for 3D Secure and for disputes.
- Which test card simulates a failed subscription renewal?
- At Stripe, 4000 0000 0000 0341. It attaches to a customer, but every charge to that customer fails. Put it behind a short trial and the first real charge fails. Paddle documents 4000 0027 6000 3184 as initial success, subsequent decline. The test pages of Polar, Lemon Squeezy and Creem do not mention one.
- Does Polar have its own test cards?
- No. Polar's sandbox takes Stripe's test card numbers, and its page names only 4242 4242 4242 4242, with a future expiry date and a random CVC. The sandbox is a separate server at sandbox.polar.sh with its own accounts and access tokens.
- What test cards does Creem use?
- Creem lists four in its test mode docs. 4111 1111 1111 1111 succeeds, and three cards starting 4507 9900 decline, fail for insufficient funds and fail the CVC check. Any future expiry date, CVV and billing details work.
- Why does the same test card behave differently in Paddle?
- Each provider decides what its test numbers do. 4000 0027 6000 3184 asks for authentication on every payment at Stripe and is the 3D Secure card at Lemon Squeezy, but Paddle documents it as a first payment that succeeds and later ones that decline. Test with the list of the provider you actually use.
- Where do these test cards work?
- Only in each provider's test environment, such as a Stripe sandbox, Lemon Squeezy's test mode or a Paddle sandbox account. Paddle states that its test cards don't work in live accounts. Don't use a real card for testing. Stripe's services agreement forbids it, and Lemon Squeezy warns that it can get a store suspended.
04Sources
Sources
Every fact on this page was read from these pages on .
- Stripe docs, Testingdocs.stripe.com/
testing - Stripe docs, Test your Billing integrationdocs.stripe.com/
billing/ testing - Stripe docs, Webhooksdocs.stripe.com/
webhooks - Stripe docs, API keysdocs.stripe.com/
keys - Polar docs, Sandbox environmentpolar.sh/
docs/ integrate/ sandbox - Polar docs, Webhooks on your machinepolar.sh/
docs/ integrate/ cli/ webhooks - Lemon Squeezy docs, Test modedocs.lemonsqueezy.com/
help/ getting-started/ test-mode - Lemon Squeezy docs, Webhooks guidedocs.lemonsqueezy.com/
guides/ developer-guide/ webhooks - Paddle docs, Sandboxdeveloper.paddle.com/
sdks/ sandbox - Paddle docs, Credit or debit cardsdeveloper.paddle.com/
concepts/ payment-methods/ card - Paddle docs, Webhook simulatordeveloper.paddle.com/
webhooks/ simulator - Creem docs, Test modedocs.creem.io/
getting-started/ test-mode
Found something out of date? Tell us.
Nuxter
Building a SaaS on Nuxt?
Nuxter's Stripe, Polar, Lemon Squeezy and Creem adapters run against each provider's test environment, and a renewal that fails keeps access through a grace period while the provider retries. Stripe's 4000 0000 0000 0341 lets you watch that happen before launch.