The Decline Screen Is Your Second-Best Checkout Page: A Copy Teardown for Failed Payments
The Decline Screen Is Your Second-Best Checkout Page: A Copy Teardown for Failed Payments
Most SaaS checkout copy stops at the pay button. But when payment fails, you get a second chance to close the sale. Most teams waste it with a red box that says 'Payment failed' and a generic 'Try again' button. That is not an error state. It is a checkout page with worse hierarchy, worse trust, and worse guidance.
Your failed-payment screen is a checkout page, not an error state
When a card is declined, the buyer is still committed. They want the thing. The decline creates anxiety: Did I get charged? Is my card broken? Is this a scam? Your copy has to answer those questions before the user decides to leave.
- Clarity: Say what happened in plain language. No codes, no 'transaction declined by issuer'.
- Trust: Confirm whether the charge went through. If it did not, say so.
- Guidance: Give one primary next step and one escape hatch.
- Hierarchy: The retry CTA should be the most prominent thing on the screen, not the error text.
This is a classic Nielsen-style heuristic moment: visibility of system status, match between system and real world, and error recovery. Not a checklist. A moment where copy decides whether the buyer tries again.
The three questions a decline screen must answer in 3 seconds
- What happened? 'Your bank declined the card ending in 4242.'
- What do I do now? 'Try another card' or 'Contact your bank.'
- Will I be charged? 'You have not been charged.'
If your screen answers only the first question, you are asking the buyer to do detective work. They will not.
Before/after: rewriting the decline message and retry CTA
Here is the same failed payment, written two ways.
| Before | After | Why it works |
|---|---|---|
| Headline: Payment failed. Error code: card_declined. | Headline: Your bank declined the card ending in 4242. You have not been charged. | Names the card, removes blame, kills billing anxiety. |
| CTA: Retry | CTA: Try another card | Gives a new action instead of repeating a failed one. |
| Body: Please try again or contact support. | Body: If you want to use this card, call the number on the back. Otherwise, add a different card. | Splits the path by user intent. |
Other common decline reasons, rewritten:
- Insufficient funds
- Before: 'Insufficient funds.'
- After: 'That card was declined for insufficient funds. No charge was made. Try a different card or update your billing details.'
- CTA: 'Use a different card'
- Authentication required
- Before: 'Authentication failed.'
- After: 'Your bank needs one more step to approve this payment. You have not been charged yet.'
- CTA: 'Finish bank verification'
- Expired card
- Before: 'Invalid card.'
- After: 'That card expired in 04/24. Update the date or use another card.'
- CTA: 'Update card details'
If you want to know which failure state is costing you the most, run a free audit on your checkout flow and look at the P0 items first.
Mini playbook: rewrite your decline screen in 20 minutes
- Pull your top three decline reasons from your payment provider.
- For each one, write a headline that says what happened and whether the buyer was charged.
- Write one primary CTA that names the next action. Write one secondary link for the escape hatch.
- Delete every error code, internal label, and 'try again'.
- Test with a real failed card in test mode. Read the screen out loud. If it sounds like a robot, rewrite it.
What to fix first: P0/P1/P2
P0 — Stop the bleed
- Replace 'Payment failed' with a plain-language reason.
- Add 'You have not been charged' when true.
- Change 'Try again' to a specific CTA like 'Try another card'.
P1 — Reduce repeat failures
- Name the card last four.
- Add per-reason copy for insufficient funds, expired card, and authentication.
- Put the primary CTA above the fold on mobile.
P2 — Recover the almost-lost
- Add a recovery email with a one-click link back to checkout.
- Track recovery rate by decline reason.
- Test a secondary path: 'Contact your bank' vs 'Use a different card'.
The retry CTA is not 'Try again'
'Trying again' asks the buyer to repeat an action that already failed. That is friction disguised as a button. Better options:
- 'Try another card' — when the card is the problem.
- 'Update card details' — when the data is the problem.
- 'Finish bank verification' — when the bank needs a step.
- 'Contact your bank' — when only the bank can fix it.
Your decline screen is not a dead end. It is a conversion page. Write it with the same care as your pricing page. If you want a prioritized P0/P1/P2 fix list for your own checkout, start a free audit at /signup. You will see exactly which copy and CTA changes to make first.