# Manage payout accounts for connected accounts

Learn how to manage external bank accounts and debit cards for connected accounts.

*Payout* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit) accounts can be bank accounts or debit cards. Stripe recommends collecting external account details with the Connect Onboarding web form, which helps you:

- Save design and development time.
- Eliminate the need to store sensitive data such as account and routing numbers on your server.
- Eliminate the need to build form validations when connected accounts enter account details.

In the US, we also recommend using [Stripe Financial Connections](https://docs.stripe.com/financial-connections.md), which lets your connected accounts securely link their financial accounts to your business. It helps you:

- Increase onboarding conversion by preventing your accounts from having to interrupt the process to locate their account and routing numbers.
- Reduce first payout failure rates by eliminating errors that result from manual entry of account and routing numbers.
- Eliminate the need to store sensitive data such as account and routing numbers on your server.
- Eliminate the need to build form validations when accounts enter account details in custom onboarding forms.
- (Accounts v1 only) Enable your accounts to authenticate in fewer steps by reusing bank account details they’ve saved to [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses). Accounts that save their account information at any of the Stripe businesses using Link can share their account details with your platform the next time they use Financial Connections.
- Access additional information on an account’s external bank account, such as [balances](https://docs.stripe.com/financial-connections/balances.md), [ownership details](https://docs.stripe.com/financial-connections/ownership.md), and [transactions](https://docs.stripe.com/financial-connections/transactions.md). You can mitigate fraud during onboarding by verifying that information, such as the name and address of the external bank account holder.

When [Link is enabled](https://dashboard.stripe.com/settings/connect/payouts/external_accounts), Stripe-hosted and embedded onboarding don’t charge for Financial Connections verifications. Otherwise, [standard Financial Connections verification pricing](https://stripe.com/financial-connections#pricing) applies.

If you use API onboarding for your connected accounts, you can collect payout account details with a custom form in your account onboarding flow.

### Opting out of external account collection

For accounts where the platform is responsible for collecting requirements, such as Custom accounts, you may opt not to collect external account information in onboarding. You may do this if, for instance, you build your own onboarding flow where you want to collect external account information.

In embedded onboarding, you can [disable external account collection](https://docs.stripe.com/connect/supported-embedded-components/account-onboarding.md?#external-account-collection) by setting the `external_account_collection` feature on the Account Session to false. Alternatively, in hosted onboarding you can go to your [Connect external accounts settings](https://dashboard.stripe.com/settings/connect/payouts/external_accounts) and then under **Accounts where the platform is responsible for collecting requirements** enable or disable collecting external account information. Note that this is off by default.

## Collecting external accounts

#### Stripe-hosted or embedded onboarding

[Stripe-hosted and embedded onboarding](https://docs.stripe.com/connect/onboarding.md) use themeable web forms to collect the information required to onboard connected accounts. They can collect both bank accounts and debit cards. You can use Financial Connections to collect bank account details, but not to collect debit card details.

For connected accounts where your platform is responsible for negative balances, you can customize the collection flow of external accounts in your [External account](https://dashboard.stripe.com/settings/connect/payouts/external_accounts) settings.

In your **External account** settings, you can:

- Enable or disable the collection of debit cards, by making a selection under **Allow debit cards?**.
- Require that connected accounts must add at least one bank account before being able to add any other type of external account, such as a debit card. You can access this setting under **Require at least one bank account?**. This is useful for ensuring [auto debit](https://docs.stripe.com/connect/account-balances.md#automatically-debit-connected-accounts) support.
- Control whether or not connected accounts to add more than one external account in a given currency. There is a limit of five external accounts per currency. You can access this setting under **Collect multiple external accounts per currency**.

#### Use Stripe Financial Connections

### Available in

- US

Stripe platforms in the US can enable [Stripe Financial Connections](https://docs.stripe.com/financial-connections.md) within the Stripe-hosted or embedded onboarding form by following these steps:

1. Navigate to your [External Account settings](https://dashboard.stripe.com/settings/connect/payouts/external_accounts), where you manage optional Connect onboarding features.
1. For connected accounts where your platform collects account information when requirements change, you must allow Stripe-hosted and embedded onboarding to collect external account details. Under **Stripe-hosted onboarding for Custom accounts**, allow Stripe to collect external account information by turning on the toggle.
1. Under **How will bank account details be collected?**, select **Financial Connections**.
1. (Optional) Request permission to access additional data on the accounts instantly verified with Financial Connections, such as balances, ownership details, and transactions. If you request this additional access, you’re prompted to sign up for Stripe Financial Connections.

When external account detail collection is enabled, the onboarding flow prompts all connected accounts to authenticate their bank account.
![Image showing a Connect onboarding flow using Stripe Financial Connections to collect a payout account.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-financial-connections-onboarding.8937a023f6682c90bab8c0b39873909a.png)

A Connect onboarding flow using Stripe Financial Connections to collect a payout account.

If a connected account can’t instantly verify their bank account using Financial Connections, the verification process automatically falls back to manual entry:
![Image showing a Connect onboarding flow using the Stripe Financial Connections dialog to collect a payout account using manual entry.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-financial-connections-manual-entry.930da1e01c9026b9014008d75958bc8c.png)

A Connect onboarding flow using the Stripe Financial Connections dialog to collect a payout account using manual entry.

After onboarding, the specified bank account automatically attaches to the connected account.

## Retrieve data on a Financial Connections account (Server-side)

You can determine whether a connected account linked a Financial Connections account by using their `Account` ID to retrieve any linked Financial Connections accounts. Specify their `Account` ID as the `account_holder.account` and in the `Stripe-Account` header.

```curl
curl -G https://api.stripe.com/v1/financial_connections/accounts \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "account_holder[account]={{CONNECTEDACCOUNT_ID}}"
```

This returns an API response similar to the following:

```json
{
  "object": "list",
  "data": [
    {
      "id": "fca_zbyrdjTrwcYZJZc6WBs6GPid",
      "object": "financial_connections.account",
      "account_holder": {
        "account": "{{CONNECTED_ACCOUNT_ID}}",
        "type": "account"
      },
      ...
      "supported_payment_method_types": [
        "us_bank_account"
      ]
    }
    ...
  ]
}
```

If any Financial Connections accounts are listed, it indicates that the connected account linked them during the onboarding process. You can use the `id` value to access or refresh the data you specified in your [External Account settings](https://dashboard.stripe.com/settings/connect/payouts/external_accounts). To protect the privacy of your connected account’s data, you can only access the data you specified.

To start retrieving account data, follow the guides for [balances](https://docs.stripe.com/financial-connections/balances.md), [ownership](https://docs.stripe.com/financial-connections/ownership.md), and [transactions](https://docs.stripe.com/financial-connections/transactions.md). On all subsequent account retrieval and refresh requests, be sure to include the `Stripe-Account` header with the connected account ID:

```curl
curl https://api.stripe.com/v1/financial_connections/accounts/fca_zbyrdjTrwcYZJZc6WBs6GPid/refresh \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "features[]=balance"
```

#### Enable manual entry of bank account details

To allow Stripe to manually collect bank account details from connected accounts within the onboarding form, follow these steps:

1. Open your Connect settings and go to Payouts > External Accounts, where you can manage Connect onboarding options.
1. Under **How will bank account details be collected?**, select the option to manually collect bank account information.
1. For connected accounts where your platform collects account information when requirements change, you must allow Stripe-hosted and embedded onboarding to collect external account details. Under **Accounts where the platform is responsible for collecting requirements**, allow Stripe to collect external account information by turning on the toggle.
![Image showing a Connect onboarding flow using a form to collect a payout account using manual entry.](https://b.stripecdn.com/docs-statics-srv/assets/connect-custom-onboarding-payout-manual-entry-form.6764993258659b2ad6517e0825181e49.png)

Connect onboarding flow using a form to collect a payout account using manual entry.

Every country has a slightly different format for bank account details, and the form automatically displays the fields appropriate for your country of operation.

#### Direct API calls from a custom form

For connected accounts where your platform collects account information when requirements change, you can collect external account information by making direct API calls from a custom form.

#### Enable Stripe Financial Connections

### Available in

- US

Stripe platforms in the US can enable [Stripe Financial Connections](https://stripe.com/financial-connections) within their custom onboarding form. After you enable Stripe Financial Connections within your form, connected accounts instantly authenticate their bank account within the [authentication flow](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow). [Register for Financial Connections](https://dashboard.stripe.com/financial-connections/application) to be approved for live-mode access. 

### Create a SetupIntent (Server-side)

Insert a button or link on your onboarding form that calls a server-side endpoint to create a [SetupIntent](https://docs.stripe.com/api/setup_intents.md). The SetupIntent represents your intent to collect a connected account’s bank account information. For example, your button might say **Link your bank account**.

We recommend you create a *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) with an email address to correspond to each connected account. Attaching a Customer object allows you to [list previously linked external accounts](https://docs.stripe.com/api/financial_connections/accounts/list.md) later. Provide an email address when creating your customer to allow them to authenticate into their accounts in fewer steps by saving and reusing their bank details with [Link](https://support.stripe.com/questions/link-for-financial-connections-support-for-businesses) across Stripe businesses using the [Financial Connections authentication flow](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow).

When creating a SetupIntent to collect bank account details for a connected account, set the following parameters:

1. Set the `customer` type to the [Customer’s id](https://docs.stripe.com/api/customers/object.md#customer_object-id)
1. Set `payment_method_types` to `["us_bank_account"]`
1. Set `flow_directions` to `["outbound"]`
1. (Optional) Consider additional data required to fulfill your use case, and request permission to access it. For example, set `payment_method_options[us_bank_account][financial_connections][permissions]` to `["payment_method", "ownership"]` to request access to the ownership data for the Financial Connections Account after your user links their bank account using Financial Connections.

Here’s an example of the minimal requirements for creating a SetupIntent to collect bank account details:

```curl
curl https://api.stripe.com/v1/setup_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "flow_directions[]=outbound" \
  -d "payment_method_types[]=us_bank_account"
```

The SetupIntent in the response includes a `client_secret`, which allows you to launch the Stripe.js on-page modal UI that handles the collection and verification of bank account details.

Handle the `client_secret` carefully because it provides access to the SetupIntent with only a publishable key. Don’t log it, embed it in URLs, or expose it to anyone but your connected accounts.

#### Web

## Collect payment method details (Client-side)

Include the Stripe.js script on your bank account collection page by adding it to the head of your HTML file.

```html
<head>
  <title>Payout</title>
  <script src="https://js.stripe.com/dahlia/stripe.js"></script>
</head>
```

Create an instance of Stripe.js with the following JavaScript on your bank account collection page.

```javascript
// Set your publishable key. Remember to change this to your live publishable key in production!
// See your keys here: https://dashboard.stripe.com/apikeys
var stripe = Stripe('<<YOUR_PUBLISHABLE_KEY>>', {
  apiVersion: "{{DATE_VERSION}}"
});
```

Pass the `SetupIntent`’s `client_secret` and your connected account user’s full name to `stripe.collectBankAccountForSetup` to collect the Payment Method.

```javascript
// Assume you have a form to collect payout accounts
var form = document.getElementById('payout-form');

form.addEventListener('submit', (event) => {
  event.preventDefault();
  // clientSecret is the SetupIntent's client_secret property
  stripe.collectBankAccountForSetup({
    clientSecret,
    params: {
      payment_method_type: 'us_bank_account',
      payment_method_data: {
        billing_details: {
          // name is required
          name: 'Jenny Rosen',
          email: 'jenny@example.com'
        },
      },
    },
    // Optional, helpful for client-side logic
    expand: ['payment_method']
  }).then(({setupIntent, error}) => {
    if (error) {
      // Inform your connected account user that there was an error.
      console.log(error.message);
    } else {
      if (setupIntent.status === "requires_confirmation") {
        // Your connected account user provided bank account details

        // When you pass `expand: ['payment_method']` to `collectBankAccountForSetup`,
        // `setupIntent.payment_method` has data about the Payment Method, including
        // the Financial Connections Account ID, if your connected account user used
        // Financial Connections to provide their bank account details.
        const usedFinancialConnections = typeof setupIntent.payment_method.financial_connections_account === 'string';

        console.log(setupIntent.payment_method.id);
        // => 'pm_1Mb4UkJGNKiWrCEmJ1PS72Cd'

        return stripe.confirmUsBankAccountSetup(clientSecret).then(({setupIntent, error}) => {
          if (error) {
            // Inform your connected account user that there was an error, and check your request logs for errors
            console.log(error.message);
          } else {
            if (setupIntent.status === 'succeeded') {
              // SetupIntent confirmed, Payment Method attached to the Customer
              // Your logic to create a payout account could go here
            } else {
              // Unable to confirm the SetupIntent, re-fetch the SetupIntent for details
            }
          }
        });
      } else {
        // Your connected account user didn't provide bank account details. You
        // can re-prompt them using `collectBankAccountForSetup`

        return null;
      }
    }
  });
});
```

`collectBankAccountForSetup` returns a `Promise`. When your connected account completes the Stripe.js dialog, the `Promise` resolves with a `result` object that has one of the following keys:

- `setupIntent`, when your connected account exits the dialog
- `error` if there’s an unrecoverable error when displaying the dialog

If the `Promise` resolves with a `setupIntent` key, and `result.setupIntent.status` is `"requires_confirmation"`, confirm the `SetupIntent` by calling `confirmUsBankAccountSetup` with the `SetupIntent` `client_secret`.

`confirmUsBankAccountSetup` also returns a `Promise` that resolves with the same type of `result` object as `collectBankAccountForSetup`. On successful confirmation, `result.setupIntent.status` is `"succeeded"`. This means that you can use the `SetupIntent`’s `payment_method` to create a bank account token on your server.

When you call `stripe.collectBankAccountForSetup`, Stripe.js loads the [authentication flow](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), an on-page dialog that gives your connected accounts information about what data they’ll share, lets them find and select their financial institution, and lets them securely log in to their account to verify access.

By default your connected accounts can only add a checking or savings account in the authentication flow because Stripe can only facilitate payouts to an account enabled for ACH. Manual entry of account and routing number is also available if your connected account can’t find their institution or authenticate their account.

The manual entry flow might look like the following: 
![Authentication flow with manual entry fallback](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png)

If you want to prevent your connected account users from entering their bank account details manually, pass `payment_method_options[us_bank_account][verification_method]=instant` when creating the `SetupIntent`.

### Create an external account that you can use for payouts (Server-side)

After you confirm the SetupIntent, use the attached Payment Method to create a Bank Account Token, then use the Token to create an external payout account.

First, create a bank account token.

```curl
curl https://api.stripe.com/v1/tokens \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "bank_account[payment_method]={{PAYMENTMETHOD_ID}}" \
  -d "customer={{CUSTOMER_ID}}"
```

Then use the token’s ID to create an external payout account.

```curl
curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "external_account={{TOKEN_ID}}"
```

By default, providing an external account sets it as the new default external account for its currency, and deletes the old default account, if one exists.

You’re now ready to send payouts to your connected account. For more details on how to create and manage an external account for payouts, see [create external bank account](https://docs.stripe.com/api/external_account_bank_accounts/create.md).

### Retrieve data on a Financial Connections account (Server-side)

You can determine if your user linked a Financial Connections Account by retrieving the SetupIntent with the `payment_method` property expanded.

```curl
curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "expand[]=payment_method"
```

Which will return an API response similar to the following:

```javascript
{
  "id": "{{SETUP_INTENT_ID}}",
  "object": "setup_intent",
  // ...
  "payment_method": {
    "id": "{{PAYMENT_METHOD_ID}}",
    "object": "payment_method",
    // ...
    "type": "us_bank_account",
    "us_bank_account": {
      // ...
      // the value of "financial_connections_account" may be null
      "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}",
      // ...
    }
  },
  // ...
}
```

If the `payment_method` object’s `us_bank_account` object for the SetupIntent includes a `financial_connections_account` property, then your user linked a Financial Connections Account. You can use the `financial_connections_account` value to access or refresh the data you specified in the SetupIntent’s `payment_method_options[us_bank_account][financial_connections][permissions]` parameter. To protect the privacy of your user’s data, account data accessible to you is limited to the data you specified in this parameter.

Follow the guides for [balances](https://docs.stripe.com/financial-connections/balances.md), [ownership](https://docs.stripe.com/financial-connections/ownership.md), and [transactions](https://docs.stripe.com/financial-connections/transactions.md) data to start retrieving account data.

### (Optional) Use the Payment Method to process payments

You won’t be able to use a PaymentMethod collected using the above integration to process payments using PaymentIntents, because the SetupIntent is only requesting `"outbound"` permission, and you haven’t obtained authorization from your user by displaying a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). If you’d like to allow your user to use the same account to make payments and receive payouts,

1. Remove the `flow_directions` parameter from the Create Setup Intent API call.
1. Collect a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) from your user.

See the [ACH Direct Debit guide](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md) for additional details.

This integration pattern triggers microdeposit verification if your user provides their bank account details using the manual entry form.

#### iOS

## Include additional dependency for Financial Connections(Client-side)

The [Stripe iOS SDK](https://github.com/stripe/stripe-ios) is open source, [fully documented](https://stripe.dev/stripe-ios/index.html), and compatible with apps supporting iOS 13 or above.

#### Swift Package Manager

To install the SDK, follow these steps:

1. In Xcode, select **File** > **Add Package Dependencies…** and enter `https://github.com/stripe/stripe-ios-spm` as the repository URL.
1. Select the latest version number from our [releases page](https://github.com/stripe/stripe-ios/releases).
1. Add the **StripeFinancialConnections** product to the [target of your app](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app).

#### CocoaPods

1. If you haven’t already, install the latest version of [CocoaPods](https://guides.cocoapods.org/using/getting-started.html).
1. If you don’t have an existing [Podfile](https://guides.cocoapods.org/syntax/podfile.html), run the following command to create one:
   ```bash
   pod init
   ```
1. Add this line to your `Podfile`:
   ```podfile
   pod 'StripeFinancialConnections'
   ```
1. Run the following command:
   ```bash
   pod install
   ```
1. Don’t forget to use the `.xcworkspace` file to open your project in Xcode, instead of the `.xcodeproj` file, from here on out.
1. In the future, to update to the latest version of the SDK, run:
   ```bash
   pod update StripeFinancialConnections
   ```

#### Carthage

1. If you haven’t already, install the latest version of [Carthage](https://github.com/Carthage/Carthage#installing-carthage).
1. Add this line to your `Cartfile`:
   ```cartfile
   github "stripe/stripe-ios"
   ```
1. Follow the [Carthage installation instructions](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Make sure to embed all of the required frameworks listed [here](https://github.com/stripe/stripe-ios/tree/master/StripeFinancialConnections/README.md#manual-linking).
1. In the future, to update to the latest version of the SDK, run the following command:
   ```bash
   carthage update stripe-ios --platform ios
   ```

#### Manual Framework

1. Head to our [GitHub releases page](https://github.com/stripe/stripe-ios/releases/latest) and download and unzip **Stripe.xcframework.zip**.
1. Drag **StripeFinancialConnections.xcframework** to the **Embedded Binaries** section of the **General** settings in your Xcode project. Make sure to select **Copy items if needed**.
1. Repeat step 2 for all required frameworks listed [here](https://github.com/stripe/stripe-ios/tree/master/StripeFinancialConnections/README.md#manual-linking).
1. In the future, to update to the latest version of our SDK, repeat steps 1–3.

> For details on the latest SDK release and past versions, see the [Releases](https://github.com/stripe/stripe-ios/releases) page on GitHub. To receive notifications when a new release is published, [watch releases](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) for the repository.

## Set up a return URL (Client-side)

The customer might navigate away from your app to authenticate (for example, in Safari or their banking app). To allow them to automatically return to your app after authenticating, [configure a custom URL scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app) and set up your app delegate to forward the URL to the SDK. Stripe doesn’t support [universal links](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content).

#### SceneDelegate

#### Swift

```swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect")
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else {
        return
    }
    let stripeHandled = StripeAPI.handleURLCallback(with: url)
    if (!stripeHandled) {
        // This was not a Stripe url – handle the URL normally as you would
    }
}

```

#### AppDelegate

#### Swift

```swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect")
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
    let stripeHandled = StripeAPI.handleURLCallback(with: url)
    if (stripeHandled) {
        return true
    } else {
        // This was not a Stripe url – handle the URL normally as you would
    }
    return false
}
```

#### SwiftUI

#### Swift

```swift

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup {
      Text("Hello, world!").onOpenURL { incomingURL in
          let stripeHandled = StripeAPI.handleURLCallback(with: incomingURL)
          if (!stripeHandled) {
            // This was not a Stripe url – handle the URL normally as you would
          }
        }
    }
  }
}
```

## Collect payment method details (Client-side)

Use the class function `collectUSBankAccountParams` in `STPCollectBankAccountParams` to create the parameters required to call `collectBankAccountForSetup`. You must provide your connected account user’s full name to collect an ACH Direct Debit `PaymentMethod`.

Create an instance of `BankAccountCollector` to call `collectBankAccountForSetup` and collect bank account details, create a `PaymentMethod`, and attach that `PaymentMethod` to the `SetupIntent`.

Pass the `SetupIntent`’s `client_secret`, your return URL, and the `STPCollectBankAccountParams` parameters to `collectBankAccountForSetup`.

#### Swift

```swift
// Build params
let collectParams = STPCollectBankAccountParams.collectUSBankAccountParams(with: name, email: email)

// Calling this method displays a dialog for collecting bank account information
let bankAccountCollector = STPBankAccountCollector()
bankAccountCollector.collectBankAccountForSetup(clientSecret: clientSecret,
                                                returnURL: "your-app://stripe-redirect",
                                                params: collectParams,
                                                from: self) { intent, error in
    guard let intent = intent else {
        // handle error
        return
    }
    if case .requiresPaymentMethod = intent.status {
        // Customer canceled the Financial Connections dialog. Present them with other
        // payment method type options.
    } else if case .requiresConfirmation = intent.status {
        // We collected an account - possibly instantly verified, but possibly
        // manually-entered.

        let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: clientSecret, paymentMethodType: .USBankAccount)

        // Confirm the SetupIntent
        STPPaymentHandler.shared().confirmSetupIntent(
          setupIntentParams, with: self
        ) { (status, intent, error) in
            switch status {
            case .failed:
                // Setup failed
            case .canceled:
                // Setup was canceled
            case .succeeded:
                // Setup succeeded, Payment Method attached to the Customer
                // Your logic to create a payout account could go here
            @unknown default:
                fatalError()
            }
        }
    }
}
```

This loads the [authentication flow](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), a dialog that gives your connected accounts information about what data they’ll share, lets them find and select their financial institution, and lets them securely log in to their account to verify access.

`collectBankAccountForSetupWithClientSecret` completes with either the `SetupIntent` or an error. When it completes with a `SetupIntent` and its status is `requires_confirmation`, confirm the `SetupIntent` by calling `confirmSetupIntent` on the shared `STPPaymentHandler` instance.

`confirmSetupIntent` completes with the same parameters as `collectBankAccountForSetupWithClientSecret`. On successful confirmation, the `SetupIntent` will have a status of `succeeded`. This means that you can use the `SetupIntent`’s `payment_method` to create a bank account token on your server.

By default your connected accounts can only add a checking or savings account in the authentication flow because Stripe can only facilitate payouts to an ACH-enabled account. Manual entry of account and routing number is also available if your connected account can’t find their institution or authenticate their account.

The manual entry flow might look like the following: 
![Authentication flow with manual entry fallback](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png)

If you want to prevent your connected account users from entering their bank account details manually, pass `payment_method_options[us_bank_account][verification_method]=instant` when creating the `SetupIntent`.

### Create an external account that you can use for payouts (Server-side)

After you confirm the SetupIntent, use the attached Payment Method to create a Bank Account Token, then use the Token to create an external payout account.

First, create a bank account token.

```curl
curl https://api.stripe.com/v1/tokens \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "bank_account[payment_method]={{PAYMENTMETHOD_ID}}" \
  -d "customer={{CUSTOMER_ID}}"
```

Then use the token’s ID to create an external payout account.

```curl
curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "external_account={{TOKEN_ID}}"
```

By default, providing an external account sets it as the new default external account for its currency, and deletes the old default account, if one exists.

You’re now ready to send payouts to your connected account. For more details on how to create and manage an external account for payouts, see [create external bank account](https://docs.stripe.com/api/external_account_bank_accounts/create.md).

### Retrieve data on a Financial Connections account (Server-side)

You can determine if your user linked a Financial Connections Account by retrieving the SetupIntent with the `payment_method` property expanded.

```curl
curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "expand[]=payment_method"
```

Which will return an API response similar to the following:

```javascript
{
  "id": "{{SETUP_INTENT_ID}}",
  "object": "setup_intent",
  // ...
  "payment_method": {
    "id": "{{PAYMENT_METHOD_ID}}",
    "object": "payment_method",
    // ...
    "type": "us_bank_account",
    "us_bank_account": {
      // ...
      // the value of "financial_connections_account" may be null
      "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}",
      // ...
    }
  },
  // ...
}
```

If the `payment_method` object’s `us_bank_account` object for the SetupIntent includes a `financial_connections_account` property, then your user linked a Financial Connections Account. You can use the `financial_connections_account` value to access or refresh the data you specified in the SetupIntent’s `payment_method_options[us_bank_account][financial_connections][permissions]` parameter. To protect the privacy of your user’s data, account data accessible to you is limited to the data you specified in this parameter.

Follow the guides for [balances](https://docs.stripe.com/financial-connections/balances.md), [ownership](https://docs.stripe.com/financial-connections/ownership.md), and [transactions](https://docs.stripe.com/financial-connections/transactions.md) data to start retrieving account data.

### (Optional) Use the Payment Method to process payments

You won’t be able to use a PaymentMethod collected using the above integration to process payments using PaymentIntents, because the SetupIntent is only requesting `"outbound"` permission, and you haven’t obtained authorization from your user by displaying a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). If you’d like to allow your user to use the same account to make payments and receive payouts,

1. Remove the `flow_directions` parameter from the Create Setup Intent API call.
1. Collect a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) from your user.

See the [ACH Direct Debit guide](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md) for additional details.

This integration pattern triggers microdeposit verification if your user provides their bank account details using the manual entry form.

#### Android

## Include additional dependency for Financial Connections(Client-side)

The [Stripe Android SDK](https://github.com/stripe/stripe-android) is open source and [fully documented](https://stripe.dev/stripe-android/).

To install the SDK, add `financial-connections` to the `dependencies` block of your [app/build.gradle](https://developer.android.com/studio/build/dependencies) file:

#### Kotlin

```kotlin
plugins {
    id("com.android.application")
}

android { ... }

dependencies {
  // ...

  // Financial Connections Android SDK
  implementation("com.stripe:financial-connections:23.3.0")
}
```

> For details on the latest SDK release and past versions, see the [Releases](https://github.com/stripe/stripe-android/releases) page on GitHub. To receive notifications when a new release is published, [watch releases for the repository](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository).

## Collect payment method details (Client-side)

Use `CollectBankAccountConfiguration.USBankAccount` to create the parameters required to call `presentWithSetupIntent`. You must provide your connected account user’s full name to collect an ACH Direct Debit `PaymentMethod`.

Initialize a CollectBankAccountLauncher instance inside `onCreate` of your payout Activity, passing a method to handle the result. Then proceed to call `presentWithSetupIntent` to collect bank account details, create a `PaymentMethod`, and attach that `PaymentMethod` to the `SetupIntent`.

#### Kotlin

```kotlin
import androidx.appcompat.app.AppCompatActivity

class PayoutActivity : AppCompatActivity() {
    private lateinit var setupIntentClientSecret: String
    private lateinit var collectBankAccountLauncher: CollectBankAccountLauncher
    private val paymentLauncher: PaymentLauncher = PaymentLauncher.Companion.create(
        this, "YOUR_PUBLISHABLE_KEY",
        null,
        ::onPaymentResult
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Create collector
        collectBankAccountLauncher = CollectBankAccountLauncher.create(
            this
        ) { result: CollectBankAccountResult ->
            when (result) {
                is CollectBankAccountResult.Completed -> {
                    val intent = result.response.intent
                    if (intent.status == StripeIntent.Status.RequiresPaymentMethod) {
                        // Customer canceled the Financial Connections dialog. Present them with other
                        // payment method type options.
                    } else if (intent.status == StripeIntent.Status.RequiresConfirmation) {
                        // We collected an account - possibly instantly verified, but possibly
                        // manually-entered.

                        // Confirm the SetupIntent
                        val confirmParams = ConfirmSetupIntentParams.create(
                            clientSecret = setupIntentClientSecret,
                            paymentMethodType = PaymentMethod.Type.USBankAccount
                        )
                        paymentLauncher.confirm(confirmParams)
                    }
                }
                is CollectBankAccountResult.Cancelled -> {
                    // handle cancellation
                }
                is CollectBankAccountResult.Failed -> {
                    // handle error
                    print("Error: ${result.error}")
                }
            }
        }
    }

    fun collectPayoutAccount() {
        // ...

        // Build params
        val collectParams: CollectBankAccountConfiguration =
            CollectBankAccountConfiguration.USBankAccount(
                name,
                email
            )

        // Calling this method triggers the Financial Connections dialog to be displayed
        collectBankAccountLauncher.presentWithSetupIntent(
            publishableKey,
            setupIntentClientSecret,
            collectParams
        )
    }

    private fun onPaymentResult(paymentResult: PaymentResult) {
        when (paymentResult) {
            is PaymentResult.Completed -> {
                // Setup succeeded, Payment Method attached to the Customer
                // Your logic to create a payout account could go here
            }
            is PaymentResult.Canceled -> {
                // handle cancel flow
            }
            is PaymentResult.Failed -> {
                // handle failures
            }
        }
    }
}
```

This loads the [authentication flow](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), a dialog that gives your connected accounts information about what data they’ll share, lets them find and select their financial institution, and lets them securely log in to their account to verify access.

`CollectBankAccountLauncher` completes with a result object that contains either the `SetupIntent` or an error. When it completes with a `SetupIntent` and its status is `"requires_confirmation"`, confirm the `SetupIntent` using the `confirm` method on a `PaymentLauncher` instance.

When it completes, `confirm` calls a configurable method with a [PaymentResult](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-result/index.html?query=sealed%20class%20PaymentResult%20:%20Parcelable) object. On successful confirmation, the `PaymentResult` object is a `PaymentResult.Completed`. This means that you can use the `SetupIntent`’s `payment_method` to create a Bank Account Token on your server.

By default your connected accounts can only add a checking or savings account in the authentication flow because Stripe can only facilitate payouts to an ACH-enabled account. Manual entry of account and routing number is also available if your connected account can’t find their institution or authenticate their account.

The manual entry flow might look like the following: 
![Authentication flow with manual entry fallback](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png)

If you want to prevent your connected account users from entering their bank account details manually, pass `payment_method_options[us_bank_account][verification_method]=instant` when creating the `SetupIntent`.

### Create an external account that you can use for payouts (Server-side)

After you confirm the SetupIntent, use the attached Payment Method to create a Bank Account Token, then use the Token to create an external payout account.

First, create a bank account token.

```curl
curl https://api.stripe.com/v1/tokens \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "bank_account[payment_method]={{PAYMENTMETHOD_ID}}" \
  -d "customer={{CUSTOMER_ID}}"
```

Then use the token’s ID to create an external payout account.

```curl
curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "external_account={{TOKEN_ID}}"
```

By default, providing an external account sets it as the new default external account for its currency, and deletes the old default account, if one exists.

You’re now ready to send payouts to your connected account. For more details on how to create and manage an external account for payouts, see [create external bank account](https://docs.stripe.com/api/external_account_bank_accounts/create.md).

### Retrieve data on a Financial Connections account (Server-side)

You can determine if your user linked a Financial Connections Account by retrieving the SetupIntent with the `payment_method` property expanded.

```curl
curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "expand[]=payment_method"
```

Which will return an API response similar to the following:

```javascript
{
  "id": "{{SETUP_INTENT_ID}}",
  "object": "setup_intent",
  // ...
  "payment_method": {
    "id": "{{PAYMENT_METHOD_ID}}",
    "object": "payment_method",
    // ...
    "type": "us_bank_account",
    "us_bank_account": {
      // ...
      // the value of "financial_connections_account" may be null
      "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}",
      // ...
    }
  },
  // ...
}
```

If the `payment_method` object’s `us_bank_account` object for the SetupIntent includes a `financial_connections_account` property, then your user linked a Financial Connections Account. You can use the `financial_connections_account` value to access or refresh the data you specified in the SetupIntent’s `payment_method_options[us_bank_account][financial_connections][permissions]` parameter. To protect the privacy of your user’s data, account data accessible to you is limited to the data you specified in this parameter.

Follow the guides for [balances](https://docs.stripe.com/financial-connections/balances.md), [ownership](https://docs.stripe.com/financial-connections/ownership.md), and [transactions](https://docs.stripe.com/financial-connections/transactions.md) data to start retrieving account data.

### (Optional) Use the Payment Method to process payments

You won’t be able to use a PaymentMethod collected using the above integration to process payments using PaymentIntents, because the SetupIntent is only requesting `"outbound"` permission, and you haven’t obtained authorization from your user by displaying a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). If you’d like to allow your user to use the same account to make payments and receive payouts,

1. Remove the `flow_directions` parameter from the Create Setup Intent API call.
1. Collect a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) from your user.

See the [ACH Direct Debit guide](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md) for additional details.

This integration pattern triggers microdeposit verification if your user provides their bank account details using the manual entry form.

#### React Native

## Collect payment method details (Client-side)

Pass the `SetupIntent`’s `client_secret` and your connected account user’s full name to `collectBankAccountForSetup` to collect the Payment Method.

```javascript
import {collectBankAccountForSetup, confirmSetup} from '@stripe/stripe-react-native';

export default function PayoutAccountCollectionButton() {
  // Get SetupIntent client secret, connected account user's full name, and email address.
  // in this example, from a custom hook.
  const {clientSecret, name, email} = useMyCustomState();

  const handleCollectBankAccountPress = async (clientSecret) => {
    const {setupIntent, error} = await collectBankAccountForSetup(
      clientSecret,
      {
        paymentMethodType: 'USBankAccount',
        paymentMethodData: {
          billingDetails: {
            name,
            email
          }
        }
      },
    );

    if (error) {
      // Inform your connected account user that there was an error.
    } else if (setupIntent) {
      if (setupIntent.status === SetupIntents.Status.RequiresConfirmation) {
        // Your connected account user provided bank account details

        // Confirm the SetupIntent
        const {error: confirmError, setupIntent: confirmedSetupIntent} = await confirmSetup(clientSecret, { type: 'USBankAccount' });

        if (confirmError) {
          // Unable to confirm the SetupIntent, inform your connected account user there was an error
        } else if (confirmedSetupIntent) {
          if (confirmedSetupIntent.status === SetupIntents.Status.Succeeded) {
            // Setup succeeded, Payment Method attached to the Customer
            // Your logic to create a payout account could go here
          } else {
            // Unable to confirm the SetupIntent, re-fetch the SetupIntent for details
          }
        }
      } else {
        // Connected account user didn't link an account or provide details manually
      }
    }
  };

  return (
    <Button
      onPress={() => handleCollectBankAccountPress(clientSecret)}
      title="Collect bank account"
    />
  );
}
```

`collectBankAccountForSetup` returns a `Promise`. When your connected account completes the dialog, the `Promise` resolves with a `result` object that has one of the following keys:

- `setupIntent`, when your connected account exits the dialog
- `error` if there’s an unrecoverable error when displaying the dialog

If the `Promise` resolves with a `setupIntent` key, and `result.setupIntent.status` is `SetupIntents.Status.RequiresConfirmation`, confirm the `SetupIntent` by calling `confirmSetup` with the `SetupIntent` `client_secret`.

`confirmSetup` also returns a `Promise`, which resolves with the same type of `result` object as `collectBankAccountForSetup`. On successful confirmation, `result.setupIntent.status` is `SetupIntents.Status.Succeeded`. This means that you can use the `SetupIntent`’s `payment_method` to create a Bank Account Token on your server.

Calling `collectBankAccountForSetup` opens the [authentication flow](https://docs.stripe.com/financial-connections/fundamentals.md#authentication-flow), a dialog that gives your connected accounts information about what data they’ll share, lets them find and select their financial institution, and lets them securely log in to their account to verify access.

By default your connected accounts can only add a checking or savings account in the authentication flow because Stripe can only facilitate payouts to an ACH-enabled account. Manual entry of account and routing number is also available if your connected account can’t find their institution or authenticate their account.

The manual entry flow might look like the following: 
![Authentication flow with manual entry fallback](https://b.stripecdn.com/docs-statics-srv/assets/manual_fallback.c910f590ec792b6133bb88947332604c.png)

If you want to prevent your connected account users from entering their bank account details manually, pass `payment_method_options[us_bank_account][verification_method]=instant` when creating the `SetupIntent`.

### Create an external account that you can use for payouts (Server-side)

After you confirm the SetupIntent, use the attached Payment Method to create a Bank Account Token, then use the Token to create an external payout account.

First, create a bank account token.

```curl
curl https://api.stripe.com/v1/tokens \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "bank_account[payment_method]={{PAYMENTMETHOD_ID}}" \
  -d "customer={{CUSTOMER_ID}}"
```

Then use the token’s ID to create an external payout account.

```curl
curl https://api.stripe.com/v1/accounts/{{ACCOUNT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \
  -d "external_account={{TOKEN_ID}}"
```

By default, providing an external account sets it as the new default external account for its currency, and deletes the old default account, if one exists.

You’re now ready to send payouts to your connected account. For more details on how to create and manage an external account for payouts, see [create external bank account](https://docs.stripe.com/api/external_account_bank_accounts/create.md).

### Retrieve data on a Financial Connections account (Server-side)

You can determine if your user linked a Financial Connections Account by retrieving the SetupIntent with the `payment_method` property expanded.

```curl
curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "expand[]=payment_method"
```

Which will return an API response similar to the following:

```javascript
{
  "id": "{{SETUP_INTENT_ID}}",
  "object": "setup_intent",
  // ...
  "payment_method": {
    "id": "{{PAYMENT_METHOD_ID}}",
    "object": "payment_method",
    // ...
    "type": "us_bank_account",
    "us_bank_account": {
      // ...
      // the value of "financial_connections_account" may be null
      "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}",
      // ...
    }
  },
  // ...
}
```

If the `payment_method` object’s `us_bank_account` object for the SetupIntent includes a `financial_connections_account` property, then your user linked a Financial Connections Account. You can use the `financial_connections_account` value to access or refresh the data you specified in the SetupIntent’s `payment_method_options[us_bank_account][financial_connections][permissions]` parameter. To protect the privacy of your user’s data, account data accessible to you is limited to the data you specified in this parameter.

Follow the guides for [balances](https://docs.stripe.com/financial-connections/balances.md), [ownership](https://docs.stripe.com/financial-connections/ownership.md), and [transactions](https://docs.stripe.com/financial-connections/transactions.md) data to start retrieving account data.

### (Optional) Use the Payment Method to process payments

You won’t be able to use a PaymentMethod collected using the above integration to process payments using PaymentIntents, because the SetupIntent is only requesting `"outbound"` permission, and you haven’t obtained authorization from your user by displaying a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit). If you’d like to allow your user to use the same account to make payments and receive payouts,

1. Remove the `flow_directions` parameter from the Create Setup Intent API call.
1. Collect a [mandate](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-collect-mandate-and-submit) from your user.

See the [ACH Direct Debit guide](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md) for additional details.

This integration pattern triggers microdeposit verification if your user provides their bank account details using the manual entry form.

## Set up a return URL (iOS only) (Client-side)

When a customer exits your app (for example to authenticate in Safari or their banking app), provide a way for them to automatically return to your app. Many payment method types *require* a return URL. If you don’t provide one, we can’t present payment methods that require a return URL to your users, even if you’ve enabled them.

To provide a return URL:

1. [Register](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app#Register-your-URL-scheme) a custom URL. Universal links aren’t supported.
1. [Configure](https://reactnative.dev/docs/linking) your custom URL.
1. Set up your root component to forward the URL to the Stripe SDK as shown below.

> If you’re using Expo, [set your scheme](https://docs.expo.io/guides/linking/#in-a-standalone-app) in the `app.json` file.

```jsx
import { useEffect, useCallback } from 'react';
import { Linking } from 'react-native';
import { useStripe } from '@stripe/stripe-react-native';

export default function MyApp() {
  const { handleURLCallback } = useStripe();

  const handleDeepLink = useCallback(
    async (url: string | null) => {
      if (url) {
        const stripeHandled = await handleURLCallback(url);
        if (stripeHandled) {
          // This was a Stripe URL - you can return or add extra handling here as you see fit
        } else {
          // This was NOT a Stripe URL – handle as you normally would
        }
      }
    },
    [handleURLCallback]
  );

  useEffect(() => {
    const getUrlAsync = async () => {
      const initialUrl = await Linking.getInitialURL();
      handleDeepLink(initialUrl);
    };

    getUrlAsync();

    const deepLinkListener = Linking.addEventListener(
      'url',
      (event: { url: string }) => {
        handleDeepLink(event.url);
      }
    );

    return () => deepLinkListener.remove();
  }, [handleDeepLink]);

  return (
    <View>
      <AwesomeAppComponent />
    </View>
  );
}
```

For more information on native URL schemes, refer to the [Android](https://developer.android.com/training/app-links/deep-linking) and [iOS](https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app) docs.

#### Manually collect bank account or debit card details

To attach bank accounts to connected accounts, your custom form needs to include fields for an `account_number` and, in some countries, a `routing_number`. Every country has a slightly different format for these numbers, and entering them incorrectly causes subsequent payouts to fail.

Stripe recommends creating validations in your bank account entry forms that enforce the required formats based on the country of the connected account’s bank. In some countries, you must combine separate pieces of information, such as the bank code and branch code, to create a routing number.

#### Albania (AL)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| SWIFT / BIC Code         | AAAAALTXXXX (8-11 characters)                |
| IBAN                     | AL35202111090000000001234567 (28 characters) |

Albania is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Algeria (DZ)

| Bank account information | Example data                         |
| ------------------------ | ------------------------------------ |
| SWIFT / BIC Code         | AAAADZDZXXX (8-11 characters)        |
| Account Number           | 00001234567890123456 (20 characters) |

Algeria is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Angola (AO)

| Bank account information | Example data                              |
| ------------------------ | ----------------------------------------- |
| SWIFT / BIC Code         | AAAAAOAOXXX (8-11 characters)             |
| IBAN                     | AO06004400006729503010102 (25 characters) |

Angola is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Antigua and Barbuda (AG)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| SWIFT / BIC Code         | AAAAAGAGXYZ (8-11 characters)  |
| Account number           | 000123456789 (1-32 characters) |

Antigua and Barbuda is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Argentina (AR)

| Bank account information | Example data                       |
| ------------------------ | ---------------------------------- |
| CBU                      | 0110000600000000000000 (22 digits) |

Argentina is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Armenia (AM)

| Bank account information | Example data               |
| ------------------------ | -------------------------- |
| SWIFT / BIC Code         | AAAAAMNNXXX (8-11 digits)  |
| Account number           | 00001234567 (11-16 digits) |

Armenia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Australia (AU)

| Bank account information | Example data                            |
| ------------------------ | --------------------------------------- |
| BSB                      | 123456 (6 characters)                   |
| Account number (AUD)     | 12345678 (4-9 digits)                   |
| Account number (non-AUD) | DTCBBZ1T (4-14 alphanumeric characters) |

#### Austria (AT)

| Bank account information | Example data         |
| ------------------------ | -------------------- |
| IBAN                     | AT611904300234573201 |

#### Azerbaijan (AZ)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| Bank code                | 123456 (6 digits)                            |
| Branch code              | 123456 (6 digits)                            |
| IBAN                     | AZ77ADJE12345678901234567890 (28 characters) |

When creating a bank account with the API, combine the bank code and branch code to create a full routing number (for example, **123456-123456**).

Azerbaijan is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Bahamas (BS)

| Bank account information | Example data                  |
| ------------------------ | ----------------------------- |
| SWIFT / BIC Code         | AAAABSNSXXX (8-11 characters) |
| Account Number           | 0001234 (1-10 digits)         |

Bahamas is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Bahrain (BH)

| Bank account information | Example data                           |
| ------------------------ | -------------------------------------- |
| SWIFT / BIC Code         | AAAABHBMXYZ (8-11 characters)          |
| IBAN                     | BH29BMAG1299123456BH00 (22 characters) |

Bahrain is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Bangladesh (BD)

| Bank account information | Example data                 |
| ------------------------ | ---------------------------- |
| Bank code                | 110000000 (9 characters)     |
| Account Number           | 0000123456789 (13-17 digits) |

Bangladesh is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Belgium (BE)

| Bank account information | Example data     |
| ------------------------ | ---------------- |
| IBAN                     | BE12345678912345 |

#### Benin (BJ)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| IBAN                     | BJ66BJ0610100100144390000769 (28 characters) |

Benin is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Bhutan (BT)

| Bank account information | Example data                |
| ------------------------ | --------------------------- |
| SWIFT / BIC Code         | AAAABTBTXXX (8-11 digits)   |
| Account number           | 0000123456789 (1-17 digits) |

Bhutan is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Bolivia (BO)

| Bank account information | Example data                |
| ------------------------ | --------------------------- |
| Bank code                | 040 (1-3 digits)            |
| Account number           | 000123456789 (10-15 digits) |

Bolivia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Bosnia and Herzegovina (BA)

| Bank account information | Example data                         |
| ------------------------ | ------------------------------------ |
| SWIFT / BIC Code         | AAAABABAXXX (8-11 characters)        |
| IBAN                     | BA095520001234567812 (20 characters) |

Bosnia and Herzegovina is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Botswana (BW)

| Bank account information | Example data                  |
| ------------------------ | ----------------------------- |
| SWIFT / BIC Code         | AAAABWBWXXX (8-11 characters) |
| Account Number           | 000123456789 (1-16 digits)    |

Botswana is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Brazil (BR)

| Bank account information | Example data          |
| ------------------------ | --------------------- |
| Bank code                | 123 (3 characters)    |
| Branch code              | 4567 (4 characters)   |
| Account number           | Format varies by bank |

When using the API to create a bank account, combine the bank code and branch code to create a full routing number (for example, **1234567**).

#### Brunei (BN)

| Bank account information | Example data                |
| ------------------------ | --------------------------- |
| SWIFT / BIC Code         | AAAABNBBXXX (8-11 digits)   |
| Account number           | 0000123456789 (1-13 digits) |

Brunei is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Bulgaria (BG)

| Bank account information | Example data                           |
| ------------------------ | -------------------------------------- |
| IBAN                     | BG80BNBG96611020345678 (22 characters) |

#### Cambodia (KH)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| SWIFT / BIC Code         | AAAAKHKHXXX (8-11 characters)  |
| Account Number           | 000123456789 (5-15 characters) |

Cambodia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Canada (CA)

| Bank account information | Example data          |
| ------------------------ | --------------------- |
| Transit number           | 12345                 |
| Institution number       | 678                   |
| Account number           | Format varies by bank |

When using the API to create a bank account, combine the transit and institution numbers to create a full routing number (for example, **12345678**).

#### Chile (CL)

| Bank account information | Example data               |
| ------------------------ | -------------------------- |
| Bank code                | 507 (3 digits)             |
| Account number           | 000123456789 (5-25 digits) |
| Bank account type        | checking                   |

There are two valid bank account types: “checking” and “savings”.

Chile is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Colombia (CO)

| Bank account information | Example data               |
| ------------------------ | -------------------------- |
| Bank code                | 060 (3 digits)             |
| Account number           | 000123456789 (9-16 digits) |
| Bank account type        | savings                    |

There are two valid bank account types: “checking” and “savings”.

Colombia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Costa Rica (CR)

| Bank account information | Example data                           |
| ------------------------ | -------------------------------------- |
| IBAN                     | CR04010212367856709123 (22 characters) |

Costa Rica is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Côte d'Ivoire (CI)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| IBAN                     | CI93CI0080111301134291200589 (28 characters) |

Côte d’Ivoire is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Croatia (HR)

| Bank account information | Example data                          |
| ------------------------ | ------------------------------------- |
| IBAN                     | HR1210010051863000160 (21 characters) |

#### Cyprus (CY)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| IBAN                     | CY17002001280000001200527600 (28 characters) |

#### Czech Republic (CZ)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| IBAN                     | CZ6508000000192000145399 (24 characters) |

#### Denmark (DK)

| Bank account information | Example data       |
| ------------------------ | ------------------ |
| IBAN                     | DK5000400440116243 |

#### Dominican Republic (DO)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| Bank Code                | 021 (1-3 digits)               |
| Branch Code              | 4232 (0-5 digits)              |
| Account number           | 000123456788 (Up to 28 digits) |

When using the API to create a bank account, combine the bank code and branch code to create a full routing number (for example, **0214232**).

Dominican Republic is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Ecuador (EC)

| Bank account information | Example data               |
| ------------------------ | -------------------------- |
| SWIFT / BIC Code         | AAAAECE1XXX (8-11 digits)  |
| Account number           | 000123456789 (5-18 digits) |

Ecuador is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Egypt (EG)

| Bank account information | Example data                                  |
| ------------------------ | --------------------------------------------- |
| SWIFT / BIC Code         | NBEGEGCX331 (8-11 characters)                 |
| IBAN                     | EG573456789012345678901111111 (29 characters) |

Egypt is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### El Salvador (SV)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| SWIFT / BIC              | AAAASVS1XXX (8-11 characters)                |
| IBAN                     | SV44BCIE12345678901234567890 (28 characters) |

El Salvador is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Estonia (EE)

| Bank account information | Example data                         |
| ------------------------ | ------------------------------------ |
| IBAN                     | EE382200221020145685 (20 characters) |

#### Ethiopia (ET)

| Bank account information | Example data                     |
| ------------------------ | -------------------------------- |
| SWIFT / BIC Code         | AAAAETETXXX (8-11 characters)    |
| Account Number           | 0000000012345 (13-16 characters) |

Ethiopia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Finland (FI)

| Bank account information | Example data       |
| ------------------------ | ------------------ |
| IBAN                     | FI2112345600000785 |

#### France (FR)

| Bank account information | Example data                                |
| ------------------------ | ------------------------------------------- |
| IBAN                     | FR1420041010050500013M02606 (27 characters) |

#### Gabon (GA)

| Bank account information | Example data                        |
| ------------------------ | ----------------------------------- |
| SWIFT / BIC Code         | AAAAGAGAXXX (8-11 characters)       |
| Account Number           | 00001234567890123456789 (23 digits) |

Gabon is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Gambia (GM)

| Bank account information | Example data                       |
| ------------------------ | ---------------------------------- |
| SWIFT / BIC Code         | AGIXGMGM (8 - 11 characters)       |
| Account number           | 000123000456000789 (18 characters) |

Gambia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Germany (DE)

| Bank account information | Example data                           |
| ------------------------ | -------------------------------------- |
| IBAN                     | DE89370400440532013000 (22 characters) |

#### Ghana (GH)

| Bank account information | Example data               |
| ------------------------ | -------------------------- |
| Bank sort code           | 022112 (6 digits)          |
| Account number           | 000123456789 (8-20 digits) |

Ghana is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Gibraltar (GI)

| Bank account information | Example data |
| ------------------------ | ------------ |
| Sort Code                | 12-34-56     |
| Account number           | 01234567     |

The information required for GI-based bank accounts depends on the currency being used and the country of your Stripe account.

#### Greece (GR)

| Bank account information | Example data                                |
| ------------------------ | ------------------------------------------- |
| IBAN                     | GR1601101250000000012300695 (27 characters) |

#### Guatemala (GT)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| SWIFT / BIC Code         | AAAAGTGCXYZ (8-11 characters)                |
| IBAN                     | GT82TRAJ01020000001210029690 (28 characters) |

Guatemala is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Guyana (GY)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| SWIFT / BIC Code         | AAAAGYGGXYZ (8-11 characters)  |
| Account number           | 000123456789 (1-32 characters) |

Guyana is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Hong Kong (HK)

| Bank account information | Example data                |
| ------------------------ | --------------------------- |
| Clearing Code            | 123 (3 characters)          |
| Branch code              | 456 (3 characters)          |
| Account number           | 123456-789 (6-9 characters) |

When using the API to create a bank account, combine the bank code and branch code to create a full routing number (for example, **123-456**).

#### Hungary (HU)

| Bank account information | Example data                                |
| ------------------------ | ------------------------------------------- |
| IBAN                     | HU42117730161111101800000000(28 characters) |

#### Iceland (IS)

| Bank account information | Example data                               |
| ------------------------ | ------------------------------------------ |
| IBAN                     | IS140159260076545510730339 (26 characters) |

Stripe only supports EUR bank accounts in Iceland.

Iceland is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### India (IN)

| Bank account information | Example data                |
| ------------------------ | --------------------------- |
| IFSC Code                | HDFC0004051 (11 characters) |
| Account number           | Format varies by bank       |

#### Indonesia (ID)

| Bank account information | Example data          |
| ------------------------ | --------------------- |
| Bank name                | UOB Buana             |
| Bank code                | 023 (3-4 characters)  |
| Account number           | Format varies by bank |

Indonesia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Ireland (IE)

| Bank account information | Example data                           |
| ------------------------ | -------------------------------------- |
| IBAN                     | IE29AIBK93115212345678 (22 characters) |

#### Israel (IL)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| IBAN                     | IL620108000000099999999  (23 characters) |

Israel is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Italy (IT)

| Bank account information | Example data                                |
| ------------------------ | ------------------------------------------- |
| IBAN                     | IT60X0542811101000000123456 (27 characters) |

#### Jamaica (JM)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| Bank Code                | 111 (3 digits)                 |
| Branch Code              | 00000 (5 digits)               |
| Account number           | 000123456789 (Up to 18 digits) |

When using the API to create a bank account, combine the bank code and branch code to create a full routing number (for example, **111-00000**).

Jamaica is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Japan (JP)

| Bank account information | Example data         |
| ------------------------ | -------------------- |
| Bank name                | いろは銀行                |
| Branch name              | 東京支店                 |
| Bank code                | 0123 (4 digits)      |
| Branch code              | 456 (3 digits)       |
| Account number           | 1234567 (4-8 digits) |
| Account owner name       | ヤマダハナコ               |

Stripe supports futsū (普通預金) or tōza (当座預金) type bank accounts in Japan. For cross-border payouts, your bank must also participate in the Foreign Exchange Yen Clearing System (FXYCS).

When using the API to create a bank account, combine the bank code and branch code to create a full routing number (for example, **0123456**). Also required is the name of the person or business that owns the bank account; use the [account_holder_name](https://docs.stripe.com/api.md#account_bank_account_object-account_holder_name) attribute for this. If the bank account holder name contains kanji characters, you need to replace them with **katakana**.

#### Jordan (JO)

| Bank account information | Example data                                   |
| ------------------------ | ---------------------------------------------- |
| SWIFT / BIC Code         | AAAAJOJOXXX (8-11 characters)                  |
| IBAN                     | JO32ABCJ0010123456789012345678 (30 characters) |

Jordan is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Kazakhstan (KZ)

| Bank account information | Example data                         |
| ------------------------ | ------------------------------------ |
| SWIFT / BIC Code         | AAAAKZKZXXX (8-11 characters)        |
| IBAN                     | KZ221251234567890123 (20 characters) |

Kazakhstan is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Kenya (KE)

| Bank account information | Example data                     |
| ------------------------ | -------------------------------- |
| SWIFT / BIC Code         | BARCKENXMDR (8 - 11 characters)  |
| Account number           | 0123456789 (up to 32 characters) |

Kenya is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Kuwait (KW)

| Bank account information | Example data                                   |
| ------------------------ | ---------------------------------------------- |
| SWIFT / BIC Code         | AAAAKWKWXYZ (8-11 characters)                  |
| IBAN                     | KW81CBKU0000000000001234560101 (30 characters) |

Kuwait is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Laos (LA)

| Bank account information | Example data                  |
| ------------------------ | ----------------------------- |
| SWIFT / BIC Code         | AAAALALAXXX (8-11 characters) |
| Account Number           | 000123456789 (1-18 digits)    |

Laos is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Latvia (LV)

| Bank account information | Example data                          |
| ------------------------ | ------------------------------------- |
| IBAN                     | LV80BANK0000435195001 (21 characters) |

#### Liechtenstein (LI)

| Bank account information | Example data                          |
| ------------------------ | ------------------------------------- |
| IBAN                     | LI21088100002324013AA (21 characters) |

#### Lithuania (LT)

| Bank account information | Example data                         |
| ------------------------ | ------------------------------------ |
| IBAN                     | LT121000011101001000 (20 characters) |

#### Luxembourg (LU)

| Bank account information | Example data                         |
| ------------------------ | ------------------------------------ |
| IBAN                     | LU280019400644750000 (20 characters) |

#### Macau (MO)

| Bank account information | Example data                      |
| ------------------------ | --------------------------------- |
| SWIFT / BIC Code         | AAAAMOMXXXX (11 digits)           |
| Account number           | 0000000001234567897 (1-19 digits) |

Macau is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Madagascar (MG)

| Bank account information | Example data                                |
| ------------------------ | ------------------------------------------- |
| SWIFT / BIC Code         | AAAAMGMGXXX (8-11 characters)               |
| IBAN                     | MG4800005000011234567890123 (27 characters) |

Madagascar is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Malaysia (MY)

| Bank account information | Example data                                    |
| ------------------------ | ----------------------------------------------- |
| Bank name                | HSBC Bank Malaysia Berhad                       |
| SWIFT / BIC Code         | HBMBMYKL (8-11 characters)                      |
| Account number           | 1234567890 (5-17 digits, format varies by bank) |

#### Malta (MT)

| Bank account information | Example data                                    |
| ------------------------ | ----------------------------------------------- |
| IBAN                     | MT84MALT011000012345MTLCAST001S (31 characters) |

#### Mauritius (MU)

| Bank account information | Example data                                   |
| ------------------------ | ---------------------------------------------- |
| SWIFT / BIC Code         | AAAAMUMUXYZ (8-11 characters)                  |
| IBAN                     | MU17BOMM0101101030300200000MUR (30 characters) |

Mauritius is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Mexico (MX)

| Bank account information | Example data                       |
| ------------------------ | ---------------------------------- |
| CLABE                    | 123456789012345678 (18 characters) |

#### Moldova (MD)

| Bank account information | Example data                         |
| ------------------------ | ------------------------------------ |
| SWIFT / BIC Code         | AAAAMDMDXXX (11 digits)              |
| Account number           | MD07AG123456789012345678 (24 digits) |

Moldova is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Monaco (MC)

| Bank account information | Example data                                |
| ------------------------ | ------------------------------------------- |
| IBAN                     | MC5810096180790123456789085 (27 characters) |

Monaco is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Mongolia (MN)

| Bank account information | Example data                  |
| ------------------------ | ----------------------------- |
| SWIFT / BIC Code         | AAAAMNUBXXX (8-11 characters) |
| Account Number           | 0002222001 (1-12 digits)      |

Mongolia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Morocco (MA)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| SWIFT / BIC Code         | AAAAMAMAXXX (8-11 characters)            |
| Account Number           | MA64011519000001205000534921 (28 digits) |

Morocco is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Mozambique (MZ)

| Bank account information | Example data                      |
| ------------------------ | --------------------------------- |
| SWIFT / BIC Code         | AAAAMZMXXXX (8-11 characters)     |
| Account Number           | 001234567890123456789 (21 digits) |

Mozambique is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Namibia (NA)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| SWIFT / BIC Code         | AAAANANXXYZ (8-11 characters)  |
| Account number           | 000123456789 (8-13 characters) |

Namibia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Netherlands (NL)

| Bank account information | Example data                       |
| ------------------------ | ---------------------------------- |
| IBAN                     | NL39RABO0300065264 (18 characters) |

#### New Zealand (NZ)

| Bank account information | Example data                    |
| ------------------------ | ------------------------------- |
| Account number           | AABBBB3456789YZZ (15-16 digits) |

Typically, banks present the account number in the format `xx-xxxx-xxxxxxx-xxx`. This can be input directly into the API without separators as the `account_number`. However, if the parts are provided separately, you can assemble them to form the standard format with the following explanations.

- Provide the full 15-16 digit account number without separators.
- `AABBBB` is the bank `AA` and branch numbers `BBBB`.
- `3456789` is the account number.
- `0ZZ` is the suffix with the `0` digit being optional if the suffix is only two digits. However, if the suffix is three digits, the first digit *must* be `0` (for example, suffix `23` could be represented as either `23` or `023`).

#### Niger (NE)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| IBAN                     | NE58NE0380100100130305000268 (28 characters) |

Niger is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Nigeria (NG)

| Bank account information | Example data            |
| ------------------------ | ----------------------- |
| SWIFT / BIC Code         | AAAANGLAXXX (11 digits) |
| Account number (NUBAN)   | 1111111112 (10 digits)  |

Nigeria is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### North Macedonia (MK)

| Bank account information | Example data                    |
| ------------------------ | ------------------------------- |
| SWIFT / BIC Code         | AAAAMK2XXXX (11 digits)         |
| Account number           | MK49250120000058907 (19 digits) |

North Macedonia is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Norway (NO)

| Bank account information | Example data                    |
| ------------------------ | ------------------------------- |
| IBAN                     | NO9386011117947 (15 characters) |

#### Oman (OM)

| Bank account information | Example data                  |
| ------------------------ | ----------------------------- |
| SWIFT / BIC Code         | AAAAOMOMXXX (8-11 characters) |
| Account number           | 000123456789 (6-16 digits)    |

Oman is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Pakistan (PK)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| SWIFT / BIC Code         | AAAAPKKAXXX (8-11 characters)            |
| IBAN                     | PK36SCBL0000001123456702 (24 characters) |

Pakistan is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Panama (PA)

| Bank account information | Example data               |
| ------------------------ | -------------------------- |
| SWIFT / BIC Code         | AAAAPAPAXXX (11 digits)    |
| Account number           | 000123456789 (1-18 digits) |

Panama is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Paraguay (PY)

| Bank account information | Example data                       |
| ------------------------ | ---------------------------------- |
| Bank code                | 27 (1-2 digits)                    |
| Account number           | 0000000123456789 (up to 16 digits) |

Paraguay is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Peru (PE)

| Bank account information | Example data                     |
| ------------------------ | -------------------------------- |
| CCI                      | 99934500012345670024 (20 digits) |

Peru is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Philippines (PH)

| Bank account information | Example data                    |
| ------------------------ | ------------------------------- |
| SWIFT / BIC Code         | BOPIPHMM (8-11 characters)      |
| Account number           | 0123456789010 (up to 17 digits) |

Philippines is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Poland (PL)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| IBAN                     | PL61109010140000071219812874 (28 characters) |

#### Portugal (PT)

| Bank account information | Example data                              |
| ------------------------ | ----------------------------------------- |
| IBAN                     | PT50123443211234567890172 (25 characters) |

#### Qatar (QA)

| Bank account information | Example data                              |
| ------------------------ | ----------------------------------------- |
| SWIFT / BIC Code         | AAAAMK2XXXX (11 digits)                   |
| Account number           | QA87CITI123456789012345678901 (29 digits) |

Qatar is only available for [cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Romania (RO)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| IBAN                     | RO49AAAA1B31007593840000 (24 characters) |

#### Rwanda (RW)

| Bank account information | Example data                  |
| ------------------------ | ----------------------------- |
| SWIFT / BIC Code         | AAAARWRWXXX (8-11 characters) |
| Account Number           | 000123456789 (1-15 digits)    |

Rwanda is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Saint Lucia (LC)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| SWIFT / BIC Code         | AAAALCLCXYZ (8-11 characters)  |
| Account number           | 000123456789 (1-32 characters) |

Saint Lucia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Saudi Arabia (SA)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| SWIFT / BIC Code         | NCBKSAJE101 (8-11 characters)            |
| IBAN                     | SA0380000000608010167519 (24 characters) |

Saudi Arabia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### San Marino (SM)

| Bank account information | Example data                                |
| ------------------------ | ------------------------------------------- |
| SWIFT / BIC Code         | AAAASMSMXXX (8-11 characters)               |
| IBAN                     | SM86U0322509800000000270100 (27 characters) |

San Marino is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Senegal (SN)

| Bank account information | Example data                                 |
| ------------------------ | -------------------------------------------- |
| IBAN                     | SN08SN0100152000048500003035 (28 characters) |

Senegal is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Serbia (RS)

| Bank account information | Example data                           |
| ------------------------ | -------------------------------------- |
| SWIFT / BIC Code         | BKCHRSBG (8 - 11 characters)           |
| Account number           | RS35260005601001611379 (22 characters) |

Serbia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Singapore (SG)

| Bank account information | Example data                          |
| ------------------------ | ------------------------------------- |
| Bank code                | 1234                                  |
| Branch code              | 567                                   |
| Account number           | 1234567890123456789 (6-19 characters) |

When using the API to create a bank account, combine the bank code and branch code with a hyphen to create a full routing number (for example, **1234-567**).

#### Slovakia (SK)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| IBAN                     | SK3112000000198742637541 (24 characters) |

#### Slovenia (SI)

| Bank account information | Example data                        |
| ------------------------ | ----------------------------------- |
| IBAN                     | SI56263300012039086 (19 characters) |

#### South Africa (ZA)

| Bank account information | Example data                 |
| ------------------------ | ---------------------------- |
| SWIFT / BIC Code         | FIRNZAJJ (8 - 11 characters) |
| Account number           | 2140000054 (up to 16 digits) |

South Africa is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### South Korea (KR)

| Bank account information | Example data                    |
| ------------------------ | ------------------------------- |
| SWIFT / BIC Code         | TESTKR00123 (8 - 11 characters) |
| Account number           | 012345678912 (11-15 characters) |

South Korea is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Spain (ES)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| IBAN                     | ES9121000418450200051332 (24 characters) |

#### Sri Lanka (LK)

| Bank account information | Example data                |
| ------------------------ | --------------------------- |
| Bank code                | AAAALKLXXXX (11 characters) |
| Branch code              | 7010999 (7 characters)      |
| Account Number           | 0000012345 (10-18 digits)   |

Sri Lanka is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Sweden (SE)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| IBAN                     | SE3550000000054910000003 (24 characters) |

#### Switzerland (CH)

| Bank account information | Example data                          |
| ------------------------ | ------------------------------------- |
| IBAN                     | CH9300762011623852957 (21 characters) |

#### Taiwan (TW)

| Bank account information | Example data                  |
| ------------------------ | ----------------------------- |
| SWIFT / BIC Code         | AAAATWTXXXX (8-11 characters) |
| Account number           | 0001234567 (10-14 digits)     |

Taiwan is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Tanzania (TZ)

| Bank account information | Example data                     |
| ------------------------ | -------------------------------- |
| SWIFT / BIC Code         | AAAATZTXXXX (8-11 characters)    |
| Account Number           | 0000123456789 (10-14 characters) |

Tanzania is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Thailand (TH)

| Bank account information | Example data                        |
| ------------------------ | ----------------------------------- |
| Bank name                | Bangkok Bank Public Company Limited |
| Bank code                | 002 (3 characters)                  |
| Account number           | 12345678901236 (6-15 characters)    |

#### Trinidad & Tobago (TT)

| Bank account information | Example data                            |
| ------------------------ | --------------------------------------- |
| Bank code                | 999 (3 characters)                      |
| Branch code              | 00001 (5 characters)                    |
| Account number           | 00001234123456788 (up to 17 characters) |

When using the API to create a bank account, combine the bank code and branch code to create a full routing number (for example, **99900001**).

Trinidad & Tobago is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Tunisia (TN)

| Bank account information | Example data                             |
| ------------------------ | ---------------------------------------- |
| IBAN                     | TN5904018104004942712345 (24 characters) |

Tunisia is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Türkiye (TR)

| Bank account information | Example data                               |
| ------------------------ | ------------------------------------------ |
| SWIFT / BIC Code         | ADABTRIS (8-11 characters)                 |
| IBAN                     | TR330006100519786457841326 (26 characters) |

Türkiye is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### United Kingdom (GB)

| Bank account information | Example data |
| ------------------------ | ------------ |
| Sort Code                | 12-34-56     |
| Account number           | 01234567     |

The information required for UK-based bank accounts depends on the currency being used and the country of your Stripe account.

#### United States (US)

| Bank account information | Example data             |
| ------------------------ | ------------------------ |
| Routing Number           | 111000000 (9 characters) |
| Account number           | Format varies by bank    |

#### United Arab Emirates (AE)

| Bank account information | Example data                        |
| ------------------------ | ----------------------------------- |
| IBAN                     | AE070331234567890123456 (23 digits) |

United Arab Emirates is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Uruguay (UY)

| Bank account information | Example data                   |
| ------------------------ | ------------------------------ |
| Bank code                | 091 (3 digits)                 |
| Account number           | 000123456788 (Up to 12 digits) |

Uruguay is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Uzbekistan (UZ)

| Bank account information | Example data                       |
| ------------------------ | ---------------------------------- |
| Bank Code                | AAAAUZUZXXX (11 digits)            |
| Branch Code              | 00000 (5 digits)                   |
| Account Number           | 99934500012345670024 (5-20 digits) |

Uzbekistan is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

#### Vietnam (VN)

| Bank account information | Example data               |
| ------------------------ | -------------------------- |
| Bank code                | 01101100 (8 digits)        |
| Account number           | 000123456789 (1-17 digits) |

Vietnam is only available for [Cross-border payouts](https://docs.stripe.com/connect/cross-border-payouts.md) accounts.

To attach debit cards to connected accounts, your custom form must collect the information used to  [create a card](https://docs.stripe.com/api/external_account_cards/create.md) .

## Manage bank accounts and debit cards

Connected accounts have an [external_accounts](https://docs.stripe.com/api/accounts/object.md#account_object-external_accounts) property, which includes their external bank accounts and debit cards. Any external account is a possible destination for funds.

A platform can view the external accounts of connected accounts that don’t have access to the full Stripe Dashboard or that have [platform controls enabled](https://docs.stripe.com/connect/platform-controls-for-stripe-dashboard-accounts.md). A platform can create, update, or delete external accounts only for connected accounts without access to either the full Stripe or Express Dashboard and where the platform is responsible for negative balances.

```json
{
  ...
  "external_accounts": {
    "object": "list",
    "has_more": false,
    "url": "/v1/accounts/acct_14qyt6Alijdnw0EA/external_accounts",
    "data": [
      {
        "id": ""{{BANK_ACCOUNT_ID}}"",
        "object": "bank_account",
        "account": "acct_14qyt6Alijdnw0EA",
        "account_holder_name": "Jane Austen",
        "account_holder_type": "individual",
        "bank_name": "STRIPE TEST BANK",
        "country": "US",
        "currency": "usd",
        "default_for_currency": false,
        "fingerprint": "sSZ2yLp0EZTH17cF",
        "last4": "6789",
        "metadata": {
        },
        "routing_number": "110000000",
        "status": "new"
      },
      {...},
      {...},
    ],
  ...
}
```

Add external accounts by specifying the [external_account](https://docs.stripe.com/api/accounts/create.md?api-version=preview#create_account-external_account) parameter when creating or updating connected accounts. The value can be a bank account or debit *card token* (A card token replaces the cardholder's primary account number (PAN) with a series of randomly-generated numbers. It's purpose is to protect sensitive customer data) returned from [Stripe.js](https://docs.stripe.com/js/tokens/create_token?type=bank_account). Alternatively, you can provide a hash of the bank account details. We recommend using Stripe.js, because it prevents sensitive data from hitting your server.

When using debit cards as a payout destination, the following restrictions apply:

#### Canada (CA)

- Must be a non-prepaid Visa or Mastercard issued by a bank in Canada.
- Limited to 9,999 CAD per payout.
- Only the [instant](https://docs.stripe.com/connect/instant-payouts.md) method is supported.

#### Singapore (SG)

- Must be a non-prepaid Visa or Mastercard issued by a bank in Singapore.
- Limited to 9,999 SGD per payout.
- Only the [instant](https://docs.stripe.com/connect/instant-payouts.md) method is supported.

#### United States (US)

- Must be a non-prepaid Visa, Mastercard, or Discover card issued by a bank in the United States.
- Limited to 9,999 USD per payout.

#### Other countries

- Debit cards aren’t supported as a payout destination.

Stripe can’t perform a negative payout against a debit card to correct a negative Stripe account balance.

## Managing multiple bank and debit accounts

By default, updating a connected account’s `external_account` value replaces the existing data. To add external bank accounts or debit cards to a connected account, use the [create bank account](https://docs.stripe.com/api.md#account_create_bank_account) or [create card](https://docs.stripe.com/api.md#account_create_card) API endpoints.



```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/external_accounts \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "external_account={{BANKACCOUNTTOKEN_ID}}"
```

When working with [multiple currencies](https://docs.stripe.com/connect/currencies.md), Stripe automatically sends payouts to a bank account or debit card using the associated currency to avoid exchange fees. When multiple accounts are available for a given currency, Stripe uses the one set as `default_for_currency`.

To ensure that a connected account always has a default external account, you can’t delete the default external account for a currency if any of the following apply:

- The external account’s `currency` code is the same as the [account.default_currency](https://docs.stripe.com/api/accounts/object.md#account_object-default_currency).

- The connected account has another external card or bank account that uses the same currency.

To delete an external account in those cases, you must first make another external account the default for that currency.

If an account were to have no default external account, the platform couldn’t pay out funds or recover disputed funds.

## Allow connected accounts to update their external account

When a connected account tries to update their external account (bank account or debit card), they typically must provide details about the existing external account or verify their identity. However, some accounts, particularly non-profits and accounts on certain compliance plans, might not be able to do so. For example, the existing external account might belong to a previous account owner, or Stripe might not have collected certain identity information (such as date of birth) during onboarding.

If your platform is responsible for negative balances, you can generate a unique code that allows a connected account to update their external account without verifying their identity. This feature is only available in live mode.

You can generate an external account update code only when your platform is responsible for negative balances, which excludes accounts that have access to the full Stripe Dashboard. If your platform isn’t responsible for negative balances, then a connected account that wants to update their external account must complete standard verification or contact Stripe Support.

### How it works

Normally, when a connected account tries to update their external account in the Express Dashboard, Stripe prompts them to either enter their existing external account information or verify their identity. However, if you generate an external account update code for a connected account, Stripe instead prompts them to enter the code.

The code is valid for 7 days. If it expires before the connected account updates their external account, you can generate another one.

### Generate an external account update code

When you generate an update code for a connected account, your platform accepts sole legal and financial liability for any errors that result from incorrect external account changes. Before generating a code, verify the identity of the person requesting the change. Document the change request, including any supporting information.

To generate the code, follow these steps:

1. In your platform Dashboard, navigate to [the Connected accounts page](https://dashboard.stripe.com/connect/accounts).
1. Select the connected account that needs to update their external account.
1. Confirm that the account owner information is correct and matches the information in the change request.
1. In the **Payout information** section, open the overflow menu (⋯) next to the external account, and then click **Generate update code**.
1. Confirm the account owner’s information and accept liability.
1. Click **Send** to email the update code to the connected account owner.
