## Confirm a payment

`stripe.confirmPayment(options: object)`

Use `stripe.confirmPayment` to confirm a [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) using data collected
by the [Payment Element](https://docs.stripe.com/js/element/payment_element.md), or with manually provided data via `confirmParams`.
When called, `stripe.confirmPayment` will attempt to complete any [required actions](https://docs.stripe.com/payments/intents.md),
such as authenticating your user by displaying a 3DS dialog or redirecting them to a bank authorization page.
Your user will be redirected to the `return_url` you pass once the confirmation is complete.

> The `stripe.confirmPayment` might take several seconds to complete.
> During that time, disable your form from being resubmitted and show a waiting indicator, such as a spinner. If you receive an error result, show this error to the user, re-enable the form, and hide the waiting indicator.

- `options`
    - `elements`
      The [Elements](#payment_element_create) instance used to create the Payment Element.

Required if you [collect payment details before creating an Intent](https://docs.stripe.com/payments/accept-a-payment-deferred.md?platform=web&type=payment). It's always required if you don't provide a `clientSecret`.
    - `clientSecret`
      The PaymentIntent's client secret.

Required if you [collect payment details before creating an Intent](https://docs.stripe.com/payments/accept-a-payment-deferred.md?platform=web&type=payment). It's always required if you don't provide an `elements` instance containing a [client secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret).
    - `confirmParams`
      Parameters that will be passed on to the Stripe API. You can also use the parameters from the [Payment Intents API](https://docs.stripe.com/api/payment_intents/confirm.md), except for setup_future_usage.
      - `return_url`
        The URL that Stripe redirects your customer to after they complete the payment.

You can use the following query parameters, `payment_intent` (the PaymentIntent's ID) or `payment_intent_client_secret` (the PaymentIntent's client secret), to retrieve the PaymentIntent's [status](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-status). When Stripe redirects your customer, the resulting URL has these query parameters appended. You can also append your own query parameters to the `return_url`, which persist through the redirect process.

If you don't want to redirect for card payments after payment completion, set [redirect](https://docs.stripe.com/js/payment_intents/confirm_payment.md#confirm_payment_intent-options-redirect) to `if_required`.
      - `shipping`
        The [shipping details](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-shipping) for the payment, if collected.

**Note**: When the [Address Element](https://docs.stripe.com/js/element/address_element.md) in shipping mode is being used, shipping address details are collected from the Address Element and passed
to the PaymentIntents [confirm endpoint](https://docs.stripe.com/api/payment_intents/confirm.md) as the [shipping](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-shipping)
parameter.
You can also include additional `shipping` fields, which will be merged with the data collected from the Element.
Values passed here will override details collected by Elements.
      - `confirmation_token`
        If collected previously, the ID of the ConfirmationToken to use to confirm this PaymentIntent. This is mutually exclusive with the `elements` parameter.
      - `payment_method`
        If collected previously, the ID of the payment method to attach to this PaymentIntent. This is mutually exclusive with the `elements` parameter.
      - `payment_method_data`
        When you call `stripe.confirmPayment`, payment details are collected from the Element and passed to the PaymentIntents
[confirm endpoint](https://docs.stripe.com/api/payment_intents/confirm.md) as the [payment_method_data](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-payment_method_data)
parameter. You can also include additional `payment_method_data` fields, which will be merged with the data collected from the Element.
        - `billing_details`
          The customer's [billing_details](https://docs.stripe.com/api/payment_methods/create.md#create_payment_method-billing_details).
Details collected by Elements will override values passed here.
Billing fields that are omitted in the Payment Element via the `fields` option required.

**Note**: When the [Address Element](https://docs.stripe.com/js/element/address_element.md) in billing mode is being used, billing address details are collected from the Address Element and passed
to the PaymentIntents [confirm endpoint](https://docs.stripe.com/api/payment_intents/confirm.md) as the [billing_details](https://docs.stripe.com/api/payment_methods/create.md#create_payment_method-billing_details)
parameter. The values collected from the Address Element will take precedence.
        - `allow_redisplay`
          Indicates whether the payment method can be displayed to the customer in subsequent checkout flows. The value passed here will override the [allow_redisplay](docs/api/payment_methods/object#payment_method_object-allow_redisplay) determined by the provided `elements` parameter.
      - `expand`
        An array of pass through [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) expansion parameters ([learn more](https://docs.stripe.com/api/expanding_objects.md)).
    - `redirect`
      By default, `stripe.confirmPayment` will always redirect to your `return_url` after a successful confirmation.
If you set `redirect: "if_required"`, then `stripe.confirmPayment` will only redirect if your user chooses a redirect-based payment method.

**Note**: Setting `if_required` requires that you handle successful confirmations for redirect-based and non-redirect based payment methods separately.
When a non-redirect based payment method is successfully confirmed, `stripe.confirmPayment` will resolve with a `{paymentIntent}` object.

### Example

```title
Confirm a payment intent
```
