Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

5282 articles

External Bank Accounts


External Bank Accounts

External bank accounts are financial accounts associated with a Stripe platform’s connected accounts for the purpose of transferring funds to or from the connected account’s Stripe balance.

Was this section helpful? Yes No

Create a bank account

POST / v1 / accounts /:id / external_accounts

Update a bank account

POST / v1 / accounts /:id / external_accounts /:id

Retrieve a bank account

GET / v1 / accounts /:id / external_accounts /:id

List all bank accounts

GET / v1 / accounts /:id / external_accounts

Delete a bank account

DELETE / v1 / accounts /:id / external_accounts /:id

The External Bank Account object

Attributes

  • id string Unique identifier for the object.
  • account nullable string Expandable Available conditionally The account this bank account belongs to. Only applicable on Accounts (not customers or recipients) This property is only available when returned as an External Account where controller.is_controller is true.
  • bank _ name nullable string Name of the bank associated with the routing number (e.g., the related setting the related setting).
  • country string Two-letter ISO code representing the country the bank account is located in.
  • currency enum Three-letter ISO code for the currency paid out to the bank account.
  • default _ for _ currency nullable boolean Whether this bank account is the default external account for its currency.
  • last4 string The last four digits of the bank account number.
  • metadata nullable map Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
  • routing _ number nullable string The routing transit number for the bank account.
  • status string For bank accounts, possible values are new, validated, verified, verification_failed, tokenized_account_number_deactivated or errored. A bank account that hasn’t had any activity or validation performed is new. If Stripe can determine that the bank account exists, its status will be validated. Note that there often isn’t enough information to know (e.g., for smaller credit unions), and the validation is not always run. If customer bank account verification has succeeded, the bank account status will be verified. If the verification failed for any reason, such as microdeposit failure, the status will be verification_failed. If the status is tokenized_account_number_deactivated, the account utilizes a tokenized account number which has been deactivated due to expiration or revocation. This account will need to be reverified to continue using it for money movement. If a payout sent to this bank account fails, we’ll set the status to errored and will not continue to send scheduled payouts until the bank details are updated. For external accounts, possible values are new, errored, verification_failed, and tokenized_account_number_deactivated. If a payout fails, the status is set to errored and scheduled payouts are stopped until account details are updated. In the US and India, if we can’t verify the owner of the bank account, we’ll set the status to verification_failed. Other validations aren’t run against external accounts because they’re only used for payouts. This means the other statuses don’t apply.

More attributes

  • object string, value is "bank_account"
  • account _ holder _ name nullable string
  • account _ holder _ type nullable string
  • account _ type nullable string
  • available _ payout _ methods nullable array of enums
  • customer nullable string Expandable
  • fingerprint nullable string
  • future _ requirements nullable object
  • requirements nullable object

The External Bank Account object

{ "id": "ba_1N9DrD2eZvKYlo2C58f4DaIa", "object": "bank_account", "account": "acct_1032D82eZvKYlo2C", "account_holder_name": "Jane Austen", "account_holder_type": "individual", "account_type": null, "available_payout_methods": [ "standard" ], "bank_name": "STRIPE TEST BANK", "country": "US", "currency": "usd", "fingerprint": "1JWtPxqbdX5Gamtz", "last4": "6789", "metadata": {}, "routing_number": "110000000", "status": "new"}

Create a bank account

POST / v1 / accounts /:id / external_accounts

When you create a new bank account, you must specify a connected account to create it on. You can only specify connected accounts where account.controller.requirement_collection is application (includes Custom accounts).

If the bank account’s owner has no other external account in the bank account’s currency, the new bank account will become the default for that currency. However, if the owner already has a bank account for that currency, the new account will become the default only if the default_for_currency parameter is set to true.

Parameters

  • external _ account object | string Required Either a token, like the ones returned by Stripe.js, or a dictionary containing a user’s bank account details (with the options shown below).
  • metadata map Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to metadata.

More parameters

  • default _ for _ currency boolean

Returns

Returns the bank account object

Response

{ "id": "ba_1NAiJy2eZvKYlo2CvChQKz5k", "object": "bank_account", "account": "acct_1032D82eZvKYlo2C", "account_holder_name": "Jane Austen", "account_holder_type": "company", "account_type": null, "bank_name": "STRIPE TEST BANK", "country": "US", "currency": "usd", "fingerprint": "1JWtPxqbdX5Gamtc", "last4": "6789", "metadata": {}, "routing_number": "110000000", "status": "new"}
Last verified 2026-09-25

Is this helpful?