Relink Financial Connections accounts used for payments or payouts.Public preview
Reactivate inactive accounts to retrieve data, reactivate tokenized account numbers, and update data permissions.
Your customers might need to reauthorize a previously linked Financial Connections account for multiple reasons, such as reactivating an account to restore data access or refreshing deactivated tokenized account numbers.
When using Financial Connections accounts to verify bank account details for payments or payouts, configure a relink session to collect a single eligible account. You can:
- Relink a specific Financial Connections account
- Relink any eligible Financial Connections account at the same institution
Understand when an account becomes inactiveServer-side
Your customer’s linked Financial Connections Accounts might become inactive for several reasons, including:
- The OAuth token provided to Stripe by their financial institution expires after a set period of time or because of inactivity.
- The financial institution changes their authentication requirements, such as requiring multi-factor authentication (MFA), or the customer changes their username and password.
- The customer revokes access through their online banking portal.
- The customer closes their account at their financial institution.
We notify you when a Financial Connections Account becomes inactive with the financial_ webhook. Inactive Financial Connections Accounts include additional status metadata in the status_ subhash.
You can’t repair every underlying cause for an inactive account. For example, you can’t repair a closed account unless your customer reopens it. Accounts that you can’t repair have a status_ of none.
You can retrieve a Financial Connections Account at any time to check its status.
- The
status_property includes a high-level reason why a Financial Connections Account is inactive. For example, when an account’s OAuth connection expires, its status isdetails. inactive. cause access_.expired - The
status_property includes the action to take, if any, to reactivate the account. If your customer can reactivate the account by completing a relink authentication flow, its status isdetails. inactive. action relink_.required
When status_ is relink_, prompt your customer to complete the authentication flow to reactivate the account.
For example, you might create a webhook handler like the one below to process webhook events:
The status and status_ of an account are also available when you retrieve a Financial Connections Account.
{ "id":, "object": "financial_connections.account", //..., "authorization":"{{ACCOUNT_ID}}", "status": "inactive", "status_details": { "inactive": { "action": "relink_required", "cause": "access_expired" } } }"{{AUTHORIZATION_ID}}"
Relink a specific Financial Connections accountServer-sideClient-side
Create a relink session that specifies relink_ and relink_ that requires your customer to pick the Financial Connections account identified by relink_ in the authentication flow. The session succeeds with a linked account only if your customer relinks that exact account. Resources created using the existing Financial Connections account automatically update with the relinked account details, including new tokenized account numbers. If your integration doesn’t require the same account, you can allow your customer to link a new account at the same institution.
Create a Financial Connections session and specify the following:
Set
account_to the same value of the Financial Connections account’sholder account_field. If you have a two-step confirmation flow or collect payment details before creating an Intent, the Financial Connections account won’t have anholder account_. In this case, setholder account_toholder nullwhen creating the session.Set the data
permissionsparameter to includepayment_, and any data you want to retrieve on the account. Themethod permissionsparameter is an array containing values, which might include any ofpayment_,method balances,ownership, ortransactions. To protect the privacy of your user’s data, you can only access the data you specified in thepermissionsparameter. Carefully consider the data required to fulfill your use case, and request permission to access only the data you require. When completing the authentication flow, your user sees the data you specified from thepermissionsparameter, and provides their consent to share this data. The following code example demonstrates how to collectbalancesandpayment_.method Set the
relink_parameter to the same value as the Financial Connections account’soptions. authorization authorizationID.Set the
relink_parameter to the Financial Connections account’s ID.options. account This request returns a response similar to the following:
{ "id": "fcsess_abcd", "object": "financial_connections.session", "livemode": true, "account_holder": { "customer": "cus_NfjonN9919dELB", "type": "customer" }, "accounts": [], "client_secret": "fcsess_client_secret_UsESkKYzeiRcivgDJZfxZRFh", "filters": { "account_subcategories": ["checking", "savings"] }, "limits": { "accounts": 1 }, "permissions": ["payment_method", "balances"], "relink_options": { "authorization": "{{AUTHORIZATION_ID}}", "account": "{{ACCOUNT_ID}}" } }Use the returned
client_with client-side Stripe SDKs to allow your user to relink their account. Asecret client_allows client-side Stripe SDKs to make changes to the Financial Connections session. Don’t store it, log it, embed it in URLs, or expose it to anyone other than your end user. Make sure that you have TLS enabled on any page that includes the client secret.secret In Stripe.js, use collectFinancialConnectionsAccounts to collect an account. The return value of
collectFinancialConnectionsAccountsis a Promise. When the user completes the authentication flow, the Promise resolves with an object that contains arelink_sub-object. If successful, it also contains the list of relinked accounts.result const {financialConnectionsSession, error} = await stripe.collectFinancialConnectionsAccounts({ clientSecret: "fcsess_client_secret_UsESkKYzeiRcivgDJZfxZRFh" }); if (financialConnectionsSession) { if (financialConnectionsSession.relink_result.account) { // relink successful const relinkedAccount = financialConnectionsSession.accounts[0]; } else { switch (financialConnectionsSession.relink_result.failure_reason) { case 'no_account': // user successfully authenticated with their bank, but did not link the expected account break; case 'no_authorization': // user did not successfully authenticate with their bank break; case 'other': // unexpected failure break; } } }
Your customer might authenticate with their financial institution successfully, but see an error in the Financial Connections authentication flow. In this case, relink_ isn’t set because we can’t match the selected account to the account given in relink_. When this happens, we suggest either:
- Asking your customer to set up a new payment method or external bank account.
- Asking your customer to try again using a Financial Connections session that allows any eligible account at the same institution.
OptionalRelink any eligible Financial Connections account at the same institutionServer-sideClient-side
The relink_ parameter used in the previous section requires the customer to link a specific Financial Connections account. If the customer links a different account, they see an error message in the authentication flow.
You can instead create a relink session using only relink_. This asks your customer to authenticate at the same institution as the authorization, without requiring them to select a particular account. Use filters. to specify that your customer can only select checking or savings accounts, and use limits. to limit them to select a single account.
If your customer selects an existing Financial Connections account, its status, permissions, and account_ are updated. Resources created using the existing Financial Connections account automatically update with the relinked account details, including new tokenized account numbers. If your customer links a new account, you can use it to create a payment method. Existing payment methods are not updated automatically when a new account is selected in the relink authentication flow.
To allow your customer to link one payments- or payouts-eligible Financial Connections account at the same institution as their inactive account:
Create a Financial Connections session with
relink_set to the Financial Connections authorization ID you want to repair,options. authorization limits.set toaccounts 1andfilters.set toaccount_ subcategories ["checking", "savings"]Use the returned
client_with client-side Stripe SDKs to allow your user to relink their account. Asecret client_allows client-side Stripe SDKs to make changes to the Financial Connections session. Don’t store it, log it, embed it in URLs, or expose it to anyone other than your end user. Make sure that you have TLS enabled on any page that includes the client secret.secret In Stripe.js, use collectFinancialConnectionsAccounts to collect an account. The return value of
collectFinancialConnectionsAccountsis a Promise. When the user completes the authentication flow, the Promise resolves with an object that contains arelink_sub-object. If successful, it also contains the list of relinked accounts.result Pass a list of linked accounts to the client-side to determine whether the customer linked a new account in the relink authentication flow.
// Fetch existing accounts, or embed them in the server-rendered HTML const existingAccountIds = await fetchExistingAccounts(); const {financialConnectionsSession, error} = await stripe.collectFinancialConnectionsAccounts({ clientSecret: "fcsess_client_secret_UsESkKYzeiRcivgDJZfxZRFh" }); const linkedAccount = financialConnectionsSession?.accounts?.[0] if (linkedAccount) { const isNew = existingAccountIds.includes(linkedAccount.id); } else { // user linked no accounts }
We recommend allowing a customer to link a new account to handle the following edge cases when passing relink_:
- Stripe sometimes doesn’t recognize any of the accounts available after the customer authenticates with their financial institution. When this happens and
relink_is set, the authentication flow shows an error message. When onlyoptions. account relink_is set, the customer can choose from the available accounts and proceed with the account linking flow.options. authorization - In OAuth flows, the customer can select a different account than the one initially linked in their financial institution’s OAuth modal.
OptionalCreate a payment methodServer-sideClient-side
Relink sessions that don’t specify relink_ might create new Financial Connections accounts. When this happens, payment methods created from existing Financial Connections accounts won’t be updated.
OptionalRetrieve a Financial Connections authorization
Financial Connections accounts have an authorization property that corresponds to a Financial Connections authorization resource. The authorization resource describes the overall status of the data connection for all accounts on the authorization. When several accounts reference the same authorization, relinking one account might reactivate other accounts on the same authorization. This is expected, and only affects your integration if you:
- Have a webhook endpoint that listens to
financial_events.connections. account. reactivated - Have business logic that assumes a relink session which requires the user to select a single account will reactivate exactly one account.
Retrieve an authorization to see its status:
{ "id":, "object": "financial_connections.authorization", "account_holder": { "customer": "cus_TnvzdXv6VwjyrN", "type": "customer" }, "institution": "fcinst_Qn1a6jqpI0Gb84", "institution_name": "StripeBank", "livemode": false, "status": "active", "status_details": {} }"{{AUTHORIZATION_ID}}"
Testing
Follow the testing guide to learn how to connect a test bank account through Financial Connections. To test with a deactivated account, search for the Inactive accounts institution in the authentication flow, and connect any of the provided bank accounts. To test tokenized account number refresh behavior, search for the Tokenized Account Numbers institution in the authentication flow, and connect any of the provided bank accounts.