Start here. This is the direct spoken answer to practice first.
Why this question matters
A webhook sender controls timing and retries, while the receiver controls verification, durable intake, and processing. A fast response is safe only after the receiver has recorded enough information to recover the event.
I verify the provider signature against the raw request body and enforce its timestamp or replay window according to the provider contract. Then I persist the provider event id, type, received time, and payload or safe normalized form under a unique constraint before returning success. A worker processes the durable record asynchronously. Duplicate deliveries resolve to the same event, so they do not repeat the business change.