What to do when a customer doesn’t complete 3D Secure in Stripe

A customer starts to pay on your site. Enters their card. Their bank asks for additional verification — the famous 3D Secure. The customer doesn’t complete it: closes the window, doesn’t get the SMS, doesn’t have the bank app installed, or simply doesn’t understand what’s being asked.

The result: an abandoned payment. A customer who wanted to buy from you and couldn’t. And in many cases, a customer who goes somewhere else because they think «something isn’t working.»

What 3D Secure is and why it fails

3D Secure (3DS) is a verification step that the customer’s bank requires for certain online payments. The bank sends an SMS code, asks for app confirmation, or shows a captcha. It’s a security measure against fraud.

The problem is many customers don’t understand it’s a normal step. They see a popup from their bank and think something went wrong. Or they don’t receive the SMS. Or their bank app is outdated. And they abandon the payment.

Numbers vary by market, but it’s estimated that 10%-30% of payments requiring 3DS are not completed. In European markets, where 3DS is mandatory for most transactions, the percentage is significant.

How to detect an abandoned 3DS

Stripe detects when a checkout session is abandoned without completing payment. The event is checkout.session.expired — fires when the customer started checkout but didn’t complete payment in time.

There’s also invoice.payment_action_required — fires when a subscription invoice requires additional customer action (like 3DS) and the customer doesn’t complete it.

Both events tell you the same thing: a customer tried to pay and couldn’t.

What to do when it happens

The most effective thing is sending an email explaining what happened and giving them a link to retry payment. The key points:

Explain it’s normal. The customer probably thinks something failed. Tell them their bank asked for a security verification and they just need to complete it.

Give a direct link. Don’t say «go back to our website and find the product.» Give them a link that takes them directly to the pending payment.

Be fast. The sooner you send the email, the more likely they’ll complete it. Wait 24 hours and the customer already forgot or went somewhere else.

The email that works

Simple text:

«Hi, your bank needs you to verify the payment of [amount] to complete your purchase. It’s a standard security step. Just click the link below and follow your bank’s instructions: [link]. If you need help, reply to this email.»

No alarm, no technical jargon, no pressure. Just clear information and a link.

Automating detection and sending

Doing this manually is impossible — you don’t know when a customer abandons 3DS because Stripe doesn’t show it visibly in the dashboard. You need to listen for webhooks and act automatically.

The automated flow:

  1. Customer abandons 3DS → webhook detects it.
  2. System sends email to customer with link to complete payment.
  3. Sends you an alert (email or Telegram) so you know it happened.
  4. Customer completes payment → subscription active, all normal.

Everything happens without your intervention. The only requirement is having webhooks configured in Stripe to listen for checkout.session.expired and invoice.payment_action_required events.

The impact on your sales

If 15% of your 3DS payments are abandoned, and you recover half with an automatic email, you’re rescuing 7.5% of your sales that would otherwise be lost.

For a business with 100 new subscriptions a month at $20, that’s about 7 recovered sales — $140/month that would have been $0. In a year, $1,680.

And they’re not just numbers: they’re customers who wanted to buy from you and thanks to one email were able to. Without that email, they would have gone somewhere else.


Stripe Control automatically detects when a customer abandons 3D Secure and sends them an email with a link to complete payment. Configurable from Alerts > Automatic emails to your customers.


Keep reading


🇪🇸 Leer este artículo en español