payment.initiated, payment.pending, payment.active, payment.hold,
payment.completed, payment.canceled, payment.declined, payment.failed,
and payment.reverted.
The optional data.merchantOrderId connects a hosted checkout event to your
order. The webhook body is JSON, but signature verification must use its exact
raw bytes.
Your endpoint must be public HTTPS and must not rely on redirects. Return any
2xx response after authenticating and durably recording the event and any
unique fulfillment job. Do not call an external fulfillment service inside the
webhook request. Enqueue only for payment.completed; pending and hold events
are informative.
Next: implement signature verification before
testing retries and duplicates, then implement
safe fulfillment.