Production-grade Elixir client for the Column Bank API.
Column is a bank-as-a-service platform providing FDIC-insured accounts, KYC/KYB compliance, and every major US payment rail: ACH, Fedwire, SWIFT international wires, RTP/FedNow realtime payments, and checks.
Installation
Add column to your dependencies in mix.exs:
def deps do
[
{:column, "~> 0.1"}
]
endConfiguration
Set your Column API key in config/config.exs:
config :column, api_key: System.get_env("COLUMN_API_KEY")For runtime configuration (e.g. config/runtime.exs):
config :column,
api_key: System.get_env("COLUMN_API_KEY"),
base_url: "https://api.column.com", # default
timeout: 30_000,
max_retries: 3Per-request config override (useful for multi-tenant setups):
config = %Column.Config{api_key: "live_abc123"}
Column.BankAccounts.list(config: config)Environments
- Sandbox: Use
test_...prefixed API keys. CallColumn.Simulation.*to trigger synthetic network events. - Production: Use
live_...prefixed API keys.
Module map
| Domain | Module |
|---|---|
| KYC / KYB | Column.Entities |
| Bank accounts | Column.BankAccounts |
| Virtual account numbers | Column.AccountNumbers |
| Counterparties | Column.Counterparties |
| ACH transfers + positive pay | Column.ACH |
| Book transfers | Column.BookTransfers |
| Domestic wires | Column.Wires |
| International wires + FX | Column.InternationalWires |
| Realtime (RTP / FedNow) | Column.RealtimeTransfers |
| Checks | Column.Checks |
| All transfers unified | Column.Transfers |
| Loans & programs | Column.Loans |
| Loan disbursements | Column.Disbursements |
| Loan payments | Column.LoanPayments |
| Events | Column.Events |
| Webhooks | Column.Webhooks |
| Reporting | Column.Reporting |
| Documents | Column.Documents |
| Sandbox simulation | Column.Simulation |
| Pagination helpers | Column.Pagination |
| HTTP client | Column.Client |
| Config | Column.Config |
| Error type | Column.Error |
Error handling
All functions return {:ok, map()} or {:error, %Column.Error{}}:
case Column.BankAccounts.get("bacc_missing") do
{:ok, account} ->
account
{:error, %Column.Error{type: :api_error, status: 404}} ->
{:error, :not_found}
{:error, %Column.Error{type: :network_error} = err} ->
Logger.error("Column network error: #{err.message}")
{:error, :unavailable}
endPagination
All list functions support cursor pagination. Use Column.Pagination.stream/2
to consume pages lazily as a Stream:
Column.Pagination.stream(&Column.Transfers.list/1, limit: 100)
|> Stream.filter(fn transfer -> transfer["status"] == "SETTLED" end)
|> Enum.to_list()Idempotency
All POST requests automatically generate and attach an Idempotency-Key
header. Supply your own to control retry behaviour:
Column.ACH.create(%{...}, idempotency_key: "my-unique-key")Webhook signature verification
Column.Webhooks.verify_signature(raw_body, signature_header, webhook_secret)
# => :ok | :error
Summary
Functions
@spec version() :: String.t()
Returns the current library version.
Module map
| Domain | Module |
|---|---|
| KYC / KYB | Column.Entities |
| Bank accounts | Column.BankAccounts |
| Virtual account numbers | Column.AccountNumbers |
| Counterparties | Column.Counterparties |
| ACH transfers + positive pay | Column.ACH |
| Book transfers | Column.BookTransfers |
| Domestic wires | Column.Wires |
| International wires + FX | Column.InternationalWires |
| Realtime (RTP / FedNow) | Column.RealtimeTransfers |
| Checks | Column.Checks |
| All transfers unified | Column.Transfers |
| Loans & programs | Column.Loans |
| Loan disbursements | Column.Disbursements |
| Loan payments | Column.LoanPayments |
| Events | Column.Events |
| Webhooks | Column.Webhooks |
| Webhook handler behaviour | Column.WebhookHandler |
| Reporting | Column.Reporting |
| Documents | Column.Documents |
| Sandbox simulation | Column.Simulation |
| Pagination helpers | Column.Pagination |
| Money / currency helpers | Column.Money |
| Param builder / validation | Column.Params |
| Idempotency key helpers | Column.Idempotency |
| Rate limit parsing | Column.RateLimit |
| Telemetry events | Column.Telemetry |
| HTTP client | Column.Client |
| Config | Column.Config |
| Error type | Column.Error |