Hey there. After looking into this, it seems that the first payload was sent when Zwift autosaved the cycling session and the second event was sent after the session had finished. Regardless, both events can be unified by looking at the metadata.summary_id
property which you can use to overwrite the old payload in your database.
Whilst most activity events are only sent once after completion, occasionally a provider may send a half-complete event pre-maturely determining the end of the exercise or sometimes a correction payload might be sent updating certains values or after recalculating scores. In either case, the best practice is to use the summary_id
property to unify the data.