Recurring Appointments
When it comes to Recurring Appointments, this is an area where the data warehouse is a bit stronger. Due to recurring appointments functionality, the system is constantly making and deleting appointments, so they aren't considered "real" until they are "started."
Cancellations and Deleted Data
In this scenario, a Cancellation deletes the extra appointments. Changing up the schedule or adjusting the contents of the appointments will also delete and recreate, so the old ones are gone and new ones show up with new IDs.
That said, changing an appointment that is not part of a recurring chain of appointments (such as a simple reschedule) won't delete/recreate, so the ID would be the same in that specific scenario.
To have recurring appointments report as accurately as possible, you would have to do constant full wipes and fresh pulls of appointment data. This is usually not a realistic task given the volume of appointment data.
And last point on the deletes, there's not really a solution for this over the API since the intention of the API isn't to build a custom data warehouse using just that given there's no event tracking for things like deletes.