Card declines happen to ~3-5% of attempts in our customer base. Most are recoverable with the right workflow. Here's the playbook.
What "failed" means
Stripe will surface one of these failure reasons:
- insufficient_funds — card balance too low
- card_declined — bank declined; often fraud-flagged or address mismatch
- expired_card — card past expiration
- incorrect_cvc — typo on CVC
- processing_error — Stripe couldn't reach the bank; transient
- fraudulent — Stripe's risk engine declined; rare
Each maps to a different recovery path.
Real-time handling on the booking page
When a customer's card declines mid-booking:
- Stripe surfaces the failure reason via Elements
- SalesThumb shows the customer a friendly message: "Your card was declined. Please try a different card or use Apple Pay."
- The booking is held in "deposit pending" for 30 minutes (configurable). Customer can retry without losing the slot.
Front-desk recovery for higher-ticket jobs
For a $2,000 deposit on a PPF install, you can't lose the booking. Workflow:
1. SalesThumb alerts front desk: "Deposit failed for {customer}. Job at risk." 2. Front desk calls the customer within 15 minutes. 3. Three retry paths: - Try a different card — most common fix. Customer pulls out a different card; front desk re-charges via the customer detail page. - Use ACH — for amounts over $1,500, ACH is cheaper for the customer AND has a higher acceptance rate. Send via SalesThumb's "Send ACH link" button. - Pay in person at drop-off — last resort. Note in the customer record that deposit is held pending. 4. If none work in 2 hours, free up the slot.
Recovery for recurring failed cards
If a customer's card has failed 3+ times in the last 90 days:
- Auto-flag the customer record
- Front desk should require a different payment method at next booking
- Some shops require ACH from these customers; some require in-person payment
Settings → Customers → Risk flags shows which customers have a payment history concern.
Subscription card update
For detail shops with subscription customers, you'll occasionally get "expired_card" on monthly renewals. Workflow:
- Stripe Connect's "Update payment method" link automatically sends to the customer 7 days before card expiration
- If card actually expires before update: subscription pauses; customer gets an SMS + email
- 3 days later if still no update: subscription cancels; customer gets a "we miss you" SMS with a one-tap reactivation link
This recovers 60-70% of expired cards without manual intervention.
What NOT to do
- Don't tell the customer "your card was declined" in front of others. Embarrassing. Use SMS or private conversation.
- Don't retry the same card 5 times in a row — Stripe will flag the activity as suspicious.
- Don't ask for cash via Venmo / Cash App. Off-platform payments break your bookkeeping and create dispute risk.
When to refund a deposit
If a customer is dealing with a real card issue and wants to cancel rather than struggle:
- Refund the deposit fully via SalesThumb → invoice → Refund
- Note the cancellation reason as "payment issue"
- Optional: invite them to rebook with no deposit required for 30 days
Better to lose the deposit than gain a poor review.