# 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. Before submitting an off-Stripe ACH transfer with a TAN, check its status. To prevent payment failures, [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 bank issued the TAN but hasn’t finished activating it for ACH transfers. This state is temporary. The TAN remains valid, and your customer doesn’t need to take action. See [Handle pending TANs](https://docs.stripe.com/financial-connections/tokenized-account-numbers.md#handle-pending-tans).
- **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.

See [TAN details by bank](https://docs.stripe.com/financial-connections/tokenized-account-numbers.md#tan-details-by-bank) for institutions that support revocation, expiration, and delayed activation.

## 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"]
    }
  ]
}
```

Before submitting an off-Stripe ACH transfer, check the [status](https://docs.stripe.com/api/financial_connections/accounts/object.md?api-version=2026-09-30.endive#financial_connections_account_object-account_numbers-status) of each account number in the response. In API version `2026-09-30.endive` and later, `status` supports the following values.

| Status | Description |
| --- | --- |
| `pending` | The tokenized account number is valid, but the bank hasn’t finished activating it for ACH transfers. This state is temporary. Stripe sends an event when the account number becomes `transactable`. |
| `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.

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 pending TANs

A `pending` status isn’t an error and doesn’t mean the bank account is unusable. You can continue the account setup flow by saving the account, creating a `PaymentMethod`, or setting up a mandate. The status requires action only when submitting a payment to the ACH network.

- **ACH payments processed on Stripe**: Stripe handles the activation delay automatically. You can confirm a payment with a pending TAN without waiting for it to become `transactable`.
- **ACH transfers processed off Stripe**: Wait until the account number becomes `transactable` before submitting the transfer. Listen for the [financial_connections.account.account_numbers_updated](https://docs.stripe.com/api/events/types.md#event_types-financial_connections.account.account_numbers_updated) event instead of polling or asking the customer to link their account again.

> #### Don't treat pending TANs as failures
> 
> Don’t reject an account or require a `transactable` status when the customer finishes linking it. Newly issued US Bank and PNC TANs often start as `pending`. Linking the account again issues another TAN that also starts as `pending`. For off-Stripe ACH transfers, wait for the `account_numbers_updated` event before submitting the transfer.

In API versions earlier than `2026-09-30.endive`, account numbers don’t include the `pending` or `expired` statuses. A pending TAN appears as `transactable`, and an expired TAN appears as `deactivated`. Before submitting an off-Stripe ACH transfer using a US Bank or PNC TAN, wait 90 minutes after issuance for the TAN to activate.

## 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.

A new TAN can take up to 45 minutes to activate after issuance. | Accounts linked after August 18, 2024. |
| US Bank | US Bank TANs don’t expire, and customers can’t revoke them.

A new TAN can take up to 45 minutes to activate after issuance. | TANs were rolled out to some accounts from November 30, 2025, through April 30, 2026. Applies to all accounts linked after April 30, 2026. |

## See also

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