Events
Postscript is an SMS platform. These events only trigger automations for customers who are SMS subscribers, matched by their Shopify Customer ID. If a customer has not opted in to SMS, the event still fires but no message is sent.
Points Awarded
Fired when a customer earns points through purchases, actions, or other earning rules.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| number | Number of points earned |
| string | Name of the earning rule (or "Manual") |
| string | Status of the earning (e.g. |
| string (optional) | Shopify order number, if points were earned from a purchase |
A note on property keys. Every event property key uses hyphens instead of spaces (for example Reward-Name), because Postscript SMS merge tags cannot reference keys that contain spaces. Reference any property in a template with its key, such as {{ Reward-Name }}.
Points Pending
Fired when points are recorded in a pending state. The points are awarded later, once the refund or approval window has passed.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| number | Points that will be awarded once approved |
| string | Name of the earning rule (or "Manual") |
| string | Status of the earning ( |
| string (optional) | Shopify order number, if points were earned from a purchase |
Points Pending mirrors Points Awarded and uses the same keys, referenced with merge tags such as {{ Points-Awarded }}.
Bonus Points Awarded
Fired when a customer earns flat bonus points from a tiered bonus campaign. This is a separate award from the standard points earned on the order.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| number | Number of bonus points awarded |
| string | Name of the bonus campaign |
| number | Amount the customer spent that qualified for the bonus |
| number | Spend threshold the customer reached to earn the bonus |
| string | Status of the earning (e.g. |
| string (optional) | Shopify order number |
Reference a property in an SMS template with its key, for example {{ Bonus-Points }}.
Reward Redeemed
Fired when a customer redeems their points for a reward or discount.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| string | Name of the reward redeemed |
| number | Number of points spent (0 if null) |
| string | Type of discount (e.g. |
VIP Tier Changed
Fired when a customer moves up or down VIP tiers based on their lifetime points.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| string | Name of the tier the customer moved to |
| string (optional) | Name of the previous tier, if applicable |
Referral Invite Sent
Fired when an advocate sends a referral email invite to a friend.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: The advocate, matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| string | Email address the invite was sent to |
| string | Name of the referral campaign |
| string | Name of the advocate who sent the invite |
| string | The advocate's shareable referral link |
| string | Store name |
| string | Store domain |
| string | Always |
The email subject and personal message are intentionally omitted, because long free text is not useful as an SMS merge tag. Reference a property with its key, for example {{ Referral-URL }}.
Referral Claimed
Fired when a friend claims their referral discount code.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: The friend, matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| string | Discount code issued to the friend |
| string | Type of discount (e.g. |
| number | Discount value (0 if not set) |
| string | Name of the referral campaign |
| string | Name of the reward |
| string (optional) | Advocate's email, if known |
| string (optional) | Advocate's name, if known |
| string | Store name |
| string | Store domain |
Reference a property with its key, for example {{ Discount-Code }}.
Referral Reward Earned
Fired when an advocate earns their reward after their friend completes a qualifying purchase.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: The advocate, matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| string | Email of the friend whose purchase triggered the reward |
| string | Reward code issued to the advocate |
| string | Type of discount (e.g. |
| number | Discount value (0 if not set) |
| string | Name of the reward |
| string | Name of the referral campaign |
| string | Store name |
| string | Store domain |
Reference a property with its key, for example {{ Discount-Code }}.
Points Expiry Soon
Fired when a customer has loyalty points expiring within the next 7 days. This event is triggered once per customer per 7-day window — multiple earning rules expiring on different days are aggregated into a single event to prevent duplicate notifications.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| number | Total points expiring within the next 7 days (aggregated across all earning rules) |
| number | Customer's current point balance at the time the event fires |
| number | Days until the earliest expiring points (e.g. |
| string | Customer's first name (or "there" if not set) |
Suggested automation setup
In Postscript, go to Automations > Create Automation
Set the trigger to the Points_Expiry_Soon event
Add a Send SMS action with your expiry reminder message
Use the event properties above to personalize the message
Example SMS
Hey {{ Customer-Name }}, you have {{ Points-Expiring }} points expiring in {{ Days-Until-Expiry }} days! Shop now to use them before they're gone.
Gift Reminder
Fired by the daily gift reminders cron for each upcoming occasion a customer has saved.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| string | Name of the gift recipient |
| string | Relationship to the recipient (e.g. Partner, Friend) |
| string | Type of occasion (e.g. Birthday, Anniversary) |
| string | Occasion date in |
| number | Days remaining until the occasion |
| number | Which reminder in the sequence this is (e.g. |
| string | Customer's first name |
| string | Store domain |
| string (optional) | Discount code created for this reminder, if any |
Reference a property with its key, for example {{ Recipient-Name }}.
Birthday
Fired by the daily birthday cron when a customer earns their birthday points.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| string | Customer's first name |
| string | Store name |
| number | Birthday points awarded |
| number | Customer's point balance after the award |
Reference a property with its key, for example {{ Points-Earned }}.
Cashback Credited
Store-credit cashback awarded.
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| number | Cashback value in the store's currency |
| string | Formatted cashback amount (e.g. |
| string | ISO currency code (e.g. |
| string | Name of the cashback offer |
| string | Shopify order number |
| string | Always |
| string (optional) | ISO timestamp when the cashback expires, if set |
Reference a property with its key, for example {{ Cashback-Amount-Formatted }}.
Cashback Code Issued
Cashback issued as a single-use discount code, including a reissue after a partial refund (a new code with a reduced amount).
This event is OFF by default. Merchants must enable it in Settings > Integrations > Postscript before it will fire.
Subscriber: Matched by Shopify Customer ID (fallback: email)
Property | Type | Description |
| number | Cashback value in the store's currency |
| string | Formatted cashback amount (e.g. |
| string | ISO currency code (e.g. |
| string | Name of the cashback offer |
| string | Shopify order number |
| string | Always |
| string | Single-use cashback discount code |
| string (optional) | ISO timestamp when the cashback expires, if set |
Reference a property with its key, for example {{ Discount-Code }}.
Subscriber Properties
In addition to events, Mage syncs the following properties to each Postscript subscriber. These can be used in segments and SMS personalization.
Property | Example Value | Description |
|
| Customer's current spendable points |
|
| Total points ever earned |
|
| Total points spent on rewards |
|
| Current VIP tier (e.g. Bronze, Silver, Gold) |
|
| Customer's date of birth, if provided |
|
| When the customer joined the loyalty program |
|
| Cash value of the current points balance, based on your flexible reward's conversion rate. Only synced when an active flexible reward exists. |
|
| The next VIP tier the customer has not reached yet. Empty when the customer is already in the highest tier. |
|
| How much more the customer needs in order to reach that next tier. Empty when the customer is already in the highest tier. |
Mage Amount To Next Vip Tier is measured in whatever your VIP tiers are based on: points, amount spent, or number of orders. If your tiers are points based, a value of 380 means the customer needs 380 more points. If your tiers are spend based, it means 380 more in your store currency. When your program uses more than one tier requirement, this amount reflects your primary requirement.
Both properties are only synced when VIP tiers are enabled on your loyalty program. Customers who have already reached your highest tier receive an empty value for both, so you can segment on that to find your top tier members.
