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.
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.