Available in🇮🇳 India🇸🇬 Singapore
Payment Links enable businesses to accept payments without a website or app by generating and sharing secure links via email, SMS, or social media.
List of Payment Links Webhook Events
The table below lists the webhook events available for Payment Links.| Webhook Event | Description |
|---|---|
payment_link.paid | Triggered when a Payment Link is paid. |
payment_link.partially_paid | Triggered when a partial payment is made on a Standard Payment Link. |
payment_link.cancelled | Triggered when a Payment Link is cancelled by you. |
payment_link.expired | Triggered when a Payment Link expires. |
Sample Payloads
Given below are the sample payloads for Payment Links webhook events.Payment Link Paid
{
"account_id": "acc_OU2H3nkLn9jDVo",
"contains": [
"payment_link",
"order",
"payment"
],
"created_at": 1749618314,
"entity": "event",
"event": "payment_link.paid",
"payload": {
"order": {
"entity": {
"account_number": null,
"amount": 1000,
"amount_due": 0,
"amount_paid": 1000,
"app_offer": false,
"attempts": 1,
"authorized": true,
"bank": null,
"bank_account": null,
"checkout_config_id": null,
"created_at": 1749618325,
"currency": "SGD",
"customer_id": null,
"discount": false,
"first_payment_min_amount": null,
"force_offer": null,
"id": "QflczVVaNJciLq",
"late_auth_config_id": null,
"merchant_id": "OU2H3nkLn9jDVo",
"method": null,
"notes": [],
"offers": {},
"order_metas": [],
"order_relationships": [],
"partial_payment": false,
"payer_name": null,
"payment_capture": true,
"product_id": "QflcnnZqCekuvL",
"product_type": "payment_link_v2",
"provider_context": null,
"public_key": "rzp_live_XXXXXXXXXXXXXX",
"public_response": null,
"receipt": "23",
"reference2": null,
"reference3": null,
"reference4": null,
"reference5": null,
"reference6": null,
"reference7": null,
"reference8": null,
"source": null,
"status": "paid",
"transfers": null,
"updated_at": 1749618372
}
},
"payment": {
"entity": {
"acquirer_data": {
"rrn": "103608848276"
},
"amount": 1000,
"amount_refunded": 0,
"amount_transferred": 0,
"bank": null,
"base_amount": 1000,
"captured": true,
"card": null,
"card_id": null,
"contact": "+919876543210",
"created_at": 1749618371,
"currency": "SGD",
"description": "#QflcnnZqCekuvL",
"email": null,
"entity": "payment",
"error_code": null,
"error_description": null,
"error_reason": null,
"error_source": null,
"error_step": null,
"fee": 24,
"fee_bearer": "platform",
"id": "pay_Qfldmt5StKZFCB",
"international": false,
"invoice_id": null,
"method": "wallet",
"notes": [],
"order_id": "order_QflczVVaNJciLq",
"refund_status": null,
"status": "captured",
"tax": 4,
"vpa": null,
"wallet": "grabpay"
}
},
"payment_link": {
"entity": {
"accept_partial": false,
"amount": 1000,
"amount_paid": 1000,
"cancelled_at": 0,
"created_at": 1749618314,
"currency": "SGD",
"customer": {
"contact": "<phone>",
"email": "<email>"
},
"description": "Test Payment",
"expire_by": 0,
"expired_at": 0,
"first_min_partial_amount": 0,
"id": "plink_QflcnnZqCekuvL",
"notes": null,
"notify": {
"email": false,
"sms": false,
"whatsapp": false
},
"order_id": "order_QflczVVaNJciLq",
"reference_id": "23",
"reminder_enable": false,
"reminders": {
"status": "failed"
},
"short_url": "https://rzp.io/rzp/twH5w1Y",
"status": "paid",
"updated_at": 1749618371,
"upi_link": false,
"user_id": "HWPf1AudnADDV5",
"whatsapp_link": false
}
}
}
}
Payment Link Partially Paid
{
"account_id": "acc_MWWeS9Ico5tQBk",
"contains": [
"payment_link",
"order",
"payment"
],
"created_at": 1748425227,
"entity": "event",
"event": "payment_link.partially_paid",
"payload": {
"order": {
"entity": {
"account_number": null,
"amount": 1000,
"amount_due": 900,
"amount_paid": 100,
"app_offer": false,
"attempts": 1,
"authorized": true,
"bank": null,
"bank_account": null,
"checkout_config_id": null,
"created_at": 1748425233,
"currency": "SGD",
"customer_id": null,
"discount": false,
"first_payment_min_amount": 100,
"force_offer": null,
"id": "QaIpw7Vl1y4z8r",
"late_auth_config_id": null,
"merchant_id": "MWWeS9Ico5tQBk",
"method": null,
"notes": {
"Test": "True"
},
"offers": {},
"order_metas": [],
"order_relationships": [],
"partial_payment": true,
"payer_name": null,
"payment_capture": true,
"product_id": "QaIpqBWhd58CE3",
"product_type": "payment_link_v2",
"provider_context": null,
"public_key": "rzp_live_XXXXXXXXXXXXXX1",
"public_response": null,
"receipt": "NewTestPayment3",
"reference2": null,
"reference3": null,
"reference4": null,
"reference5": null,
"reference6": null,
"reference7": null,
"reference8": null,
"source": null,
"status": "attempted",
"transfers": null,
"updated_at": 1748425261
}
},
"payment": {
"entity": {
"acquirer_data": {
"rrn": "514825719592"
},
"amount": 100,
"amount_captured": null,
"amount_refunded": 0,
"amount_transferred": 0,
"bank": null,
"base_amount": 100,
"captured": true,
"card": null,
"card_id": null,
"contact": "<phone>",
"created_at": 1748425250,
"currency": "SGD",
"description": "#QaIpqBWhd58CE3",
"email": "<email>",
"entity": "payment",
"error_code": null,
"error_description": null,
"error_reason": null,
"error_source": null,
"error_step": null,
"fee": 2,
"fee_bearer": "platform",
"id": "pay_QaIqFEHBrZf3qL",
"international": false,
"invoice_id": null,
"method": "wallet",
"notes": {
"Test": "True"
},
"order_id": "order_QaIpw7Vl1y4z8r",
"provider": null,
"refund_status": null,
"reward": null,
"status": "captured",
"tax": 0,
"vpa": null
"wallet": "grabpay"
}
},
"payment_link": {
"entity": {
"accept_partial": true,
"amount": 1000,
"amount_paid": 100,
"callback_method": "get",
"callback_url": "https://example-callback-url.com/",
"cancelled_at": 0,
"created_at": 1748425227,
"currency": "SGD",
"customer": {
"contact": "<phone>",
"email": "<email>",
"name": "<name>"
},
"description": "Payment for policy no #23456",
"expire_by": 1748426427,
"expired_at": 0,
"first_min_partial_amount": 100,
"id": "plink_QaIpqBWhd58CE3",
"notes": {
"Test": "True"
},
"notify": {
"email": true,
"sms": true,
"whatsapp": false
},
"order_id": "order_QaIpw7Vl1y4z8r",
"reference_id": "NewTestPayment3",
"reminder_enable": true,
"reminders": {
"status": "failed"
},
"short_url": "https://rzp.io/rzp/nBwa0vq",
"status": "partially_paid",
"updated_at": 1748425262,
"upi_link": false,
"user_id": "",
"whatsapp_link": false
}
}
}
}
Payment Link Cancelled
{
"account_id": "acc_MWWeS9Ico5tQBk",
"contains": [
"payment_link"
],
"created_at": 1748425318,
"entity": "event",
"event": "payment_link.cancelled",
"payload": {
"payment_link": {
"entity": {
"amount": 1000,
"amount_paid": 0,
"callback_method": "get",
"callback_url": "https://example-callback-url.com/",
"cancelled_at": 1748425346,
"created_at": 1748425318,
"currency": "SGD",
"customer": {
"contact": "<phone>",
"email": "<email>",
"name": "<name>"
},
"description": "Payment for policy no #23456",
"expire_by": 1748426427,
"expired_at": 0,
"id": "plink_QaIrRSjWiIuxAO",
"notes": null,
"notify": {
"email": true,
"sms": true,
"whatsapp": false
},
"reference_id": "NewTestPayment4",
"reminder_enable": true,
"reminders": {
"status": "failed"
},
"short_url": "https://rzp.io/rzp/zIUYsg6E",
"status": "cancelled",
"updated_at": 1748425346,
"upi_link": false,
"user_id": "",
"whatsapp_link": false
}
}
}
}
Payment Link Expired
{
"account_id": "acc_MWWeS9Ico5tQBk",
"contains": [
"payment_link"
],
"created_at": 1748424975,
"entity": "event",
"event": "payment_link.expired",
"payload": {
"payment_link": {
"entity": {
"accept_partial": true,
"amount": 1000,
"amount_paid": 0,
"callback_method": "get",
"callback_url": "https://example-callback-url.com/",
"cancelled_at": 0,
"created_at": 1748424975,
"currency": "SGD",
"customer": {
"contact": "<phone>",
"email": "<email>",
"name": "<name>"
},
"description": "Payment for policy no #23456",
"expire_by": 1748426427,
"expired_at": 1748426438,
"first_min_partial_amount": 100,
"id": "plink_QaIlOGFf8KZNF8",
"notes": {
"Test": "True"
},
"notify": {
"email": true,
"sms": true,
"whatsapp": false
},
"reference_id": "NewTestPayment",
"reminder_enable": true,
"reminders": {
"status": "failed"
},
"short_url": "https://rzp.io/rzp/REnL57hV",
"status": "expired",
"updated_at": 1748424975,
"upi_link": false,
"user_id": "",
"whatsapp_link": false
}
}
}
}
Watch Out!
- If you have changed your webhook secret, remember to use the old secret for webhook signature validation while retrying older requests. Using the new secret will lead to a signature mismatch.
- While generating a signature at your end, ensure that the webhook body is passed as an argument in the raw webhook request body. Do not parse or cast the webhook request body.