Create a Ledger in Modern Treasury and configure it with the base reporting currency for your entity; create Ledger Accounts for each currency your business handles — e.g., a USD asset account, a EUR asset account, and a GBP asset account — using normal balance debit for all asset-type accounts
Create additional Ledger Accounts for realized FX gain and realized FX loss (both income-statement type accounts) to hold the difference between the spot rate at which you bought currency and the rate at which you settled a cross-currency transaction
When a cross-currency payment settles, create a Ledger Transaction with three or more legs: debit the originating currency ledger account for the sent amount at the transaction spot rate, credit the destination currency ledger account for the received amount, and post the difference to the FX gain or FX loss account so the transaction balances in the reporting currency
Record the spot exchange rate used for each cross-currency ledger transaction in the transaction metadata; this rate should match the rate confirmed by the bank on the payment confirmation, not a mid-market rate, to reflect actual settlement economics
Implement an unrealized FX revaluation process at period-end: revalue all non-base-currency ledger account balances at the closing spot rate and post unrealized gain or loss entries to a separate unrealized FX adjustment account; reverse these entries at the start of the next period
Generate a currency exposure report by querying ledger account balances grouped by currency; compare against hedging instrument positions to calculate net open FX exposure for treasury risk management reporting
Known gotchas
Modern Treasury Ledger Transactions must balance to zero across all legs when amounts are expressed in the ledger's reporting currency — if you attempt to create a cross-currency transaction without the FX gain/loss balancing leg, the API returns a validation error; this is a deliberate constraint to enforce double-entry correctness
Ledger account balances returned by the Modern Treasury API are in the account's denominated currency, not the ledger's reporting currency; aggregating balances across multi-currency accounts without applying the current exchange rate produces a mathematically meaningless sum
Exchange rates are not stored or maintained by Modern Treasury — you must supply the rate in each transaction's metadata and implement your own rate sourcing (e.g., from a market data provider or bank confirmation); discrepancies between the rate you record and the rate the bank actually applied create reconciliation breaks that are difficult to trace after the fact
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