Authenticate to the Column API using HTTP Basic auth with your API key as the username and an empty password; all requests are to https://api.column.com
Create a counterparty via POST /transfers/ach/counterparties with routing_number, account_number, account_type, and holder_name; store the returned counterparty_id for reuse
Originate a Same-Day ACH credit via POST /transfers/ach with type=credit, counterparty_id, amount in cents, currency=USD, sec_code=PPD or CCD, description, and same_day=true
Poll GET /transfers/ach/{id} or subscribe to Column webhooks (transfer.ach.updated) to track status transitions: created → submitted → settled or returned
If a return event arrives, the webhook payload includes the return_code and original transfer ID; match against your payment record and apply the appropriate return handling logic for the specific R-code
For reconciliation, call GET /transfers/ach with account_id, created_at[gte], and created_at[lte] to list all ACH activity in a period; compare to your ledger and flag any transfers missing from your records
Known gotchas
Column enforces Same-Day ACH submission windows; check Column's documentation for their internal cut-off times, which are earlier than the NACHA network cut-offs to allow for processing — submit with buffer time
The Column sandbox does not automatically generate returns; use the POST /sandbox/transfers/ach/{id}/return endpoint to simulate returns with specific R-codes during integration testing
Column counterparties are reusable across transfers; avoid creating a new counterparty for every transfer to the same bank account, as duplicate counterparties can complicate reconciliation and matching
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp