init -> active -> completed | expired.active, skipping the init state. Only one webhook notification is sent at this stage.completed. This sub-order can be linked back to the original Permanent Payment Link using the referencePaymentId field.{
"eventId": "string",
"eventType": "PAYMENT_LINK_UPDATED",
"timestamp": 0,
"data": {
"paymentId": "string",
"referencePaymentId": "string",
"productRemark": "string",
"userOrderNo": "string",
"recipientName": "string",
"recipientAccountId": "string",
"fiatCurrency": "string",
"fiatAmount": "string",
"cryptoCurrency": "string",
"cryptoAmount": "string",
"quotePrice": "string",
"supportCurrency": "string",
"supportNetwork": "string",
"payerInfo": {
"payerNameUnavailable": true
},
"returnUrl": "http://example.com",
"status": "init",
"paymentLinkType": "permanent",
"paymentValidTime": 1,
"paymentLink": "http://example.com",
"effectiveTime": 0,
"expiresTime": 0,
"createTime": 0
}
}curl --location 'https://your-api-server.com' \
--header 'API-KEY: apikey ' \
--header 'API-TIMESTAMP: 1765454475759' \
--header 'API-SIGNATURE: d110004016a3cf2bfa06d57eaf850618c143f8aeb6e528882bd3811b2b988160' \
--header 'X-BPN-API-KEY: <api-key>' \
--header 'X-BPN-SIGNATURE: <api-key>' \
--header 'X-BPN-TIMESTAMP: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"eventId": "string",
"eventType": "PAYMENT_LINK_UPDATED",
"timestamp": 0,
"data": {
"paymentId": "string",
"referencePaymentId": "string",
"productRemark": "string",
"userOrderNo": "string",
"recipientName": "string",
"recipientAccountId": "string",
"fiatCurrency": "string",
"fiatAmount": "string",
"cryptoCurrency": "string",
"cryptoAmount": "string",
"quotePrice": "string",
"supportCurrency": "string",
"supportNetwork": "string",
"payerInfo": {
"payerNameUnavailable": true
},
"returnUrl": "http://example.com",
"status": "init",
"paymentLinkType": "permanent",
"paymentValidTime": 1,
"paymentLink": "http://example.com",
"effectiveTime": 0,
"expiresTime": 0,
"createTime": 0
}
}'{}