## Confirm Sofort setup Use `stripe.confirmSofortSetup` in the [Set up future payments](/payments/sofort/set-up-payment.md) flow to use SOFORT bank details to set up a SEPA Direct Debit payment method for future payments. When called, it will confirm a `SetupIntent` with `data` you provide, and it will automatically redirect the customer to authorize the transaction. Once authorization is complete, the customer will be redirected back to your specified `return_url`. Note that there are some additional requirements to this flow that are not covered in this reference. Refer to our [integration guide](/payments/sofort/set-up-payment.md) for more details. When you confirm a `SetupIntent`, it needs to have an attached [PaymentMethod](/api/payment_methods.md). In addition to confirming the `SetupIntent`, this method can automatically create and attach a new `PaymentMethod` for you. It can also be called with an existing `PaymentMethod`, or if you have already attached a `PaymentMethod` you can call this method without needing to provide any additional data. These use cases are detailed in the sections that follow. > Note that `stripe.confirmSofortSetup` may take several seconds to complete. > During that time, you should disable your form from being resubmitted and show a waiting indicator like a spinner. > If you receive an error result, you should be sure to show that error to the customer, re-enable the form, and hide the waiting indicator. `stripe.confirmSofortSetup` will return a `Promise` which resolves with a `result` object. This object has either: * `result.setupIntent`: the successful [SetupIntent](/api/setup_intents). * `result.error`: an error. Refer to the [API reference](/api#errors) for all possible errors. **Syntax:** `stripe.confirmSofortSetup(...)` - `clientSecret` (string) **required** The [client secret](/api/setup_intents/object.md#setup_intent_object-client_secret) of the `SetupIntent`. - `data` (object) Data to be sent with the request. Refer to the [Setup Intents API](/api/setup_intents/confirm.md) for a full list of parameters. - `payment_method` (object | string) The `id` of an existing PaymentMethod or an object of collected data. See use cases below for details. - `return_url` (string) The url your customer will be directed to after they complete authentication. - `options` (object) An options object to control the behavior of this method. - `handleActions` (boolean) Set this to `false` if you want to [manually handle the authorization redirect](/payments/sofort/accept-a-payment?platform=web.md#handle-redirect). Default is `true`. ### Use case: with an existing payment method If you have already created a `PaymentMethod`, you can pass its `id` to `payment_method` when calling `stripe.confirmSofortSetup` and it will be used to confirm the `SetupIntent`. ### Data argument properties - `payment_method` (string) **required** The `id` of an existing `PaymentMethod`. - `return_url` (string) The url your customer will be directed to after they complete authentication. ### Confirm with existing payment method ```js stripe .confirmSofortSetup('{SETUP_INTENT_CLIENT_SECRET}', { payment_method: '{PAYMENT_METHOD_ID}', }) .then(function(result) { // Handle result.error or result.setupIntent }); ``` ```es_next const {error, setupIntent} = await stripe.confirmSofortSetup( '{SETUP_INTENT_CLIENT_SECRET}', { payment_method: '{PAYMENT_METHOD_ID}', }, ); ``` ### Use case: with self collected data Your customer's name, email and the country of their bank are required for the SOFORT authorization to succeed. You can pass in these properties directly to create a new `PaymentMethod` and confirm the `SetupIntent`. ### Data argument properties - `payment_method` (object) **required** Pass an object to confirm with the customer's name and email. - `country` (string) **required** The country code where customer's bank is located. - `billing_details` (object) **required** The customer's [billing_details](/api/payment_methods/create.md#create_payment_method-billing_details). `name` and `email` are required. - `name` (string) **required** The customer's name. - `email` (string) **required** The customer's email. - `return_url` (string) The url your customer will be directed to after they complete authentication. ### Confirm with self collected data ```js stripe .confirmSofortSetup('{SETUP_INTENT_CLIENT_SECRET}', { payment_method: { sofort: { country: 'DE' }, billing_details: { name: 'Jenny Rosen', email: 'jenny@example.com', }, }, // Return URL where the customer should be redirected after the authorization. return_url: window.location.href, }) .then(function(result) { if (result.error) { // Inform the customer that there was an error. } }); ``` ```es_next const {error} = await stripe.confirmSofortSetup( '{SETUP_INTENT_CLIENT_SECRET}', { payment_method: { sofort: { country: 'DE' }, billing_details: { name: 'Jenny Rosen', email: 'jenny@example.com', }, }, // Return URL where the customer should be redirected after the authorization. return_url: window.location.href, }, ); ``` ### Confirm SOFORT setup ```js stripe .confirmSofortSetup('{SETUP_INTENT_CLIENT_SECRET}', { payment_method: { sofort: { country: 'DE' }, billing_details: { name: 'Jenny Rosen', email: 'jenny@example.com', }, }, // Return URL where the customer should be redirected after the authorization. return_url: window.location.href, }) .then(function(result) { if (result.error) { // Inform the customer that there was an error. } }); ``` ```es_next const {error} = await stripe.confirmSofortSetup( '{SETUP_INTENT_CLIENT_SECRET}', { payment_method: { sofort: { country: 'DE' }, billing_details: { name: 'Jenny Rosen', email: 'jenny@example.com', }, }, // Return URL where the customer should be redirected after the authorization. return_url: window.location.href, }, ); ```