Save and retrieve customer payment methods
Learn more about saved payment methods in the Payment Element.
You can save customer payment methods on the Customer object for future use with the Payment Element’s Saved Payment Method feature. This enables you to:
- Prompt buyers for consent to save payment methods, such as
card
,us_
, andbank_ account sepa_
.debit - Save payment methods when buyers provide GDPR-compliant consent for both one-time payments and recurring transactions.
- Display saved payment methods to buyers for future purchases. Customers can also remove and update their payment information.
- Configure the Payment Element to require CVC re-collection for a given transaction.
To integrate saved payment methods on the Payment Element, first learn to Design an integration if you’re new to using the Payment Element. If you have an existing Payment Element integration, look for the Save and retrieve customer payment methods step in the integration guide you followed to enable saved payment methods.
Use saved payment methods with Link
Link is a network of saved payment methods that work across all Stripe users. You can use Link with Saved Payment Methods without any additional configuration.
- New customers can save their payment method to a specific business, Link, or both.
- Customers who have both a saved Link payment method and a saved business payment method see their business saved payment method displayed after the page loads.
Save payment methods with Link.
Reuse a previously saved payment method.
Re-collect payment details
For additional security, you can specify require_cvc_recollection to request the Payment Element to re-collect a CVC when a customer is paying with a card.
payment_method_options: { card: {required_cvc_recollection: true} }
Save a payment method for a subscription or recurring transaction
If the Save payment details for future purchases checkbox appears and is selected when you’re confirming a payment, the payment method’s allow_redisplay value is set to always
. This means the customer consents to use the payment method for the subscription and future sessions. If the customer leaves the checkbox unselected, the allow_
value is set to limited
. This means you can’t use the payment method for future purchases — it’s limited to the current subscription you’re setting up.
Prevent payment method removal from subscriptions
If a payment method is saved for reuse and is also the payment method for an ongoing subscription, removing that payment method from the Payment Element’s Saved section also removes it from the subscription. We recommend that you disable removing saved payment methods from the Payment Element to avoid removing a payment method from an active subscription. Instead, manage payment methods in an account settings or similar page that shows existing subscriptions.
Display existing saved payment methods
If existing payment methods are attached to customers in your Stripe account from a Card Element integration, direct use of the Stripe API, or some other method, those payment methods won’t render in the Payment Element as their allow_
property is unspecified
. If the allow_
property is always
, the payment method renders in the Payment Element.
You can use one of the following methods to display previously saved payment methods:
- If you collected the proper consent from the customer when saving the payment method, update
allow_
toredisplay always
.- Use the Payment Method update API to update an individual payment method.
- Configure the Customer Session API to include payment methods where
allow_
.redisplay="unspecified"
Collect consent to reuse a payment method outside of the Payment Element
The Payment Element uses the state of the Save payment details for future purchases checkbox to determine when a customer has given consent to save a payment method. If you’re collecting this consent a different way (such as with the terms and conditions of your website or consent text rendered outside of the Payment Element), you can override the consent that the Elements instance provides when confirming the intent.
If your integration uses stripe.confirmPayment, stripe.confirmSetup, or stripe.createConfirmationToken, pass an explicit allow_redisplay value into the options hash to override the value from the Elements instance.