15 Checkout Error Messages That Need Clearer UX and Recovery Guidance
Fifteen common checkout errors, from declined cards to expired carts and unserviceable postcodes, with clearer wording and a recovery path for each.
Which checkout errors need better messages?
The errors that most need work are payment declines, authentication failures, timeouts and pending payments, address and delivery problems, discount code rejections, stock and price changes, expired sessions and order limits. For each, say what happened in plain language, tell the customer what to do next, keep everything they have entered, and offer another way to pay or get help. Never reveal fraud-related decline reasons.
This list is for ecommerce managers, designers and developers. The wording follows the GOV.UK Design System's error message guidance, and the payment examples follow Stripe's decline code documentation, both checked on 28 October 2026. The example messages are suggestions to adapt and test, not proven wording. For the wider checkout, see ecommerce checkout UX.
Principles for every message
- Say what went wrong and how to fix it. GOV.UK's guidance is to explain what went wrong and how to fix it, in plain English.
- Be specific. "Something went wrong" helps nobody; name the problem.
- Put it next to the problem and repeat it in a summary at the top for screen reader users.
- Keep the customer's input. Never clear the form after an error.
- Avoid blame and jargon. No "invalid", "illegal" or error codes in customer-facing text.
- Offer a way forward: another payment method, edit the address, contact support.
Payment errors
1. Generic decline. Instead of "Transaction failed": "Your card was declined. Try another card or payment method, or contact your bank." Use this wording too for declines related to suspected fraud, lost or stolen cards, which Stripe says should be presented as a generic decline.
2. Insufficient funds. Stripe's suggested next step is to use another payment method. "Your card was declined. Try a different card or payment method." Do not mention the account balance.
3. Incorrect security code. "Check the 3-digit security code on the back of your card." Highlight only the security code field and keep the other card details.
4. Expired card. "This card has expired. Use a different card." Check the expiry date on entry so customers find out before submitting.
5. Authentication not completed (3-D Secure, OTP). "We couldn't confirm the payment with your bank. Try again and complete the check in your banking app or the code screen." Explain that no money was taken if that is the case.
6. Timeout or processing error. "We couldn't process your payment. You have not been charged." Only say that if it is true. Offer to retry, and prevent double charges by disabling the button while processing.
7. Payment pending. Common with UPI, bank transfers and wallets: "Waiting for confirmation from your bank. Don't pay again; we'll update this page and email you." Duplicate payments from impatient retries are costly to refund.
Address and delivery errors
8. Postcode or PIN code not serviceable. "We don't deliver to 560001 yet." Offer alternatives: pickup points, another address, or a notification when delivery becomes available. Better still, check serviceability on the product page.
9. Address cannot be verified. "We couldn't find this address. Check the street and building number, or continue with the address as entered." Let customers override address suggestions; validation services are not always right.
10. Phone number format. Accept common formats (spaces, country codes) and say what is needed: "Enter a 10-digit mobile number so the courier can contact you."
11. Payment method unavailable for this order. For example cash on delivery not available for the order value or area: say why and list the methods that are available.
Cart and order errors
12. Discount code not accepted. Say which reason applies: expired, not valid for items in the basket, minimum spend not reached (and by how much), or already used. "This code needs a minimum spend of 1,500. Add 300 more to use it."
13. Item out of stock during checkout. "Sorry, the blue size 9 sold out while you were checking out." Show the item, remove it with the customer's agreement, and offer a similar item or back-in-stock alert.
14. Price or delivery cost changed. If a price, tax or delivery charge changes, show the old and new amounts and ask the customer to confirm before charging.
15. Session or cart expired. "Your session timed out for security. Your basket has been saved." Restore the basket and entered details wherever possible.
Losing orders to checkout errors?
A ZSpace Labs CRO audit reviews your checkout errors, payment flows and recovery messages, on Shopify or custom stores.
Before and after table
| Error | Unhelpful message | Clearer message and recovery |
|---|---|---|
| Generic decline | Transaction failed | Card declined; try another card or method, or contact your bank |
| Insufficient funds | Insufficient funds | Card declined; try a different card or payment method |
| Wrong security code | Invalid CVC | Check the 3-digit code on the back; other details kept |
| Expired card | Card error | This card has expired; use another card |
| Authentication failed | 3DS failure | Bank check not completed; try again; no money taken |
| Timeout | Error 500 | Payment not processed; you have not been charged; retry |
| Payment pending | Processing... | Waiting for your bank; don't pay again; we'll email you |
| Unserviceable postcode | Invalid pincode | We don't deliver to this postcode yet; pickup or notify me |
| Unverified address | Address invalid | Check street and number, or continue as entered |
| Phone format | Invalid phone | Enter a 10-digit mobile so the courier can call |
| Method unavailable | Payment method not allowed | COD not available over this amount; choose another method |
| Discount rejected | Invalid code | Needs minimum spend; add the difference |
| Out of stock | Cart error | Item sold out; remove or choose similar |
| Price changed | (silent change) | Show old and new amounts; confirm |
| Session expired | Session expired | Timed out for security; basket saved |
Platform limits and measurement
On hosted checkouts, including Shopify's, the platform controls most error text and flows; you can usually edit some wording through language settings, and Shopify Plus stores can add checkout UI extensions. Payment provider errors may also come from the provider's own interface. You fully control errors on the cart page, in your own forms and in follow-up emails, so start there. See what you can customise in Shopify checkout.
Track errors as events (error type and step, never card or personal data) so you can see which ones happen most and whether rewording reduces abandonment. Treat each rewrite as a hypothesis and check the results. See why customers abandon checkout.
Conclusion
Checkout errors are moments when a customer who wants to buy is told no. Clear, specific messages with a recovery path keep many of those orders: say what happened, how to fix it, keep their details, offer another way, and never expose fraud-related reasons. Start with the errors you control, measure which occur most, and rewrite those first. For writing interface text generally, see UX writing.
Sources
GOV.UK Design System, error message component. Stripe documentation, decline codes. Accessed 28 October 2026.
Common questions.
Sometimes. Where the customer can fix the problem, such as a wrong security code or an expired card, say so. Where the decline relates to suspected fraud or a card reported lost or stolen, payment providers such as Stripe advise showing a generic decline message instead.