# Stripe: incorrect_cvc (the card’s security code is incorrect)

> Stripe returns incorrect_cvc when the bank says the card’s security code is wrong. Show it on the CVC field, let the customer retry, and test with a real CVC.

Canonical: https://app369.com/fix/stripe-incorrect-cvc/
Last updated: 2026-11-09

incorrect_cvc is the Stripe code for a card payment the bank declined because the security code didn’t match. It is often a typo, so the fix is in the checkout: show the error on the CVC field and let the customer try again or use another card.

**Short answer**

Catch the error after confirmPayment, check for code incorrect_cvc, and show a message on the CVC field instead of a generic decline. Keep the same PaymentIntent so the retry goes through the same payment. In tests, enter a CVC, because Stripe skips the check when it is empty, and use test card 4000000000000127 to see the decline.

Rather not fix it yourself? [**Stripe Billing Fix and Setup**](https://app369.com/fixed-price/stripe-billing-setup/) handles it at a fixed price, agreed before work starts.

## **What incorrect_cvc means, and the fix**

1. 01 ### **The customer typed the code wrong**
  > “The CVC number is incorrect.” [**Stripe, Decline codes (incorrect_cvc)**](https://docs.stripe.com/declines/codes) The bank compared the three or four digits with the card and they didn’t match. Nothing was charged.
2. 02 ### **Show the error on the CVC field**
  > “The card’s security code is incorrect. Check the card’s security code or use a different card.” [**Stripe, Error codes (incorrect_cvc)**](https://docs.stripe.com/error-codes) Name the field so the customer knows what to fix. An empty or short CVC is caught by the Payment Element before the bank sees it, so this decline means the digits were complete but wrong.```
const { error } = await stripe.confirmPayment({
  elements,
  confirmParams: { return_url: 'https://example.com/done' },
  redirect: 'if_required',
});
if (error?.code === 'incorrect_cvc' || error?.decline_code === 'incorrect_cvc') {
  showMessage('The security code doesn’t match this card. Check the 3 or 4 digits and try again.');
}
```
3. 03 ### **Let the customer retry**
  > “The customer needs to try again using the correct CVC.” [**Stripe, Decline codes (incorrect_cvc)**](https://docs.stripe.com/declines/codes) Keep the PaymentIntent and confirm it again with the corrected details. Don’t create a new one on every attempt.
4. 04 ### **Your tests never fail the CVC check**
  > “Stripe skips the CVC check if you omit it, so the check can’t fail.” [**Stripe, Testing**](https://docs.stripe.com/testing) If a test leaves the CVC empty, the check is skipped. Enter any three digits, and use card 4000000000000127 to see the incorrect_cvc decline.
5. 05 ### **Radar blocks CVC failures the bank allowed**
  > “Enable this rule to block payments that fail a card issuer’s CVC verification check, unless Stripe evaluates it as low risk.” [**Stripe, Radar rules (CVC and AVS)**](https://docs.stripe.com/radar/rules) Some banks approve a payment even when the CVC check fails. A Radar rule can block those payments too. The customer then sees a generic decline (generic_decline) and the payment shows as blocked in the Dashboard, so an incorrect_cvc handler never runs. Check your Radar rules if many payments are blocked.

Checked against the vendor’s docs on November 9, 2026: [Stripe docs: Decline codes](https://docs.stripe.com/declines/codes); [Stripe docs: Error codes](https://docs.stripe.com/error-codes); [Stripe docs: Testing](https://docs.stripe.com/testing); [Stripe docs: Radar rules](https://docs.stripe.com/radar/rules).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [$950**Stripe Billing Fix and Setup**Subscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.**See scope and start**](https://app369.com/fixed-price/stripe-billing-setup/)
- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Stripe expired_card**](https://app369.com/fix/stripe-expired-card/) · [**Stripe do_not_honor decline**](https://app369.com/fix/stripe-do-not-honor/) · [**Stripe card declined (generic_decline)**](https://app369.com/fix/stripe-card-declined-generic-decline/) · [**Stripe insufficient_funds**](https://app369.com/fix/stripe-insufficient-funds/) · [**Stripe incorrect_number**](https://app369.com/fix/stripe-incorrect-number/)

Questions

## **More on this error**

<details>

<summary>**Was the customer charged? **+</summary>

No. The bank declined the payment, so the PaymentIntent waits for another attempt.

</details>

<details>

<summary>**Can I skip the CVC to avoid this? **+</summary>

Stripe’s card forms ask for it on new cards. Fix the message and the retry instead, so customers can correct a typo.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)