For testing purposes, I've got an email list with 3 addresses - my own, an invalid email inside my domain, and an email at an invalid domain. When I send an email to this list, it usually gets scheduled for a few minutes in the future (that seems normal); after waiting for the schedule time to occur, both the web site and the /campaigns/# api report 3 emails were sent (zero bounces) but the campaigns/#/events/bounces api correctly shows one "non-existent address" and one "undeliverable". after many minutes have elapsed, eventually the web site and the /campaigns/# api show that 2 of the emails were "bounces".
Why is there this delay between when the emails actually bounce, and when those bounces are reported to the human and the campaigns/# api? are you retrying the sending of those emails, and only reporting them as bounces if they fail several tries?
The other interesting thing is that the "updated" time for the campaign (as reported in the /campaigns api) doesn't change when the campaign summary changes (<Bounces>0</Bounces> changes to <Bounces>2</Bounces> in the /campaigns/# api).
Is this the expected behavior? are these just flaws in the system that I need to work around, or is this by design and I'm just not understand how things are supposed to work?
The timing in which campaign events are reporting through the API and the UI varies somewhat because there is some caching of data for the UI. In addition, the updated time records when the contents or details of the campaign were last updated, rather than when the campaign events numbers change, or are refreshed.
So, in short, the behavior you are seeing is to be expected.
I hope this information helps.