Tracking Account Balances
Modern Treasury sends you real-time balance updates via webhooks each time your account's balance changes. You can also poll for balances using the Modern Treasury API.
Balance Reports and Balance Types
Balance Reports represent a collection of balances for an account at a given moment in time. Modern Treasury specifically provides real-time Balance Reports that contain four types of balances:
current_ledgeris the current posted balance of your account. This balance does not account for pending inflows and outflows.current_availableis the current balance available for use when initiating payments from this account. This balance is equal to yourcurrent_ledgerminus any pending outflows.current_pending_inflowsis money on its way into your account that hasn't posted yet.current_pending_outflowsis money on its way out of your account that hasn't posted yet.
Previous day Balance Reports (balance_report_type of previous_day) contain the end-of-day versions of these balances: closing_ledger, closing_available, closing_pending_inflows, and closing_pending_outflows.
Ingesting Balances via Webhooks
Each time an account's balance changes, Modern Treasury sends a Balance Report webhook. The webhook contains all four balance types mentioned above and an as_of_time indicating the time the balances are effective.
Sample Balance Report webhook:
{
"event": "created",
"data": {
"id": "b9382713-ce26-4864-9327-289bd7c62a25",
"object": "balance_report",
"balances": [
{
"id": "805637d6-980d-4a34-8ff6-c3e1e33cd504",
"amount": 100,
"amount_string": "100",
"object": "balance",
"currency": "USD",
"live_mode": true,
"as_of_date": "2026-01-01",
"as_of_time": "16:30",
"created_at": "2026-01-01T20:40:35Z",
"updated_at": "2026-01-01T20:40:35Z",
"value_date": "2026-01-01",
"vendor_code": "current_available",
"balance_type": "current_available",
"vendor_code_type": "modern_treasury"
},
{
"id": "1d9bd86f-2b63-453d-b55c-a9e6046aec8a",
"amount": 235,
"amount_string": "235",
"object": "balance",
"currency": "USD",
"live_mode": true,
"as_of_date": "2026-01-01",
"as_of_time": "16:30",
"created_at": "2026-01-01T20:40:35Z",
"updated_at": "2026-01-01T20:40:35Z",
"value_date": "2026-01-01",
"vendor_code": "current_ledger",
"balance_type": "current_ledger",
"vendor_code_type": "modern_treasury"
},
{
"id": "4c1e8a52-7f3b-4d9e-a6c2-1b8f0e5d7a93",
"amount": 50,
"amount_string": "50",
"object": "balance",
"currency": "USD",
"live_mode": true,
"as_of_date": "2026-01-01",
"as_of_time": "16:30",
"created_at": "2026-01-01T20:40:35Z",
"updated_at": "2026-01-01T20:40:35Z",
"value_date": "2026-01-01",
"vendor_code": "current_pending_inflows",
"balance_type": "current_pending_inflows",
"vendor_code_type": "modern_treasury"
},
{
"id": "9a7d3f61-2e4c-4b8a-9f15-6c0d2e8b4a17",
"amount": 135,
"amount_string": "135",
"object": "balance",
"currency": "USD",
"live_mode": true,
"as_of_date": "2026-01-01",
"as_of_time": "16:30",
"created_at": "2026-01-01T20:40:35Z",
"updated_at": "2026-01-01T20:40:35Z",
"value_date": "2026-01-01",
"vendor_code": "current_pending_outflows",
"balance_type": "current_pending_outflows",
"vendor_code_type": "modern_treasury"
}
],
"live_mode": true,
"as_of_date": "2026-01-01",
"as_of_time": "16:30",
"created_at": "2026-01-01T20:40:35Z",
"updated_at": "2026-01-01T20:40:35Z",
"interest_rate": null,
"balance_report_type": "real_time",
"internal_account_id": "bf5f1df9-de01-40c2-9040-7ec10170a14c"
}
}Fetching Balances via the API
To poll an account's balances, read latest_balances on Get Internal Account or List Internal Accounts. It holds the balances from the account's latest Balance Report. See Which Report Is Latest.
To retrieve balances for a specific report, use Get Balance Report. You'll need to specify the internal_account_id and can fetch the most recent balance available by setting the id to latest.
To fetch Balance Reports for a specific account, use List Balance Reports with the account's internal_account_id.
Updated 10 days ago