Skip to content

Method confirmers ​

Stripe.js has a confirm method for each payment method, such as stripe.confirmCardPayment() or stripe.confirmSepaDebitSetup(). Vue Stripe wraps every one of them, 46 in Stripe.js 10, in a composable named after it: useConfirmCardPayment, useConfirmSepaDebitSetup, and so on. Call them inside a VueStripeProvider; they do not need VueStripeElements, but components that render the Card, IBAN or BECS element do.

With the Payment Element, confirm with usePaymentIntent or useSetupIntent instead. How confirming works explains which composable fits which flow. Some payment methods must be enabled on your Stripe account, or are offered only in some countries or currencies; What each method needs lists the currency and fields each confirmer requires, and each family page links Stripe's guide for the method.

Usage ​

vue
<script setup lang="ts">
import { useConfirmCardPayment } from '@vue-stripe/vue-stripe'

const props = defineProps<{ clientSecret: string }>()
const { confirmCardPayment, loading, error } = useConfirmCardPayment()

const pay = async (clientSecret: string) => {
  const { paymentIntent } = await confirmCardPayment(clientSecret, { payment_method: 'pm_123' })
  return paymentIntent?.status
}
</script>

<template>
  <button :disabled="loading" @click="pay(props.clientSecret)">Pay</button>
  <p v-if="error">{{ error }}</p>
</template>

Families ​

PageComposablesIncludes
Cards2useConfirmCardPayment, useConfirmCardSetup
Bank debits9useConfirmAcssDebitPayment, useConfirmAcssDebitSetup, useConfirmAuBecsDebitPayment, ...
Redirects and bank transfers13useConfirmBancontactPayment, useConfirmBancontactSetup, useConfirmEpsPayment, ...
Wallets15useConfirmAlipayPayment, useConfirmAmazonPaySetup, useConfirmBlikPayment, ...
Buy now, pay later4useConfirmAffirmPayment, useConfirmAfterpayClearpayPayment, useConfirmBilliePayment, ...
Vouchers3useConfirmBoletoPayment, useConfirmKonbiniPayment, useConfirmOxxoPayment

What each method needs ​

The composables pass your arguments to Stripe.js unchanged, but Stripe accepts a confirm only when the Intent and the data fit the method. Three rules cover most failures:

  • Pass payment_method. With only { return_url }, most methods fail with payment_intent_incompatible_payment_method ("A payment method of type cashapp was expected to be present, but this PaymentIntent does not have a payment method and none was provided"), even where Stripe's own reference shows that form. Pass payment_method: {}, with the billing details below. For iDEAL, BLIK, FPX, SEPA Debit and Bacs, Stripe.js throws "Missing value for confirmIdealPayment: payment_method.ideal should be an object or element." unless payment_method has the method's own key, such as { ideal: {} }.
  • Create the Intent in a currency the method takes. Otherwise the server's paymentIntents.create() fails with "The currency provided (usd) is invalid. Payments with ideal support the following currencies: eur." Some methods also take other currencies on accounts in other countries.
  • Send the billing fields the method requires. A missing one comes back as parameter_missing, for example "Missing required param: billing_details[email]."

Observed with Stripe.js 10 on a US sandbox account in October 2026:

MethodIntentdata
ACSS Debitcad or usd, created with payment_method_options.acss_debit.mandate_options (a SetupIntent also needs payment_method_options.acss_debit.currency)payment_method.billing_details with name and email. Stripe.js then opens its modal for the bank account
Affirmusd, at least $35.00payment_method: {}
Afterpay / Clearpayusdpayment_method.billing_details with name and email
Alipayusd or cnyreturn_url is enough
Amazon Pay (setup)SetupIntentpayment_method: {}
Bacs Debit (setup)SetupIntentpayment_method.bacs_debit (sort_code, account_number) and billing_details with name, email and address
BancontacteurPayment: return_url is enough. Setup: payment_method.billing_details with name and email
BLIKplnpayment_method: { blik: {} } and payment_method_options.blik.code. Setup: also billing_details.email
Boletobrlpayment_method.boleto.tax_id and billing_details with name, email and address (required by the Stripe.js type)
Cash App Payusdpayment_method: {}, for payments and setups
Customer balanceCreated with a customerpayment_method: {} (or { customer_balance: {} }), and payment_method_options.customer_balance with funding_type: 'bank_transfer' and the bank_transfer.type, here or on the Intent (see the example)
EPSeurpayment_method: {}
FPXmyrpayment_method: { fpx: { bank } }
iDEALeurpayment_method: { ideal: {} }. Setup: also billing_details with name and email
Klarnausdreturn_url is enough
Multibancoeurpayment_method.billing_details.email
OXXOmxnpayment_method.billing_details with name and email
Przelewy24eur or plnpayment_method.billing_details.email
Pay by Bankgbp or eurreturn_url is enough
Pixbrlpayment_method.billing_details with name, email and tax_id (see Pix)
SEPA Debiteurpayment_method.sepa_debit (the IBAN Element or { iban }) and billing_details with name and email
US bank accountusdpayment_method.us_bank_account (or a payment method from useFinancialConnections) and billing_details.name
WeChat Payusd or cnypayment_method_options.wechat_pay.client: 'web' or 'mobile_web'. Stripe.js throws without it

