How syncing works
When you connect a financial account, Yoshi begins syncing data from that institution on a recurring schedule:| Data type | Typical sync frequency | Notes |
|---|---|---|
| Transactions | Every few hours | New and updated transactions are pulled in each sync |
| Balances | With each sync | Updated alongside transactions |
| Investment holdings | Daily | Some institutions update less frequently |
| Recurring streams | After each transaction sync | Patterns are re-analyzed as new data arrives |
| Scores | Daily | Recalculated once per day based on the latest data |
Sync frequency varies by institution. Some provide near real-time data, while others update once per business day.
The as_of timestamp
Each account includes an as_of field that tells you when its data was last refreshed:
as_of to show users when their data was last updated:
Use webhooks instead of polling
Rather than polling endpoints on a timer, subscribe to webhook events for real-time updates:| Event | Fires when |
|---|---|
transaction.created | New transactions are synced |
transaction.updated | Existing transactions change (e.g., pending → posted) |
balance.updated | Account balance changes |
investment.updated | Investment holdings are refreshed |
score.updated | Financial health scores are recalculated |
Handle stale data in your UI
Financial data may be minutes to hours old depending on the institution. Here are patterns for communicating freshness to users: Show the last sync time:Pending transactions
Transactions withpending: true are authorized but not yet settled. They can:
- Change amount (tips, holds)
- Change date
- Disappear entirely (voided authorizations)
pending: false), it’s final. Always use the transaction id for tracking — don’t match on amount or description, which can change.
What’s next
Webhooks
Get real-time notifications when data changes.
Best practices
Patterns for building reliable integrations.