Retrieving Account Balances
After provisioning an Internal Account, you can retrieve real-time balance information via the API or webhooks. Balance Reports represent a collection of balances for an account at a given moment in time.
Balance Types
Modern Treasury provides four balance types for each Internal Account:
current_ledger— the current posted balance of the account. This does not account for pending inflows and outflows.current_available— the balance available for use when initiating payments. This equalscurrent_ledgerminus any pending outflows.current_pending_inflows— money on its way into the account that hasn't posted yet.current_pending_outflows— money on its way out of the 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.
Retrieve Latest Balances on the Internal Account
Every Internal Account has a latest_balances field with the balances from its latest Balance Report. Get Internal Account and List Internal Accounts both return it.
curl --request GET \
-u ORGANIZATION_ID:API_KEY \
--url https://app.moderntreasury.com/api/internal_accounts/<internal_account_id> \
-H 'content-type: application/json'Sample Internal Account response (abbreviated):
{
"id": "bf5f1df9-de01-40c2-9040-7ec10170a14c",
"object": "internal_account",
"currency": "USD",
"latest_balances": [
{ "object": "balance", "balance_type": "current_available", "amount": 100, "amount_string": "100", "currency": "USD", "as_of_date": "2026-01-01", "as_of_time": "16:30" },
{ "object": "balance", "balance_type": "current_ledger", "amount": 235, "amount_string": "235", "currency": "USD", "as_of_date": "2026-01-01", "as_of_time": "16:30" },
{ "object": "balance", "balance_type": "current_pending_inflows", "amount": 50, "amount_string": "50", "currency": "USD", "as_of_date": "2026-01-01", "as_of_time": "16:30" },
{ "object": "balance", "balance_type": "current_pending_outflows", "amount": 135, "amount_string": "135", "currency": "USD", "as_of_date": "2026-01-01", "as_of_time": "16:30" }
]
}latest_balances is empty until the account has a Balance Report.
Which Report Is Latest
The latest Balance Report is the one with the newest as-of date and time.
Modern Treasury sends two kinds of Balance Reports:
- A real-time report each time the balance changes, with
current_available,current_ledger,current_pending_inflows, andcurrent_pending_outflows. - A previous-day report every day, with
closing_available,closing_ledger,closing_pending_inflows, andclosing_pending_outflowsas of the end of the previous day.
Retrieve Balance Reports via API
To retrieve balances for a specific report, use the Get Balance Report endpoint. Set the id parameter to latest to retrieve the most recent Balance Report.
curl --request GET \
-u ORGANIZATION_ID:API_KEY \
--url https://app.moderntreasury.com/api/internal_accounts/<internal_account_id>/balance_reports/latest \
-H 'content-type: application/json'Sample Balance Report response (abbreviated):
{
"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",
"balance_type": "current_available",
"as_of_date": "2026-01-01",
"as_of_time": "16:30"
},
{
"id": "1d9bd86f-2b63-453d-b55c-a9e6046aec8a",
"amount": 235,
"amount_string": "235",
"object": "balance",
"currency": "USD",
"balance_type": "current_ledger",
"as_of_date": "2026-01-01",
"as_of_time": "16:30"
},
{
"id": "4c1e8a52-7f3b-4d9e-a6c2-1b8f0e5d7a93",
"amount": 50,
"amount_string": "50",
"object": "balance",
"currency": "USD",
"balance_type": "current_pending_inflows",
"as_of_date": "2026-01-01",
"as_of_time": "16:30"
},
{
"id": "9a7d3f61-2e4c-4b8a-9f15-6c0d2e8b4a17",
"amount": 135,
"amount_string": "135",
"object": "balance",
"currency": "USD",
"balance_type": "current_pending_outflows",
"as_of_date": "2026-01-01",
"as_of_time": "16:30"
}
],
"as_of_date": "2026-01-01",
"as_of_time": "16:30",
"balance_report_type": "real_time",
"internal_account_id": "bf5f1df9-de01-40c2-9040-7ec10170a14c"
}Monitor Balances via Webhooks
Subscribe to balance_report webhooks to receive real-time updates each time the account's balance changes. Each webhook payload includes all four balance types and an as_of_time indicating the time the balances are effective.
For more details on balance tracking patterns, including webhook payload examples, see Tracking Account Balances.
Updated 5 days ago