The short answer
Enter 123 as the CVV for every 3-digit Stripe test card (Visa, Mastercard, Discover, Diners Club) and 1234 for American Express. Stripe test cards accept any 3- or 4-digit code, so 123 is a convention, not a requirement. The CVC check fails only when you use a designated decline card such as 4000 0000 0000 0127.
Test cards work in test mode only. No live account, cardholder, or bank is involved, and no charge can settle.
Prerequisites
- A Stripe account with test mode turned on
- Test API keys that start with pk_test_ and sk_test_
- A payment form, client library, or the Dashboard payments page where you can type card data
How to run a CVV test
- Open the Stripe Dashboard and confirm the Test mode toggle is on.
- Create a payment intent or open a test checkout page that accepts card data.
- Type the card number 4242 4242 4242 4242.
- Type 123 in the CVC field.
- Type a future expiration date, for example 12 / 34.
- Type any postal code, for example 10001, unless you are testing an address decline.
- Submit the payment and confirm the charge returns a succeeded status.
Test cards that return CVC results
- 4000 0000 0000 0127: incorrect CVC. The card number passes validation and the CVC check fails.
- 4242 4242 4242 4242: CVC check passes with any three digits.
- 3782 822463 10005: American Express, four-digit CID, use 1234.
- 6011 1111 1111 1117: Discover, three-digit CVC, use 123.
Other decline cards worth keeping
- 4000 0000 0000 0002: generic decline.
- 4000 0000 0000 9995: insufficient funds.
- 4000 0000 0000 0069: expired card.
- 4000 0000 0000 0119: processing error.
About the v1 in the search term
The v1 label comes from Stripe's older token and charge endpoints, which sit under the /v1/ path in the API. Stripe does not publish a separate v1 test card set. The same test numbers and the same CVC rules apply across API versions and across Tokens, PaymentIntents, and Checkout, so a card that returns incorrect_cvc today returns the same code on any pinned version.
When you read a decline, check the decline_code field instead of the raw message. incorrect_cvc maps to the CVC check and appears only when the simulated issuer triggers it. A real failed CVC looks the same from your integration's point of view, which is why the test set includes one card built for it.