Glow Loyalty webhooks allow you to receive real-time notifications about events related to your loyalty program. Use webhooks to keep your internal systems synced, trigger downstream processes, or build custom integrations. Please take a moment to check out our API documentation as well.
Once you've configured a webhook URL and secret in your Glow Loyalty account, Glow will send POST requests to your endpoint whenever one of the subscribed events occurs.
Each webhook request includes a header X-Glow-Hmac-Sha256
which contains a base64-encoded HMAC
signature of the request body
signed with your webhook secret. You should compute the HMAC on your end and compare it with the one provided by
Glow to confirm authenticity.
The following is a simple Node.js (Express) example that:
const express = require('express');
const crypto = require('crypto');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json({ type: '*/*' }));
// Your Glow Webhook Secret
const WEBHOOK_SECRET = 'YOUR_WEBHOOK_SECRET_HERE';
app.post('/my-webhook-endpoint', (req, res) => {
const signature = req.get('X-Glow-Hmac-Sha256');
const rawBody = JSON.stringify(req.body);
// Compute HMAC
const computedHmac = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(rawBody, 'utf8')
.digest('base64');
if (computedHmac !== signature) {
console.error('Invalid signature! Potential spoofed request.');
return res.status(401).send('Unauthorized');
}
// Signature is valid, proceed.
console.log('Received webhook event:', req.body.event);
console.log('Payload:', req.body.data);
res.status(200).send('OK');
});
app.listen(3000, () => console.log('Webhook listener running on port 3000'));
Your server must respond to a webhook request within 5 seconds, with the 200 response code. If it fails to do so, the webhook will be retried 9 more times over the next 24 hours. After the 10th attempt, webhooks will be disabled in your store. When the issue is resolved, you'll need to re-enable them manually in Settings.
A common best practice to prevent timeouts and other failures is storing webhooks in a message queue for later processing by a background worker. We recommend utilizing the Send Test Webhook event functionality to ensure everything is set up correctly.
Triggered when a new member joins the loyalty program.
{
"event": "MEMBER_NEW",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 50,
"lifetimePoints": 50,
"birthday": null,
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-08-23T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
"pointLog": {
"id": 99,
"customerId": 123,
"type": "signup",
"points": 200,
"orderId": null,
"orderTotal": 0,
"productRewardId": null,
"description": null,
"emailSent": true,
"createdAt": "2024-01-01T12:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z"
}
}
}
Triggered when a member places an order.
{
"event": "MEMBER_ORDER_PLACED",
"uuid": "550e8400-e29b-41d4-a716-446655440123",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 4110,
"lifetimePoints": 11630,
"birthday": null,
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-08-23T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
"pointLog": {
"id": 99,
"customerId": 123,
"type": "order",
"points": 200,
"orderId": 1234,
"orderTotal": 19.99,
"productRewardId": null,
"description": null,
"emailSent": true,
"createdAt": "2024-01-01T12:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z"
}
}
}
Triggered when a member earns points for a birthday.
{
"event": "MEMBER_AWARDED_BIRTHDAY_POINTS",
"uuid": "550e8400-e29b-41d4-a716-446655440222",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 4110,
"lifetimePoints": 11630,
"birthday": "07-21",
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-08-23T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
"pointLog": {
"id": 99,
"customerId": 123,
"type": "birthday",
"points": 200,
"orderId": null,
"orderTotal": 0,
"productRewardId": null,
"description": null,
"emailSent": true,
"createdAt": "2024-07-21T12:00:00Z",
"updatedAt": "2024-07-21T12:00:00Z"
}
}
}
Triggered when a member earns points for their anniversary.
{
"event": "MEMBER_AWARDED_ANNIVERSARY_POINTS",
"uuid": "550e8400-e29b-41d4-a716-446655440222",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 4110,
"lifetimePoints": 11630,
"birthday": "07-21",
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-07-21T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
"pointLog": {
"id": 99,
"customerId": 123,
"type": "anniversary",
"points": 200,
"orderId": null,
"orderTotal": 0,
"productRewardId": null,
"description": null,
"emailSent": true,
"createdAt": "2024-07-21T12:00:00Z",
"updatedAt": "2024-07-21T12:00:00Z"
}
}
}
Triggered when a member refers another member.
{
"event": "MEMBER_REFERRED",
"uuid": "550e8400-e29b-41d4-a716-446655440333",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customerBeingReferred": {
"id": 124,
"shopifyId": 7040200267,
"email": "[email protected]",
"firstName": "New",
"lastName": "Member",
"pointBalance": 0,
"lifetimePoints": 0,
"birthday": null,
"referralCode": "123abc",
"referredBy": "599cc8a",
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2024-01-01T12:00:00Z",
"updatedAt": "2024-01-01T12:00:00Z"
},
"customerThatIsReferring": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 4110,
"lifetimePoints": 11630,
"birthday": null,
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-08-23T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
}
}
}
Triggered when a member redeems a reward.
{
"event": "MEMBER_REDEEMED_REWARD",
"uuid": "45d8c2cc-5b02-4c1f-a135-cf97e26a5188",
"timestamp": "2024-12-18T02:28:57+00:00",
"data": {
"customer": {
"id": 82,
"shopifyId": 2344343965,
"email": "[email protected]",
"firstName": "Tom",
"lastName": "Soyer",
"pointBalance": 826,
"lifetimePoints": 28669,
"birthday": null,
"referralCode": "673f845406397",
"referredBy": null,
"multiplier": 1,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": "2024-11-21T19:04:52+00:00",
"lastDiscountsReminder": null,
"createdAt": "2024-11-21T19:04:52+00:00",
"updatedAt": "2024-12-18T02:28:55+00:00"
},
"discountCode": {
"id": 138,
"customerId": 82,
"shopifyId": 1598895259949,
"code": "xJru4kr",
"numUses": 0,
"usageLimit": 1,
"status": "unused",
"rewardId": 50,
"orderTotal": 0,
"orderSource": null,
"createdAt": "2024-12-18T02:28:55+00:00",
"updatedAt": "2024-12-18T02:28:55+00:00"
},
"reward": {
"id": 50,
"name": "$10 Off Coupon",
"points": 1,
"type": "fixed",
"minimum": 0,
"value": 10,
"applyTo": "all_orders",
"prefix": null,
"collectionId": null,
"productId": null,
"variantId": null,
"vipTier": 0,
"usageType": "unlimited",
"numUsesPerCustomer": 1,
"purchaseType": "both",
"combinesWithOrder": false,
"combinesWithProduct": false,
"combinesWithShipping": false,
"createdAt": "2024-11-20T16:21:00+00:00",
"updatedAt": "2024-12-18T02:21:53+00:00"
}
}
}
Triggered when a member redeems an automatic/product reward.
{
"event": "MEMBER_REDEEMED_AUTOMATIC_REWARD",
"uuid": "cdfeb3de-ffa5-42dd-aad2-d14042d3830f",
"timestamp": "2024-12-18T02:30:11+00:00",
"data": {
"customer": {
"id": 82,
"shopifyId": 34342424965,
"email": "[email protected]",
"firstName": "Tom",
"lastName": "Soyer",
"pointBalance": 825,
"lifetimePoints": 28669,
"birthday": null,
"referralCode": "673f845406397",
"referredBy": null,
"multiplier": 1,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": "2024-11-21T19:04:52+00:00",
"lastDiscountsReminder": null,
"createdAt": "2024-11-21T19:04:52+00:00",
"updatedAt": "2024-12-18T02:30:09+00:00"
},
"reward": {
"id": 53,
"name": "automatic",
"points": 1,
"type": "product",
"minimum": 0,
"value": 0,
"applyTo": "all_orders",
"prefix": null,
"collectionId": null,
"productId": 9732966252845,
"variantId": null,
"vipTier": 0,
"usageType": "unlimited",
"numUsesPerCustomer": 1,
"purchaseType": "both",
"combinesWithOrder": false,
"combinesWithProduct": false,
"combinesWithShipping": false,
"createdAt": "2024-12-18T02:29:49+00:00",
"updatedAt": "2024-12-18T02:29:49+00:00"
}
}
}
Triggered when a member has their points expired.
{
"event": "MEMBER_POINTS_EXPIRED",
"uuid": "550e8400-e29b-41d4-a716-446655440013",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 0,
"lifetimePoints": 11630,
"birthday": "07-21",
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-07-21T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
"pointLog": {
"id": 99,
"customerId": 123,
"type": "manual",
"points": -11630,
"orderId": null,
"orderTotal": 0,
"productRewardId": null,
"description": "Expiration",
"emailSent": true,
"createdAt": "2024-07-21T12:00:00Z",
"updatedAt": "2024-07-21T12:00:00Z"
}
}
}
Triggered when a member is sent a points reminder notification.
{
"event": "MEMBER_POINTS_REMINDER",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 50,
"lifetimePoints": 50,
"birthday": null,
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": "2018-04-06T01:35:35Z",
"lastDiscountsReminder": null,
"createdAt": "2017-08-23T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
}
}
Triggered when a member is sent a reminder for their unused discount codes.
{
"event": "MEMBER_DISCOUNT_CODE_REMINDER",
"uuid": "987f3a4b-6c24-4d55-9003-efd792c3e456",
"timestamp": "2024-12-18T03:00:00+00:00",
"data": {
"customer": {
"id": 82,
"shopifyId": 23245343,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bong",
"pointBalance": 826,
"lifetimePoints": 28669,
"birthday": null,
"referralCode": "673f845406397",
"referredBy": null,
"multiplier": 1,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": "2024-11-21T19:04:52+00:00",
"lastDiscountsReminder": "2024-11-21T19:04:52+00:00",
"createdAt": "2024-11-21T19:04:52+00:00",
"updatedAt": "2024-12-18T02:58:00+00:00"
},
"discountCodes": [
{
"id": 138,
"customerId": 82,
"shopifyId": 1598895259949,
"code": "xJru4kr",
"numUses": 0,
"usageLimit": 1,
"status": "unused",
"rewardId": 50,
"orderTotal": 0,
"orderSource": null,
"createdAt": "2024-12-18T02:28:55+00:00",
"updatedAt": "2024-12-18T02:28:55+00:00"
},
{
"id": 139,
"customerId": 82,
"shopifyId": 1598895259950,
"code": "yMne5ty",
"numUses": 0,
"usageLimit": 1,
"status": "unused",
"rewardId": 51,
"orderTotal": 0,
"orderSource": null,
"createdAt": "2024-12-18T02:29:55+00:00",
"updatedAt": "2024-12-18T02:29:55+00:00"
}
]
}
}
Triggered when a manual points adjustment is done for a member.
{
"event": "MEMBER_MANUAL_POINTS_ADJUSTMENT",
"uuid": "550e8400-e29b-41d4-a716-446655441232",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 0,
"lifetimePoints": 11630,
"birthday": "07-21",
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-07-21T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
"pointLog": {
"id": 99,
"customerId": 123,
"type": "manual",
"points": -11630,
"orderId": null,
"orderTotal": 0,
"productRewardId": null,
"description": null,
"emailSent": true,
"createdAt": "2024-07-21T12:00:00Z",
"updatedAt": "2024-07-21T12:00:00Z"
}
}
}
Triggered when a manual points adjustment is done for a member through the API.
{
"event": "MEMBER_MANUAL_POINTS_ADJUSTMENT_API",
"uuid": "550e8400-e29b-41d4-a716-446655441232",
"timestamp": "2024-01-01T12:00:00Z",
"data": {
"customer": {
"id": 123,
"shopifyId": 7040200266,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 0,
"lifetimePoints": 11630,
"birthday": "07-21",
"referralCode": "599cc8a",
"referredBy": null,
"multiplier": 1.00,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": null,
"lastDiscountsReminder": null,
"createdAt": "2017-07-21T00:12:58Z",
"updatedAt": "2018-04-09T01:35:35Z"
},
"pointLog": {
"id": 99,
"customerId": 123,
"type": "manual",
"points": -11630,
"orderId": null,
"orderTotal": 0,
"productRewardId": null,
"description": null,
"emailSent": true,
"createdAt": "2024-07-21T12:00:00Z",
"updatedAt": "2024-07-21T12:00:00Z"
}
}
}
Triggered when a custom reward submission state updates.
{
"event": "MEMBER_CUSTOM_REWARD_SUBMISSION_STATE",
"uuid": "abcd1234-5678-90ef-ghij-klmn543210",
"timestamp": "2024-12-18T04:00:00+00:00",
"data": {
"customer": {
"id": 82,
"shopifyId": 343443965,
"email": "[email protected]",
"firstName": "James",
"lastName": "Bond",
"pointBalance": 826,
"lifetimePoints": 28669,
"birthday": null,
"referralCode": "673f845406397",
"referredBy": null,
"multiplier": 1,
"currentVipTierId": null,
"currentVipTierName": null,
"lastPointsReminder": "2024-11-21T19:04:52+00:00",
"lastDiscountsReminder": null,
"createdAt": "2024-11-21T19:04:52+00:00",
"updatedAt": "2024-12-18T03:58:00+00:00"
},
"customReward": {
"id": 15,
"name": "Exclusive Membership",
"points": 500,
"recurring": false,
"description": "Redeemable for VIP access to events.",
"createdAt": "2024-11-01T10:00:00+00:00",
"updatedAt": "2024-12-01T12:00:00+00:00"
},
"submittedReward": {
"id": 25,
"customerId": 82,
"customRewardId": 15,
"approvalStatus": "approved",
"reason": null
}
}
}