# Manage bank accounts with Tokenized Account Numbers

Learn about tokenized account numbers, their impact on your integration, and how to manage TAN accounts.

Tokenized Account Numbers (TANs) are temporary bank account credentials issued by financial institutions instead of real account numbers. Chase, PNC Bank, and US Bank issue TANs.

## Before you begin

1. Understand Financial Connections [fundamentals](https://docs.stripe.com/financial-connections/fundamentals.md)
2. Read about Financial Connections Account [webhook events](https://docs.stripe.com/financial-connections/webhooks.md) to understand how to receive updates about changes to Financial Connections Accounts.

## How TANs work

TANs behave similarly to real account and routing numbers. You can use them to accept ACH payments and send payouts while they’re available for transfers. A TAN’s availability can change after issuance, causing subsequent ACH transactions that use the [Financial Connections Account](https://docs.stripe.com/financial-connections/fundamentals.md#financial-connections-account) to fail.

> TAN behavior varies by financial institution. Some banks support customer revocation and expiration, while others don’t. To view specific behavior by institution, see [TAN details by bank](https://docs.stripe.com/financial-connections/tokenized-account-numbers.md#tan-details-by-bank).

### Compare real account numbers with TANs

These are the differences between real account numbers and TANs:

|  | Real account numbers | Tokenized account numbers |
| --- | --- | --- |
| **Stability over time** | Return the same account and routing numbers every time the account is linked. | Return a new tokenized account and routing number each time the account is authorized with the institution. |
| **Expiry** | Don’t expire | Might expire at the discretion of the issuing institution (varies by bank) |
| **Revocable** | Customer can’t revoke | Customer might be able to revoke (varies by bank) |
| **Recognizable to customers** | Yes | No |

### TAN availability

Issuing banks determine when TANs are available for transfers. Check a TAN’s status before using it for money movement. To avoid payment failures, you can [handle deactivated or expired TANs](https://docs.stripe.com/financial-connections/tokenized-account-numbers.md#handle-deactivated-or-expired-tans).

Common scenarios include:

- **Pending activation**: The TAN is present but isn’t yet available for transfers.
- **Revocation**: A customer revokes access to their account data using their financial institution’s online banking portal, such as the Chase Security Center. This option is available at some institutions.
- **Expiry**: The TAN expires after an amount of time set by the institution. Not all banks implement time-based expiration.

If a TAN is deactivated or expired, your customer must [link their bank account again](https://docs.stripe.com/financial-connections/relink.md) or link a different bank account before they can continue making payments or receiving payouts.

To learn which institutions support revocation and expiration, see [TAN details by bank](https://docs.stripe.com/financial-connections/tokenized-account-numbers.md#tan-details-by-bank).

## How to manage TANs

### Display real account details to your customer in your UI

If you display account identifiers to help customers recognize and select a bank account in your application, display the [last4](https://docs.stripe.com/api/financial_connections/accounts/object.md#financial_connections_account_object-last4) field from the [Financial Connections Account](https://docs.stripe.com/api/financial_connections/accounts/object.md) object. This field shows the last four digits of the real account number, regardless of whether the institution uses TANs or real account numbers.

### Identify Financial Connections Accounts with TANs and their status

Use the [Financial Connections API](https://docs.stripe.com/api/financial_connections/accounts.md) to determine whether a bank account has a TAN or a real account number, and whether that TAN can be used for ACH transactions.

To determine if a [Financial Connections Account](https://docs.stripe.com/api/financial_connections/accounts.md) has a TAN, reference the [identifier_type](https://docs.stripe.com/api/financial_connections/accounts/object.md#financial_connections_account_object-account_numbers-identifier_type) field on the objects in the [account_numbers](https://docs.stripe.com/api/financial_connections/accounts/object.md#financial_connections_account_object-account_numbers) array,  which is set to `tokenized_account_number` if the account number is a TAN. The `identifier_type` of a real account number is set to `account_number`.

```curl
curl https://api.stripe.com/v1/financial_connections/accounts/{{FINANCIALCONNECTIONSACCOUNT_ID}} \
  -u "<<YOUR_SECRET_KEY>>:"
```

This example request returns a Financial Connections Account with information about a TAN.

```json
{
  "id": "fca_zbyrdjTrwcYZJZc6WBs6GPid",
  "object": "financial_connections.account",
  "account_holder": {
    "customer": "cus_NfjonN9919dELB",
    "type": "customer"
  },
  "institution_name": "PNC Bank",
  "status": "active",
  "account_numbers": [
    {
        "identifier_type": "tokenized_account_number",
        "expected_expiry_date": null,
        "status": "transactable",
        "supported_networks" : ["ach"]
    }
  ]
}
```

In the response, check each account number’s [`status`](https://docs.stripe.com/api/financial_connections/accounts/object.md?api-version=2026-09-30.endive#financial_connections_account_object-account_numbers-status) before using it for transfers. API version `2026-09-30.endive` and later support the following values.

| Status | Description |
| --- | --- |
| `pending` | The tokenized account number is present but isn’t yet available for transfers. |
| `transactable` | The tokenized account number is available for money movement, including ACH payments and payouts. |
| `deactivated` | The tokenized account number isn’t available for transfers. The customer may have revoked it. |
| `expired` | The tokenized account number has expired and isn’t available for transfers. |

Listen for [`financial_connections.account.account_numbers_updated`](https://docs.stripe.com/api/events/types.md#event_types-financial_connections.account.account_numbers_updated) to detect changes to an existing account number. Stripe sends this event when the account number’s `status` or `expected_expiry_date` changes. For example, Stripe sends it when a `pending` account number becomes `transactable`, when an account number expires, or when relinking changes its expected expiry date.

> During rollout, a pending TAN can appear as `transactable`, and an expired TAN can appear as `deactivated`. For off-Stripe ACH transfers using US Bank or PNC TANs, wait 90 minutes after issuance before submitting the transfer. Stripe handles activation delays for ACH payments processed on Stripe.

A Financial Connections Account can have an active `status` when its TAN is deactivated or expired because the account can still support bank-data refreshes.

> PNC Bank expired some accounts between August 18 and September 9, 2025 before instituting a pause to 1-year rolling expirations. Time-based expiration might resume as banks evolve their TAN policies.

Banks might add time-based expiration rules to TANs. If TANs are set to expire by a bank, you can:

1. Reference the `expected_expiry_date` field. It displays the date of expiration.
2. Listen for the `financial_connections.account.upcoming_account_number_expiry` webhook event, which Stripe sends 30 days before the TAN is set to expire.

## Handle deactivated or expired TANs

This guide describes how to manage deactivated or expired TANs used for ACH Direct Debit payments or external bank accounts for payouts.

> If you haven’t already, you need to set up a webhook endpoint (use the [Webhooks](https://dashboard.stripe.com/webhooks) page in the Dashboard or follow the [webhook guide](https://docs.stripe.com/webhooks/quickstart.md)) to listen to the applicable [events](https://docs.stripe.com/financial-connections/webhooks.md) for your integration.

### ACH Direct Debit payments

ACH Direct Debit [PaymentMethods](https://docs.stripe.com/api/payment_methods.md) become unusable when the associated TAN is deactivated or expires. Handle these changes in your ACH Direct Debit integration to avoid payment failures.

When an associated TAN becomes deactivated or expired, Stripe sends a [payment_method.automatically_updated](https://docs.stripe.com/api/events/types.md#event_types-payment_method.automatically_updated) event.

To identify affected PaymentMethods in your webhook handler, check whether `payment_method.us_bank_account.status_details.blocked.reason` is set to `tokenized_account_number_deactivated`.

Stripe can return a `bank_account_unusable` error when you confirm an ACH Direct Debit payment with a deactivated or expired TAN. If the customer is present, collect a different payment method. Stripe blocks the payment before submitting it to the ACH network, so it fails at confirmation instead of through an ACH return 2–3 days later. This helps you avoid failed-payment fees.

> #### Avoid processing unusable TANs
> 
> ACH payments processed off Stripe with a deactivated or expired TAN also fail, but your processor might not reject the payment at submission. Avoid submitting payments with unusable TANs to prevent downstream failures.

Ask your customer to relink the bank account or link a different one, then create a PaymentMethod.

### External bank accounts

[External Bank Accounts](https://docs.stripe.com/api/external_account_bank_accounts/object.md) linked through Financial Connections become unusable when the associated TAN is deactivated or expires. Handle these changes in your payouts integration to avoid payout failures.

When an associated TAN becomes deactivated or expired, Stripe sends an [account.external_account.updated](https://docs.stripe.com/api/events/types.md#event_types-account.external_account.updated) event.

To identify affected External Bank Accounts in your webhook handler, check whether the External Bank Account’s `status` is set to `tokenized_account_number_deactivated`.

Ask your customer to relink the bank account or link a different one, then create an External Bank Account.

## TAN details by bank

The following institutions return TANs when your customers link accounts through Financial Connections:

| Institution name | Details | Effective date |
| --- | --- | --- |
| Chase | Customers can revoke access to a TAN through the Chase Security Center.

When customers connect or reconnect a Chase account, they must choose a consent period of **6 months**, **1 year**, or **always**. If they choose 6 months or 1 year, Chase deactivates the TAN when the consent period ends. | Phased rollout from August 21 through November 2, 2026.

Connections created before August 21, 2026, aren’t subject to time-limited consent unless the customer reconnects the account after August 21, 2026. |
| PNC Bank | Customers can revoke access to a TAN through PNC Online Banking.

PNC temporarily applied time-based expiration to TANs issued after August 18, 2024, and before September 9, 2024. PNC might apply time-based expiration again. | Accounts linked after August 18, 2024. |
| US Bank | US Bank TANs don’t expire, and customers can’t revoke them. | TANs were rolled out to some accounts from November 30, 2025, through April 30, 2026. Applies to all accounts linked after April 30, 2026. |

> #### Delayed activation of tokenized account numbers
> 
> US Bank and PNC tokenized account numbers take up to 45 minutes to activate after they’re issued, and banks might reject payments submitted immediately. If you process ACH payments with Stripe, we handle the delayed activation automatically. If you process ACH payments off of Stripe, wait 90 minutes after issuance before submitting ACH transfers.

## See also

- [Test TAN behavior](https://docs.stripe.com/financial-connections/testing.md#simulating-tokenized-account-number-behavior)
