Complete guide to all ZezoPay webhook events and data structures
When you use ZezoPay to collect payments, ZezoPay automatically sends HTTP POST requests to your configured webhook URL. This document lists all the events and data that ZezoPay sends to your webhook.
Total Events: 25
Every webhook request follows this structure:
{
"data": {
"entity": "event",
"account_id": "merchant-account-id",
"event": "event.name",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "entity-id",
"entity": "payment",
"created_at": 1234567890000,
"status": "paid"
}
}
}
}
}Every webhook request includes:
| Header Name | Description |
|---|---|
Content-Type | application/json |
x-zezopay-request-id | Unique request ID |
x-zezopay-webhook-signature | HMAC SHA256 signature (if secret is configured) |
All entities share these common fields:
id - Entity IDentity - Entity type ("payment", "subscription", or "digital_product")created_at - Timestamp in millisecondsprice - Amountstatus - Current statusorder_id - Order IDpw_id - Payment gateway IDpayment_gateway - Gateway name (razorpay, stripe, phonepe, ccavenue)user_id - User IDuser_name - User nameuser_email - User emailuser_phone - User phone numbermeta_data - Additional metadataTriggered when a payment is created.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.created",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "created",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when payment is successfully completed.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.paid",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "paid",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when payment fails.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.failed",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "failed",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when a payment attempt is made.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.attempted",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "attempted",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when payment is cancelled.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.cancelled",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "cancelled",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when payment is authorized.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.authorized",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "authorized",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when payment is refunded.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.refunded",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "refunded",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when a chargeback occurs.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.chargeback",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "chargeback",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when payment is pending.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439011",
"event": "payment.pending",
"contains": ["payment"],
"created_at": 1234567890,
"payload": {
"payment": {
"entity": {
"id": "pay_123456",
"entity": "payment",
"created_at": 1234567890000,
"price": 1000,
"currency": "INR",
"status": "pending",
"order_id": "order_789",
"pw_id": "pay_razorpay_123",
"payment_gateway": "razorpay",
"user_id": "user_456",
"user_name": "John Doe",
"user_email": "john@example.com",
"user_phone": "+1234567890",
"meta_data": {}
}
}
}
}
}Triggered when subscription becomes active.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439012",
"event": "subscription.active",
"contains": ["subscription"],
"created_at": 1234567890,
"payload": {
"subscription": {
"entity": {
"id": "sub_123456",
"entity": "subscription",
"created_at": 1234567890000,
"plan_id": "plan_789",
"plan_name": "Premium Plan",
"plan_duration": 30,
"plan_duration_unit": "days",
"plan_price": 999,
"price": 999,
"payment_id": "pay_123",
"status": "active",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Jane Smith",
"user_email": "jane@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"start_date": 1234567890000,
"end_date": 1237248000000,
"meta_data": {}
}
}
}
}
}Triggered when subscription enters trial period.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439012",
"event": "subscription.trial",
"contains": ["subscription"],
"created_at": 1234567890,
"payload": {
"subscription": {
"entity": {
"id": "sub_123456",
"entity": "subscription",
"created_at": 1234567890000,
"plan_id": "plan_789",
"plan_name": "Premium Plan",
"plan_duration": 30,
"plan_duration_unit": "days",
"plan_price": 999,
"price": 0,
"payment_id": "pay_123",
"status": "trial",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Jane Smith",
"user_email": "jane@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"start_date": 1234567890000,
"end_date": 1237248000000,
"meta_data": {}
}
}
}
}
}Triggered when subscription expires.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439012",
"event": "subscription.expired",
"contains": ["subscription"],
"created_at": 1234567890,
"payload": {
"subscription": {
"entity": {
"id": "sub_123456",
"entity": "subscription",
"created_at": 1234567890000,
"plan_id": "plan_789",
"plan_name": "Premium Plan",
"plan_duration": 30,
"plan_duration_unit": "days",
"plan_price": 999,
"price": 999,
"payment_id": "pay_123",
"status": "expired",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Jane Smith",
"user_email": "jane@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"start_date": 1234567890000,
"end_date": 1237248000000,
"meta_data": {}
}
}
}
}
}Triggered when subscription payment fails.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439012",
"event": "subscription.failed",
"contains": ["subscription"],
"created_at": 1234567890,
"payload": {
"subscription": {
"entity": {
"id": "sub_123456",
"entity": "subscription",
"created_at": 1234567890000,
"plan_id": "plan_789",
"plan_name": "Premium Plan",
"plan_duration": 30,
"plan_duration_unit": "days",
"plan_price": 999,
"price": 999,
"payment_id": "pay_123",
"status": "failed",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Jane Smith",
"user_email": "jane@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"start_date": 1234567890000,
"end_date": 1237248000000,
"meta_data": {}
}
}
}
}
}Triggered when subscription is cancelled.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439012",
"event": "subscription.canceled",
"contains": ["subscription"],
"created_at": 1234567890,
"payload": {
"subscription": {
"entity": {
"id": "sub_123456",
"entity": "subscription",
"created_at": 1234567890000,
"plan_id": "plan_789",
"plan_name": "Premium Plan",
"plan_duration": 30,
"plan_duration_unit": "days",
"plan_price": 999,
"price": 999,
"payment_id": "pay_123",
"status": "canceled",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Jane Smith",
"user_email": "jane@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"start_date": 1234567890000,
"end_date": 1237248000000,
"meta_data": {}
}
}
}
}
}Triggered when subscription becomes inactive.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439012",
"event": "subscription.inactive",
"contains": ["subscription"],
"created_at": 1234567890,
"payload": {
"subscription": {
"entity": {
"id": "sub_123456",
"entity": "subscription",
"created_at": 1234567890000,
"plan_id": "plan_789",
"plan_name": "Premium Plan",
"plan_duration": 30,
"plan_duration_unit": "days",
"plan_price": 999,
"price": 999,
"payment_id": "pay_123",
"status": "inactive",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Jane Smith",
"user_email": "jane@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"start_date": 1234567890000,
"end_date": 1237248000000,
"meta_data": {}
}
}
}
}
}Triggered when subscription is pending.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439012",
"event": "subscription.pending",
"contains": ["subscription"],
"created_at": 1234567890,
"payload": {
"subscription": {
"entity": {
"id": "sub_123456",
"entity": "subscription",
"created_at": 1234567890000,
"plan_id": "plan_789",
"plan_name": "Premium Plan",
"plan_duration": 30,
"plan_duration_unit": "days",
"plan_price": 999,
"price": 999,
"payment_id": "pay_123",
"status": "pending",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Jane Smith",
"user_email": "jane@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"start_date": 1234567890000,
"end_date": 1237248000000,
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase payment is completed.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.paid",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 499,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "active",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase is pending.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.pending",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 499,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "pending",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase payment fails.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.failed",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 499,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "failed",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase is cancelled.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.cancelled",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 499,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "cancelled",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase is active.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.active",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 499,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "active",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase is in trial.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.trial",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 0,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "trial",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase becomes inactive.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.inactive",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 499,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "inactive",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}Triggered when digital product purchase expires.
{
"data": {
"entity": "event",
"account_id": "507f1f77bcf86cd799439013",
"event": "product.purchase.expired",
"contains": ["digital_product"],
"created_at": 1234567890,
"payload": {
"digital_product": {
"entity": {
"id": "prod_123456",
"entity": "digital_product",
"created_at": 1234567890000,
"product_id": "product_789",
"product_name": "Digital Course",
"product_price": 499,
"price": 499,
"currency": "INR",
"product_expiry": "365",
"product_expiry_unit": "days",
"product_slug": "digital-course",
"product_description": "Learn digital marketing",
"product_category": "Education",
"product_purchase_id": "prod_123456",
"status": "expired",
"payment_id": "pay_123",
"order_id": "order_456",
"payment_gateway": "razorpay",
"user_id": "user_789",
"user_name": "Bob Johnson",
"user_email": "bob@example.com",
"user_phone": "+1234567890",
"pw_id": "payment-widget-id",
"meta_data": {}
}
}
}
}
}const crypto = require("crypto");
function verifyWebhookSignature(requestBody, signature, secret) {
if (!secret) return true; // Skip if no secret configured
const computedSignature = crypto
.createHmac("sha256", secret)
.update(JSON.stringify({ data: requestBody }))
.digest("hex");
return computedSignature === signature;
}
app.post("/api/webhooks/zezopay", express.json(), (req, res) => {
const signature = req.headers["x-zezopay-webhook-signature"];
const webhookSecret = process.env.ZEZOPAY_WEBHOOK_SECRET;
// Verify signature
if (!verifyWebhookSignature(req.body, signature, webhookSecret)) {
return res.status(401).json({ error: "Invalid signature" });
}
const event = req.body;
const eventType = event.data?.event;
// Process webhook based on event type
switch (eventType) {
case "payment.paid":
// Handle payment.paid
console.log("Payment completed:", event.data.payload.payment);
break;
case "payment.failed":
// Handle payment.failed
break;
case "subscription.active":
// Handle subscription.active
break;
case "product.purchase.paid":
// Handle product.purchase.paid
break;
// Handle all other events...
}
// Always respond with 200 OK
res.status(200).json({ received: true });
});For questions or support, please contact the ZezoPay support team.