Accept payments with stored card credentials
Last updated: September 2, 2026
With Vault, you can store your customers' payment card details as Payment instruments, which you can later reuse in future payments so they do not have to input their details every time they make a purchase.
Flow for mobile enables customers to store their card credentials in Vault during checkout. The next time the customer shops with you, we display their stored card details.
For new customers, call the Request a Payment Session endpoint and set the payment_method_configuration.card.store_payment_details field to collect_consent. This value displays the option to store card credentials for future payments. If you have already collected consent from the customer, you can provide payment_method_configuration.card.store_payment_details: "enabled" instead.
You must also provide either the customer.email or customer.id fields.
Information
If your payment session request omits customer.email, the backend silently downgrades store_payment_details: collect_consent to disabled, and the consent checkbox does not display. If your customers are not seeing the consent checkbox, check your session request before troubleshooting your integration.
When store_payment_details is set to collect_consent, the SDK reports the customer's choice as storeForFutureUse on the tokenization result. Forward this value as source.store_for_future_use on your payment request. Sending nothing means the card is not stored, regardless of what the customer chose. For more information, see the onTokenized reference for iOS and Android.
You can provide the stored customer ID for a returning customer using the payment_method_configuration.stored_card.customer_id field when you Request a Payment Session.
Flow for mobile displays the card details stored for the customer to reuse, as well as the card verification value (CVV) if needed for payment.
Alternatively, if you already have payment instruments that are not stored under any customer, you can provide them using the payment_method_configuration.stored_card.instrument_ids field instead.
Some regions or card schemes, such as Mada, require the card verification value (CVV) when performing a stored card payment. Flow for mobile captures and tokenizes the CVV from the customer when such stored card details are selected.
Optionally, you can set the stored card component's CVV capture field to true to always capture CVV from the customer:
Set storedCardConfiguration.captureCardCvv to true, and pass the configuration in the componentOptions map using PaymentMethodName.StoredCard as the key. Flow embeds the stored card component automatically when the payment session carries a stored_card payment method, so the same configuration applies whether you create the Flow component or the stored card component on its own:
1// 1. Configure the Stored Card options to enable CVV capture2val storedCardConfiguration = StoredCardConfiguration(3captureCardCvv = true // Enable CVV capture for saved cards4)56// 2. Wrap the configuration in a ComponentOption7val storedCardOptions = ComponentOption(storedCardConfiguration = storedCardConfiguration)89// 3. Create the SDK configuration10// Pass the options in the componentOptions map using PaymentMethodName.StoredCard as the key11val configuration = CheckoutComponentConfiguration(12context = activity,13publicKey = "pk_sbox_...",14environment = Environment.SANDBOX,15paymentSession = paymentSessionResponse,16componentOptions = mapOf(17PaymentMethodName.StoredCard to storedCardOptions18)19)2021// 4. Initialize CheckoutComponents (factory.create() is a suspend function)22val factory = CheckoutComponentsFactory(configuration)23val checkoutComponents = factory.create()2425// 5. Create the desired components26// Flow component: Displays all available payment methods (Cards, Wallets, and Stored Cards)27val flowComponent = checkoutComponents.create(ComponentName.Flow)2829// Stored Card component: Displays only the customer's saved cards30val storedCardComponent = checkoutComponents.create(PaymentMethodName.StoredCard)