> ## Documentation Index
> Fetch the complete documentation index at: https://docs.overflow.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Bank best practices

> Recommendations for shipping a robust ACH bank integration.

## Default to fast-signin

Fast bank sign-in has higher completion rates than manual entry. Set it as the default and let shoppers who need it fall back to manual:

```javascript theme={null}
overflow.bank({
  mode: { default: 'plaid' },
});
```

Only lock to `'manual'` when your integration or shopper base explicitly needs it.

## Retry on `UNKNOWN_KID`

Manual-mode bank submissions encrypt account credentials with a rotating key. If your authorize endpoint returns `400 { code: 'UNKNOWN_KID' }`, refresh the cached key and prompt the shopper to submit again:

```javascript theme={null}
if (result.code === 'UNKNOWN_KID') {
  overflow.invalidateBankFieldEncryptionCache();
  showBanner('Please try again.');
}
```

Checkout wires this recovery in automatically. Only wire it yourself for standalone `bank` integrations.

## Do not rely on `disabled` to fully suppress bank

Setting `disabled: true` on a mounted bank element locks the manual-mode inputs and the mode toggle, but the fast-signin surface owns its own iframe and is not fully suppressed by `disabled`. To completely take bank offline (for example, while another payment method is processing), call `bank.unmount()` and remount when you are ready to accept it again.

## Gate your Pay button on `complete`

Bank validation completes when the shopper finishes fast-signin or when every manual field passes format checks and the two account-number entries match.

```javascript theme={null}
bank.on('onChange', ({ complete }) => {
  payButton.disabled = !complete;
});
```

## Show a clear label

Bank payments have longer capture windows than cards. Label your Pay button so shoppers know what happens next (`Pay by bank`, `Authorize ACH`, etc.).

## Test with `test_pub_…`

Use a `test_pub_…` publishable key while you build. Test fast-signin behavior in a sandbox institution. Swap to `live_pub_…` for production.

## Next steps

* [Bank reference](/payment-elements/elements/payment-methods/bank/reference)
* [Handle validation errors](/payment-elements/guides/handle-validation-errors)
