Stripe card_declined — full recovery guide

The most common Stripe decline code. Here's what it actually means, why it fires, and the exact sequence to recover the payment.

TL;DR

The customer's bank refused the charge but didn't say why. Email the customer with a Stripe Billing Portal link, wait 24h, retry once, then retry again in 3 days if still failing. ~60% recover within 7 days with good follow-up.

What does card_declined mean?

card_declined is a generic refusal from the customer's issuing bank. Stripe passes this through unchanged — Stripe itself didn't decline the charge; the bank did. In most cases the bank refuses to share the specific reason (for privacy and fraud-prevention reasons).

This is by far the most common Stripe decline code, accounting for roughly 40% of all failed payments across SaaS businesses.

Why it happens

A bank can decline with card_declined for any of:

You can't tell which from Stripe's API. That's why the fix has to come from the customer.

Recovery playbook

The sequence that maximizes recovery for card_declined:

WhenActionChannel
+1 hour after failureNotify customer of failure, include Billing Portal link, ask them to check with their bankEmail
+24 hoursRetry the charge (many fraud holds clear in 24h)Stripe auto-retry
+48 hoursSecond email — slightly firmer tone, remind about service interruption riskEmail
+3 daysRetry the charge againStripe auto-retry
+5 daysSMS the customer — 98% open rate vs 20% for emailSMS
+7 daysFinal email, then cancel subscription if still failingEmail

The key insight: the bank's automated block usually clears itself inside 24–72 hours. Your job is to keep the customer engaged so they don't churn while it clears.

What to tell the customer

Stripe does not give you the specific reason, so don't guess in the email. The script that converts best:

Hi [name], your recent payment of $[amount] was declined by your bank. This is usually a temporary fraud-protection block. You can either contact your bank to approve the charge, or update your card using the secure link below — takes about 20 seconds.

Then one button: Update payment method → Stripe Billing Portal URL.

Should you retry automatically?

Yes, but sparingly. Stripe's Smart Retries does this by default if you enable it. Otherwise:

More than 3 retries almost never works — if the bank is still declining after 7 days, the customer has to act.

Related decline codes

Want this playbook to run itself?

RecoverKit handles the emails, SMS, retries, and follow-ups automatically. $19/mo. 7-day free trial.

Start Free Trial →