Billie needs a Stripe beta flag, and Stripe refuses giropay and Sofort payments. GrabPay, Konbini, MobilePay, PayNow, PayPal, PromptPay, TWINT and AU BECS Debit were not available on the account used for this table; follow the Stripe guide each family page links. Test your integration describes what each method does in test mode.

Return value ​

Every composable has the same shape. For useConfirmCardPayment:

ts
const { confirmCardPayment, loading, error } = useConfirmCardPayment()
// confirmCardPayment: Stripe['confirmCardPayment']
PropertyTypeDescription
confirm<Method>Payment / confirm<Method>SetupStripe['confirm<Method>...']The Stripe.js method, with Stripe's own parameter and result types.
loadingReadonly<Ref<boolean>>true while a call is in flight (until the last of overlapping calls settles).
errorReadonly<Ref<string | null>>Message of the last call's { error } result or thrown error; reset to null when a call starts.

The wrapped method:

  • forwards its arguments to Stripe.js unchanged and resolves to Stripe's result untouched ({ paymentIntent } / { setupIntent } or { error }). An { error } result also sets error.
  • rejects when Stripe.js throws (for example on invalid arguments), after setting error.
  • rejects with VueStripeProviderError if Stripe.js has not loaded. VueStripeProvider renders its children only once Stripe.js is ready, so this does not happen in components inside it.

Calling a composable outside a VueStripeProvider throws VueStripeProviderError.

Resolve or reject ​

