Skip to main content
Primer Checkout Android SDK is currently in beta (v3.0.0-beta.2). The API is subject to change before the stable release.
Controller interface for saved payment methods. Exposes vaulted methods as observable state and provides selection, deletion, and management.

Creation

@Composable
fun rememberVaultedPaymentMethodsController(
    checkout: PrimerCheckoutController,
): PrimerVaultedPaymentMethodsController
ParameterTypeDescription
checkoutPrimerCheckoutControllerCheckout controller from rememberPrimerCheckoutController()
Must be called inside PrimerCheckoutHost content or a PrimerCheckoutSheet slot.

Property

PropertyTypeDescription
methodsStateFlow<List<PrimerVaultedPaymentMethod>>Saved payment methods for the current customer. Empty list while loading or when no methods exist.
The parent checkout.state provides loading/ready state. Use checkout.state to distinguish between “loading” and “no saved methods.”

Methods

MethodDescription
select(method: PrimerVaultedPaymentMethod)Pay with a saved method. Automatically shows CVV recapture if required by the payment method.
delete(method: PrimerVaultedPaymentMethod)Delete a saved method. Shows a confirmation dialog before deletion.
showAll()Open the full vaulted methods management screen.

PrimerVaultedPaymentMethod

data class PrimerVaultedPaymentMethod(
    val id: String,
    val analyticsId: String,
    val paymentInstrumentType: String,
    val paymentMethodType: String,
    val paymentInstrumentData: PaymentInstrumentData,
    val threeDSecureAuthentication: AuthenticationDetails?,
)
PropertyTypeDescription
idStringUnique identifier for this vaulted method
analyticsIdStringAnalytics tracking identifier
paymentInstrumentTypeStringInstrument type (e.g., "PAYMENT_CARD")
paymentMethodTypeStringPayment method type identifier
paymentInstrumentDataPaymentInstrumentDataCard or payment method details
threeDSecureAuthenticationAuthenticationDetails?3DS authentication data, if available

PaymentInstrumentData

PropertyTypeDescription
networkString?Card network (e.g., "Visa", "Mastercard")
cardholderNameString?Cardholder name
first6DigitsString?First 6 digits (BIN)
last4DigitsString?Last 4 digits for display
expirationMonthString?Expiry month (MM)
expirationYearString?Expiry year (YYYY)
externalPayerInfoExternalPayerInfo?External payer details (e.g., PayPal email)
binDataBinData?BIN data for card routing
bankNameString?Bank name for bank-based methods

Composable

@Composable
fun PrimerVaultedPaymentMethods(
    controller: PrimerVaultedPaymentMethodsController,
    modifier: Modifier = Modifier,
    header: @Composable (onShowAll: () -> Unit) -> Unit = { onShowAll ->
        VaultedPaymentMethodsDefaults.SectionHeader(onShowAll)
    },
    item: @Composable (method: PrimerVaultedPaymentMethod, isSelected: Boolean, onSelect: () -> Unit) -> Unit = { method, isSelected, onSelect ->
        VaultedPaymentMethodsDefaults.Method(method, isSelected, onSelect)
    },
    submitButton: @Composable (isLoading: Boolean, enabled: Boolean, onSubmit: () -> Unit) -> Unit = { isLoading, enabled, onSubmit ->
        VaultedPaymentMethodsDefaults.SubmitButton(isLoading, enabled, onSubmit)
    },
)
ParameterTypeDefaultDescription
controllerPrimerVaultedPaymentMethodsControllerController from rememberVaultedPaymentMethodsController()
modifierModifierModifierCompose modifier
header@Composable (onShowAll: () -> Unit) -> UnitSectionHeader(onShowAll)Header composable above the list. Receives callback to show all saved methods.
item@Composable (PrimerVaultedPaymentMethod, Boolean, () -> Unit) -> UnitMethod(...)Composable for each vaulted method row. Receives method, selection state, and select callback.
submitButton@Composable (Boolean, Boolean, () -> Unit) -> UnitSubmitButton(...)Submit button below the list. Receives loading state, enabled state, and submit callback.

VaultedPaymentMethodsDefaults

FunctionDescription
SectionHeader(onShowAll: () -> Unit)Default section header (“Saved payment methods”) with “Show all” action
Method(method: PrimerVaultedPaymentMethod, isSelected: Boolean, onSelect: () -> Unit)Default method row with card details, network icon, and selection
SubmitButton(isLoading: Boolean, enabled: Boolean, onSubmit: () -> Unit)Default submit button for vaulted payment