Treasury
Track cash and liquid assets across bank accounts, crypto wallets, and custodians.
Overview
The Treasury module provides a unified view of your cash and liquid assets across bank accounts, crypto wallets, exchanges, and custodians. It tracks balances in each account's native currency and converts to your entity's functional currency for aggregation and reporting.
Operating wallet (USDC on Base)
Each entity can have one operating wallet for customer invoice payments and outbound USDC on Base. Create it under Accounting → Treasury → Operating wallet. Invoices with Accept USDC on Base (per invoice or as a default in Invoicing → Settings) include a pay link and wallet address for customers. Incoming USDC can be matched to open invoices when amount and payment reference align.
Bank deposits (ACH / wire → USDC)
Where available, you can enable a virtual deposit account so ACH and wire payments settle to your operating wallet as USDC on Base. Set this up from Admin → Receiving accounts or Treasury → Operating wallet → Receive. Deposit instructions can appear on invoices and fundraising materials. Ask payers to include the invoice number in the wire memo when possible.
You need a complete business address on Admin → Entity profile before bank deposit instructions can be issued.
Receiving accounts (remittance)
Admin → Receiving accounts lists all payment rails customers see on invoices and fundraising:
| Rail | Purpose |
|---|---|
| USDC (operating wallet) | On-chain pay link and address (per-invoice opt-in) |
| ACH / wire (virtual account) | Fiat instructions; settles to operating wallet |
| Wire & check | Manual bank instructions you maintain (e.g. Mercury) |
Wire/check accounts support invoice and fundraising defaults. USDC and bank-deposit instructions are managed automatically once enabled; you choose which account is the invoice default for printed remittance.
Account Types
Treasury supports several types of linked financial accounts:
| Type | Examples |
|---|---|
| Depository | Checking accounts, savings accounts (SVB, Chase, Mercury) |
| Wallet | MetaMask, Ledger, Safe multisig |
| Custodian | Fireblocks, Anchorage, BitGo |
| Investment | Brokerage accounts, retirement accounts |
Credit cards and loans are also linked through the same connection flow but appear on the Finance > Liabilities page instead of Treasury.
Connecting Accounts
Link your external financial accounts via Plaid or add them manually:
- Navigate to Settings > Linked Accounts
- Click Connect Account and authorize via Plaid, or create a manual account
- Accounts are automatically categorized by type and routed to the appropriate view
- Balances sync automatically after linking
Each account stores a native currency and can optionally link to a ledger account in your chart of accounts for reconciliation.
Cash Position
The cash position is a point-in-time snapshot that aggregates the latest balance for each active treasury account. Balances are grouped by currency type:
- Fiat — USD, EUR, GBP, etc.
- Stablecoin — USDC, USDT, DAI, etc. (treated at 1:1 peg to their base fiat currency)
- Crypto — BTC, ETH, SOL, etc. (volatile assets)
All totals are expressed in your entity's functional currency.
Currency Handling
| Currency Type | Description |
|---|---|
| Native | The denomination of the account itself (e.g. EUR, BTC, USDC) |
| Functional | Your entity's primary operating currency (e.g. USD) |
Each balance is stored in the native currency and automatically translated to the functional currency using exchange rates. Stablecoins pegged to the functional currency (e.g. USDC when functional currency is USD) are treated at 1:1.
Recording Balances
Balances can be updated through several methods:
- Automatic sync — Plaid-connected accounts sync balances automatically
- Manual entry — record a balance snapshot for any account with an as-of date
- On-chain — blockchain wallet balances can be synced from on-chain data
Each balance record captures the native balance, available balance (if different), and the translated functional-currency amount.
Movements
The Movements tab shows fund transfers between accounts. These represent real-world movements — wire transfers, on-chain sends, exchange withdrawals — that were ingested via bank import, on-chain data, or manual event creation. Transfers are read-only in Treasury; they occur externally and are recorded through the event pipeline.
API Reference
Reading Data
| View | Endpoint | Description |
|---|---|---|
| Accounts | GET /api/treasury?entityId=...&view=accounts | All treasury accounts with latest balance |
| Cash position | GET /api/treasury?entityId=...&view=cash_position&asOfDate=... | Aggregated position in functional currency |
| Liquidity | GET /api/treasury?entityId=...&view=liquidity | Composition breakdown (fiat / stablecoin / crypto) |
| Movements | GET /api/treasury?entityId=...&view=movements | Recent transfer events |
| Balance history | GET /api/treasury?entityId=...&view=balances&accountId=... | Historical balances for one account |
Writing Data
| Action | Description |
|---|---|
create_account | Create a new treasury account |
update_account | Update account details |
record_balance | Record a balance snapshot with as-of date |
delete_account | Remove an account (preserves accounting history) |
All write operations use POST /api/treasury with an action field.
Removing Accounts
Soft Delete (delete_account): Removes the linked account and balances but preserves all imported transactions and their downstream accounting records (events, journal entries).
Hard Delete / Purge (purge_account): Removes the linked account and all associated data — staged transactions, events, journal entries, journal lines, execution traces, match history, and canonical settlements. Use this when an account was linked by mistake. Blocked by hard-closed accounting periods.