# Manage inactive Financial Connections accounts Learn why Financial Connections accounts become inactive and how to manage them. Your customer’s linked Financial Connections accounts might become inactive for several reasons, including: - The [OAuth](https://docs.stripe.com/financial-connections/fundamentals.md#how-stripe-links-financial-accounts) 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. ## Behavior by bank The institutions in the following table require customers to reauthenticate. | Institution name | Accounts affected | Details | | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | Bank of America | All accounts | The customer’s authentication expires after 1 year. | | Bank of America | Accounts linked before July 1st, 2025 will be affected on August 1st, 2026. Accounts linked between then and April 17th, 2026 will be affected on a rolling basis. All accounts linked after April 17th, 2026 will be unaffected. | Bank of America is migrating all accounts to a new API version, and connections for accounts on the previous version will break. | ## Understand when an account becomes inactive We notify you when a Financial Connections account becomes inactive with the `financial_connections.account.deactivated` [webhook](https://docs.stripe.com/financial-connections/webhooks.md). Inactive Financial Connections accounts include additional status metadata in the `status_details.inactive` 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_details.inactive.action` of `none`. You can [retrieve a Financial Connections account](https://docs.stripe.com/api/financial_connections/accounts/retrieve.md) at any time to check its status. - The [`status_details.inactive.cause` property](https://docs.stripe.com/api/financial_connections/accounts/object.md?api-version=preview#financial_connections_account_object-status_details-inactive-cause) includes a high-level reason why a Financial Connections account is inactive. For example, when an account’s OAuth connection expires, its status is `access_expired`. - The [`status_details.inactive.action` property](https://docs.stripe.com/api/financial_connections/accounts/object.md?api-version=preview#financial_connections_account_object-status_details-inactive-action) 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 is `relink_required`. When `status_details.inactive.action` is `relink_required`, 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: #### Python ```python import stripe import requests as r from requests.auth import HTTPBasicAuth # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. client = stripe.StripeClient('<>', stripe_version='2026-05-27.preview') # If you're testing your webhook locally with the Stripe CLI you # can find the endpoint's secret by running `stripe listen` # Otherwise, find your endpoint's secret in your webhook settings in # the Developer Dashboard endpoint_secret = 'whsec_...' @app.route('/webhook', methods=['POST']) def webhook(): event = None payload = request.data sig_header = request.headers["STRIPE_SIGNATURE"] try: event = client.construct_event(payload, sig_header, endpoint_secret) except ValueError as e: # Invalid payload raise e except stripe.error.SignatureVerificationError as e: # Invalid signature raise e if event["type"] == "financial_connections.account.deactivated": account = event["data"]["object"] if account["status"] == "inactive": if "status_details" in account: if account["status_details"]["inactive"]["action"] == "relink_required": prompt_user_to_relink(account) else: # if the account doesn't have `status_details`, # check that the event destination is configured # with the most recent public preview API version else: # No action to be taken. return jsonify(success=True) ``` The `status` and `status_details` of an account are also available when you retrieve a Financial Connections account. ```curl curl https://api.stripe.com/v1/financial_connections/accounts/{{FINANCIALCONNECTIONSACCOUNT_ID}} \ -u "<>:" \ -H "Stripe-Version: 2026-05-27.preview" ``` ```json { "id": "{{ACCOUNT_ID}}", "object": "financial_connections.account", //..., "authorization": "{{AUTHORIZATION_ID}}", "status": "inactive", "status_details": { "inactive": { "action": "relink_required", "cause": "access_expired" } } } ``` ## Understand when an account will become inactive in the future In some cases, such as when the [OAuth](https://docs.stripe.com/financial-connections/fundamentals.md#how-stripe-links-financial-accounts) token provided to Stripe by their financial institution expires after a set period of time, the API will provide information about when the account is expected to become `inactive`. To determine whether an account falls into this category, [retrieve the Account](https://docs.stripe.com/api/financial_connections/accounts/retrieve.md) and check the additional metadata in the `status_details.active` subhash. If the subhash is empty, we don’t have information about future deactivation for this account. - The `status_details.active.expected_deactivation_date` property includes the estimated date at which this account will become inactive. - The [`status_details.active.cause` property](https://docs.stripe.com/api/financial_connections/accounts/object.md?api-version=preview#financial_connections_account_object-status_details-active-cause) includes a high-level reason why we expect the Financial Connections account to become `inactive`. For example, when an account’s OAuth connection expires after a set period of time, its status would be `access_expired`. - The [`status_details.active.action` property](https://docs.stripe.com/api/financial_connections/accounts/object.md?api-version=preview#financial_connections_account_object-status_details-active-action) includes the action to take, if any, to prevent the account from becoming `inactive`. We set this property to `relink_required` when we expect completing the relink authentication flow to meaningfully change the `expected_deactivation_date`. For example, we won’t recommend prompting your user to relink their account until 30 days before deactivation for time-based OAuth expiration. We notify you 30 days before a Financial Connections account is expected to deactivate with the `financial_connections.account.upcoming_deactivation` [webhook](https://docs.stripe.com/financial-connections/webhooks.md). When you receive this webhook, it is a good time to ask your customer to [relink](https://docs.stripe.com/financial-connections/relink.md) their account, or connect a new account, to avoid interruptions to data access. If your integration prompts users to repair any Financial Connections account at the same institution rather than a specific account, you can view the `status_details.active` subhash on the [Financial Connections Authorization](https://docs.stripe.com/api/financial_connections/authorizations.md?api-version=preview) and listen to the `financial_connections.authorization.upcoming_deactivation` [webhook](https://docs.stripe.com/financial-connections/webhooks.md) instead. ## Learn more - [Relink](https://docs.stripe.com/financial-connections/relink.md): Repair `inactive` accounts with the streamlined relink flow.