You probably have a backend workflow set up to receive webhooks, but the payment completion causes multiple events to be fired → multiple webhooks received, hence duplicates. Is that right?