Short answer
Show a generic “Your card was declined” message and ask for another payment method. Don’t reveal the lost or stolen reason, and don’t retry the card. Log the decline code for your own review, and check whether the account shows other signs of card testing.
Rather not fix it yourself? Stripe Billing Fix and Setup handles it at a fixed price, agreed before work starts.
What the codes mean, and the fix
01
The bank reported the card lost
“The payment was declined because the card is reported lost.” Stripe, Decline codes (lost_card)
The cardholder reported the card lost, or the bank flagged it. The person paying may be the owner using an old card, or someone else.
02
The message shows the real reason
“Don’t report more detailed information to your customer. Instead, present it in the same manner as generic_decline.” Stripe, Decline codes (stolen_card)
Telling a fraudster that a card is flagged helps them test other cards. Use exactly the same text you show for generic_decline, and keep the real code in your server logs. Never send decline_code or the raw Stripe message to the browser.
// server side: log the real code, send one generic message const GENERIC = 'Your card was declined. Please try another payment method.'; function declineMessage(err) { console.warn('decline', err.decline_code); // server logs only return GENERIC; // same text for lost_card, stolen_card and generic_decline }03
Retrying the card
Retrying a card the bank has reported lost or stolen is unlikely to succeed and adds failed attempts. For a subscription, stop retrying that card and ask the customer to add a new one.
04
Many declines in a short time
A run of lost, stolen or generic declines from new accounts can be card testing. Add rate limits on payment attempts per account and per IP, add CAPTCHA to checkout, turn on Radar rules for card testing, and review the payments in the Dashboard.
Checked against the vendor’s docs on : Stripe docs: Decline codes.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA 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
“Working with Simon makes everything run so smoothly and better than I could ask for it. Amazingly communicative, extremely knowledgeable of coding and the backend processes. I strongly recommend.”
Related: Stripe generic_decline · Stripe do_not_honor · Stripe incorrect_zip · Stripe fraudulent decline