Every composable that calls Stripe.js reports a Stripe error result (a decline, a validation error) as a resolved { error } and also sets its error ref. They differ when Stripe.js is not available (no loaded provider, or the plugin's load failed; under the plugin a call made while Stripe.js loads waits for it) or when the Stripe.js call throws:

ComposableStripe.js not loaded, or the Stripe.js call throws
usePaymentIntent, useSetupIntent, useCreatePaymentMethod, useHandleNextAction, useFinancialConnections, useIdentityResolves to a VueStripeErrorResult, { error: { message } } (e.g. 'Stripe not initialized'), so one if (result.error) check covers every failure
The method confirmers on these pages, useCreateToken, useCreateConfirmationToken, useHandleCardAction, useVerifyMicrodepositsForPayment, useVerifyMicrodepositsForSetup, useRadarSession, useEphemeralKeyNonceRejects, like the Stripe.js method it wraps: with VueStripeProviderError when Stripe.js has not loaded, or with what Stripe.js threw. error is set first

The other composables have their own contracts:

  • useStripeElements: submit() and fetchUpdates() resolve to { error: { message: 'Elements not initialized' } } before the Elements group exists, and otherwise return Stripe's result. fetchUpdates() also resolves to { error } where Stripe.js throws, as it does on a deferred (mode) group.
  • useCheckoutSession and useCheckoutForm: an action called before the session is ready resolves to { type: 'error', error: { message: 'Checkout session is not ready yet' } }; otherwise it returns Stripe's result.
  • usePaymentRequest: methods never throw; failures set its error ref.
  • useStripeCheckout: redirectToCheckout() rejects with VueStripeCheckoutError when url is empty.

Inside VueStripeProvider, Stripe.js has always loaded by the time your component renders, so "not loaded" only happens in code outside it, or under the plugin before the first load finishes. How confirming works explains why the two styles exist.

TypeScript ​

The composables are typed from the installed @stripe/stripe-js, so parameters, overloads and results follow Stripe's types. Name the return type with UseStripeMethodReturn:

vue
<script setup lang="ts">
import { useConfirmCardSetup } from '@vue-stripe/vue-stripe'
import type { UseStripeMethodReturn } from '@vue-stripe/vue-stripe'

const props = defineProps<{ clientSecret: string; paymentMethod: string }>()
const confirm: UseStripeMethodReturn<'confirmCardSetup'> = useConfirmCardSetup()

const save = () =>
  confirm.confirmCardSetup(props.clientSecret, { payment_method: props.paymentMethod })
</script>

<template>
  <button :disabled="confirm.loading.value" @click="save">Save card</button>
  <p v-if="confirm.error.value">{{ confirm.error.value }}</p>
</template>

All composables ​

ComposableStripe.js methodPage
useConfirmAcssDebitPaymentstripe.confirmAcssDebitPayment()Bank debits
useConfirmAcssDebitSetupstripe.confirmAcssDebitSetup()Bank debits
useConfirmAffirmPaymentstripe.confirmAffirmPayment()Buy now, pay later
useConfirmAfterpayClearpayPaymentstripe.confirmAfterpayClearpayPayment()Buy now, pay later
useConfirmAlipayPaymentstripe.confirmAlipayPayment()Wallets
useConfirmAmazonPaySetupstripe.confirmAmazonPaySetup()Wallets
useConfirmAuBecsDebitPaymentstripe.confirmAuBecsDebitPayment()Bank debits
useConfirmAuBecsDebitSetupstripe.confirmAuBecsDebitSetup()Bank debits
useConfirmBacsDebitSetupstripe.confirmBacsDebitSetup()Bank debits
useConfirmBancontactPaymentstripe.confirmBancontactPayment()Redirects and bank transfers
useConfirmBancontactSetupstripe.confirmBancontactSetup()Redirects and bank transfers
useConfirmBilliePaymentstripe.confirmBilliePayment()Buy now, pay later
useConfirmBlikPaymentstripe.confirmBlikPayment()Wallets
useConfirmBlikSetupstripe.confirmBlikSetup()Wallets
useConfirmBoletoPaymentstripe.confirmBoletoPayment()Vouchers
useConfirmCardPaymentstripe.confirmCardPayment()Cards
useConfirmCardSetupstripe.confirmCardSetup()Cards
useConfirmCashappPaymentstripe.confirmCashappPayment()Wallets
useConfirmCashappSetupstripe.confirmCashappSetup()Wallets
useConfirmCustomerBalancePaymentstripe.confirmCustomerBalancePayment()Redirects and bank transfers
useConfirmEpsPaymentstripe.confirmEpsPayment()Redirects and bank transfers
useConfirmFpxPaymentstripe.confirmFpxPayment()Redirects and bank transfers
useConfirmGiropayPaymentstripe.confirmGiropayPayment()Redirects and bank transfers
useConfirmGrabPayPaymentstripe.confirmGrabPayPayment()Wallets
useConfirmIdealPaymentstripe.confirmIdealPayment()Redirects and bank transfers
useConfirmIdealSetupstripe.confirmIdealSetup()Redirects and bank transfers
useConfirmKlarnaPaymentstripe.confirmKlarnaPayment()Buy now, pay later
useConfirmKonbiniPaymentstripe.confirmKonbiniPayment()Vouchers
useConfirmMobilepayPaymentstripe.confirmMobilepayPayment()Wallets
useConfirmMultibancoPaymentstripe.confirmMultibancoPayment()Redirects and bank transfers
useConfirmOxxoPaymentstripe.confirmOxxoPayment()Vouchers
useConfirmP24Paymentstripe.confirmP24Payment()Redirects and bank transfers
useConfirmPayByBankPaymentstripe.confirmPayByBankPayment()Redirects and bank transfers
useConfirmPayNowPaymentstripe.confirmPayNowPayment()Wallets
useConfirmPayPalPaymentstripe.confirmPayPalPayment()Wallets
useConfirmPayPalSetupstripe.confirmPayPalSetup()Wallets
useConfirmPixPaymentstripe.confirmPixPayment()Wallets
useConfirmPromptPayPaymentstripe.confirmPromptPayPayment()Wallets
useConfirmSepaDebitPaymentstripe.confirmSepaDebitPayment()Bank debits
useConfirmSepaDebitSetupstripe.confirmSepaDebitSetup()Bank debits
useConfirmSofortPaymentstripe.confirmSofortPayment()Redirects and bank transfers
useConfirmSofortSetupstripe.confirmSofortSetup()Redirects and bank transfers
useConfirmTwintPaymentstripe.confirmTwintPayment()Wallets
useConfirmUsBankAccountPaymentstripe.confirmUsBankAccountPayment()Bank debits
useConfirmUsBankAccountSetupstripe.confirmUsBankAccountSetup()Bank debits
useConfirmWechatPayPaymentstripe.confirmWechatPayPayment()Wallets

See Also ​