Our webhooks are sent in order of creation for each user (we put a mutex on the user id to ensure this).
So even if the sending of an event did not work, the following ones would not be sent until the first one was validated by your backend.
If, despite this, events were to go out in the wrong order (from where?), we added an extra security layer by including the date of creation of the event in the event properties (field `received_at`) which enables you to order the received webhooks.
The best practice is to always keep the last received date associated with a specific pair of properties (`user.vendor_id`, `properties.product.plan.vendor_id`), and ignore any older event you could receive after this association was made.