Skip to main content
Webhook event IDs are stable. Delivery is at least once, so acknowledge quickly, enqueue work, and deduplicate by event ID. Event types include 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.