In some situations the amount of an outgoing transfer can exceed the balance of the underlying bank account. In these cases, we'll stop an ACH, wire, check, or book transfer from going through by default, and send an insufficient funds error to the request.

However, you can enable an account to allow overdrafts if you don't want the transfer to fail. After the feature is enabled, the account balance can go negative until the account is replenished. 'Note: you will be responsible for funding the overdraft amount with your overdraft reserve account.'

There are three steps to enable the overdraft feature:

  1. Create an overdraft reserve account: When a root entity is created, an overdraft reserve account will be created under it by default. You can add funds into this reserve account to cover all of the overdrafted amounts in your customers' accounts.
  2. Link a customer's account to the overdraft reserve account: The account on which the overdraft transaction happens should have is_overdraftable value set to true and link to the overdraft reserve account by setting overdraft_reserve_account_id. You can do so with create a new bank account or update a bank account.
  3. Set allow_overdraft to true in the transfer request: the value is set to false by default to prevent overdrafts by accident. This is supported in all types of transfers (see create an ACH transfer, create a book transfer, create a wire transfer)

Here are two scenarios that may occur when an account is overdrafted.

Scenario 1: Happy path

Let's say Account A has an initial available balance of $40. The Overdraft reserve account of the platform has an initial available balance of $1000. Account A has is_overdraftable set to true and has linked overdraft_reserve_account_id to the overdraft reserve account.

  1. An outgoing wire transfer is initiated with an amount of $100. The wire transfer will go through if allow_overdraft is set to true in the transfer request.

    • Account A will have an available balance of -$60.
    • Overdraft reserve account will have an available balance of $940 and locked balance of $60. (The locked balance is posted on the account but cannot be withdrawn).
    • Column will emit a webook for account.overdrafted with the following syntax:

    Overdraft Account Object

    "created_at": "2023-10-02T20:24:35Z",
    "data": {
     "available_balance": {
       "cents": "-8900",
       "currency_code": "USD"
     "bank_account_id": "bacc_2Vx8LNEOExy0zIz826cHxaishaS",
     "overdraft_amount": {
       "cents": "8900",
       "currency_code": "USD"
     "reserve_account_id": "bacc_23ZaVZeuwSb74vFuEDXval3bepR"
    "id": "evnt_2WDs2AMrpRixTZ4D45ahRX148sV",
    "type": "account.overdrafted"
  2. An incoming wire transfer arrives at account A with an amount of $70.

  • Account A will have an available balance of $10.
  • Overdraft reserve account is adjusted accordingly. Now it has an available balance of $1000.

Scenario 2: Not sufficient funds in overdraft reserve account

Take the same set up as scenario 1, except the overdraft reserve account only has an available balance of $10. The transfer will fail because there is not sufficient funds in the overdraft reserve account to cover the deficit ($40 balance - $100 outgoing wire + $10 reserve account = -$50 balance to process wire = insufficient funds).

Example real-world use case

Debit cards** - Most card program managers who use Column as BIN sponsor also use Column for underlying bank accounts for their debit cards. When the issuer processor sends you an auth request, you will send a book transfer between the customer's bank account and the network settlement account at Column. This will automatically create the proper ledgering between the accounts. If there are insufficient funds in the customer's account, you would decline the auth and the book transfer would usually fail. However, there are certain times where you may want the transaction to go through despite the insufficient balance (ie:* there's a force post from the network). In that situation, the account would be enabled with is_overdraftable: true, and the book transfer request would process successfully with allow_overdraft:true.