Differences in balance can occur between /transactions/get or /transactions/sync responses and /accounts/balance/get responses.
The reason for this is because requests to the /accounts/balance/get endpoint directly contact the financial institution in real-time to get the current balance at that precise moment in time. Whereas, the balances object within the /transactions/get or /transactions/sync response is accurate as of the time Plaid made our scheduled request for transaction data from your institution. Since scheduled requests for new transactions typically occur a handful of times per day, the balance object will not update with every request to the transactions endpoint. Balances will only update once Plaid has checked fresh transaction data.
Please note that depending on the institution, these checks for fresh data occur less frequently, such as once per day. An Item's status.transactions.last_successful_update field, available via /item/get, will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, you can use the /transactions/refresh endpoint.
If you require real-time balance data, you have two endpoint options depending on your use case:
-
/signal/evaluate— recommended for ACH transaction risk evaluation. It returns Signal Rules–based recommendations (accept, review, or request a different payment method). It fetches real-time balance from the institution only when the active ruleset includes a balance rule (such as a Balance-only ruleset); rulesets without a balance rule do not trigger a real-time balance call. -
/accounts/balance/get— for non-ACH real-time balance needs such as personal financial management, treasury management, or non-US accounts.
If you are only utilizing the Transactions product, you can also leverage our Transactions webhooks which will alert you when new transactions data is available, including an updated balance.