Webhook payload format
OwnPay sends webhooks as JSON POST requests with three custom headers:Event types
Signature verification
How verification works
OwnPay computes an HMAC-SHA256 hash of the raw request body using your webhook secret. The signature header containssha256= followed by the hex-encoded HMAC.
PHP verification
Node.js verification
Python verification
Timestamp and replay attack prevention
Every webhook includes theX-OwnPay-Timestamp header. Your receiver should:
- Compare the timestamp against your server’s clock
- Reject any event with a timestamp more than 5 minutes old
- Optionally store processed event IDs to catch duplicate deliveries within the tolerance window
Idempotency
Webhook delivery is at-least-once. Your handler may receive the same event more than once. Always make handlers idempotent:Expected response
OwnPay considers delivery successful when your endpoint returns any HTTP 2xx status within 10 seconds. Anything else triggers a retry.Retry schedule
You can inspect and replay failed deliveries from Developers → Webhooks → Delivery Log.