callback_url whenever a payment changes state.
Payload
Webhook Events
| Event | Trigger |
|---|---|
payment.completed | Customer payment confirmed |
payment.expired | QR or approval window elapsed without payment |
payment.refunded | Merchant issued a refund |
Verifying the Signature
Every webhook delivery includes anX-Webhook-Signature header — an HMAC-SHA256 hex digest of the raw request body, signed with your counter’s webhook_secret.
Always use constant-time comparison (Python:hmac.compare_digest/timingSafeEqual) to prevent timing attacks. Never use a simple string equality check.
