_Docs/
Get StartedModulesPlatformDeployCookbookChangelogReference
_Stack
_Modules
  • Ledger
  • Numscript
  • Connectivity
    • Capabilities
    • Operations
    • Accounts
    • Payments
    • Orders
    • Conversions
    • Payment Initiation
    • Account Pools
    • Payment Service Users
    • Connectors
      • Generic Connector
        • Getting Started
        • How it Works
      • PSP Connectors
        • Adyen
        • Atlar
        • Banking Circle
        • Column
        • Currencycloud
        • Increase
        • Mangopay
        • Modulr
        • Moneycorp
        • Qonto
        • Stripe
        • Wise
        • Banking BridgeEE
        • RoutableEE
      • Exchange Connectors
        • Coinbase PrimeEE
        • FireblocksEE
        • BitstampEE
      • Open Banking
        • Getting Started with Open Banking
        • Plaid
        • Tink
        • Powens
      • Build a connector
  • WalletsEE
  • FlowsEE
  • ReconciliationEE
  1. Modules
  2. Connectivity
  3. Connectors
  4. PSP Connectors
  5. Column
Column
PSP Connectors

Column

Connect a Column bank-as-a-service tenant to Formance Connectivity to sync accounts, balances, and payments across ACH, wire, and book-transfer rails, with full outbound initiation and webhook ingest.

The Column connector polls a Column bank-as-a-service tenant and surfaces accounts, balances, counterparties, and payments. It covers the full US-bank rail set (ACH credit/debit, wire, book transfer) for both observation and outbound initiation, plus webhook ingest.

Prerequisites#

You need a Column tenant and an API key with read access to accounts and transfers, plus write access for the rails you initiate (ach.create, wire.create, book.create, counterparty.create).

Make sure to create an API key dedicated to Formance. Doing so will improve your auditability and security and will allow you to revoke access to Formance at any time if needed.

Installation#

curl -X POST $FORMANCE_API_URL/api/payments/v3/connectors/install/column \
  -H "Content-Type: application/json" \
  -d @config.json
POST/api/payments/v3/connectors/install/column

Configuration fields#

FieldTypeRequiredDefault
apiKeystringYes
endpointstringYes
pageSizeintegerNo25
pollingPeriodstringNo30m

endpoint defaults to https://api.column.com. Sandbox uses the same host with sandbox-scoped keys — no separate base URL.

Capabilities#

  • FETCH_ACCOUNTS — bank accounts via GET /bank-accounts.
  • FETCH_BALANCES — available + held + locked balance per account.
  • FETCH_EXTERNAL_ACCOUNTS — counterparties via GET /counterparties.
  • FETCH_PAYMENTS — ACH, wires, book transfers, and incoming credits, unified into PSPPayment.
  • CREATE_BANK_ACCOUNT — registers a counterparty via v3CreateBankAccount.
  • CREATE_TRANSFER — book transfer between two Column accounts.
  • CREATE_PAYOUT — ACH credit (POST /transfers/ach) or wire (POST /transfers/wire); rail selected via com.column.spec/rail.
  • CREATE_WEBHOOKS + TRANSLATE_WEBHOOKS — provisions an endpoint at install and ingests ach.*, wire.*, book.* events.

Account model#

Every Connectivity internal account is one Column bank account from GET /bank-accounts. The reference is the Column account ID; name is the description; defaultAsset is USD/2 (Column is USD-only on the bank-product side). Metadata stamps type, bic, default_account_number, routing_number, is_overdraftable, owners. EXTERNAL accounts come from /counterparties; v3CreateBankAccount registers new ones. See Accounts for the cross-connector model.

Asset model#

USD-only on the bank-product side — every balance and payment is USD/2. Amounts are already in minor units.

Status mapping#

Column statuses vary per rail; the connector collapses them:

Column status (ACH / wire / book)Payment status
initiated, pending, submitted, manual_review, holdingPENDING
completed, settled, postedSUCCEEDED
returned, failed, rejectedFAILED
canceledCANCELLED

ACH credits land settled after the daily ACH return window — the connector folds the window into the PENDING → SUCCEEDED transition.

Metadata keys#

Under com.column.spec/:

  • Account: bank_account_id, account_number_last4, routing_number, account_type.
  • Counterparty (external account): counterparty_id, account_number_last4, routing_number, account_type, name.
  • Payment: transfer_id, rail (ach / wire / book), direction, network_response_code, idempotency_key, description.

Outbound initiation requires the rail on the PaymentInitiation metadata:

JSON
{
  "metadata": {
    "com.column.spec/rail": "ach",
    "com.column.spec/sec_code": "PPD"
  }
}

Workflow tree#

FetchAccounts (periodic)
  ├── FetchBalances (periodic) — per account
  └── FetchPayments (periodic) — per account, per rail
FetchExternalAccounts (periodic)
CreateBankAccount / CreateTransfer / CreatePayout (event-driven)
  └── PollTransferStatus / PollPayoutStatus until terminal
CreateWebhooks (one-shot at install)

Pagination and recovery#

Cursor-based pagination via starting_after. The connector persists cursors per stream in platform-managed State and resumes from the last committed cursor on restart.

Known gaps#

  • Reverse transfer is not implemented; ACH returns surface as new payment rows rather than reversal events.
  • International wires are supported only insofar as Column's API accepts the destination — no extra Connectivity-side metadata mapping for SWIFT BIC / IBAN.
Banking CircleCurrencycloud
On This Page
  • Prerequisites
  • Installation
  • Configuration fields
  • Capabilities
  • Account model
  • Asset model
  • Status mapping
  • Metadata keys
  • Workflow tree
  • Pagination and recovery
  • Known gaps