Create the top-level Internal Account in Modern Treasury representing your FBO omnibus bank account, providing the bank account number, routing number, and currency; this becomes the physical account that holds all pooled funds
Create a Ledger with appropriate normal balance settings; within it, create a parent Ledger Account for the FBO (asset type, normal balance debit) and child Ledger Accounts for each sub-tenant or end-user you need to track
Create a Virtual Account for each sub-tenant via POST to the virtual accounts endpoint, specifying the parent internal_account_id (the FBO account); the API returns a unique account number and routing number that can be given directly to payers for ACH or wire credits
Link each Virtual Account to its corresponding child Ledger Account by including ledger_account in the create request or by updating the Virtual Account with ledger_account_id afterward; this enables auto-ledgering so every incoming payment to the virtual account posts a credit to the linked ledger account automatically
Consume payment.created webhooks to reconcile incoming payments; query the Virtual Account's ledger account balance to get the real-time sub-tenant balance without querying the physical FBO bank account directly
Originate outbound payments on behalf of sub-tenants by creating Payment Orders from the FBO Internal Account while including the virtual account reference in the remittance field; post a corresponding debit ledger transaction to the sub-tenant ledger account to keep the ledger in sync
Known gotchas
Virtual Accounts in Modern Treasury receive funds but cannot hold balances themselves — the physical balance always sits in the FBO omnibus account; querying the Virtual Account's bank balance rather than its linked Ledger Account balance returns zero, which breaks sub-tenant balance displays
Not all bank rails that Modern Treasury connects to support virtual account-level routing; before issuing virtual account numbers to payers, verify via the virtual account bank and capability support documentation that your specific bank partner supports inbound ACH or wire routing to virtual accounts
Auto-ledgering creates ledger transactions for inbound payments but does not automatically ledger fees, interest, or manual adjustments — those require explicit Ledger Transaction creation via the API to keep the double-entry ledger balanced
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