Transactions
event_points_earned
The Points Awarded event occurs when a user or users are awarded loyalty points.
In the case of activities where moderation is required, the event occurs once the points have been approved.
Note: In the case of "submit_a_receipt" activity, the response will show "receipt_uid" in the "additional_data" field.
Request
We send events to your webhook's URL with POST and a JSON body. Events are batched: a request can carry several events of this type. See Receiving Webhooks for batch sizes and retries, and Webhook Event Signatures to verify the request.
Headers
| Header | Description |
|---|---|
x-zinrelo-signature | The HMAC-SHA512 hex digest of <request body>:<nonce>, computed with the webhook's secret key. See Webhook Event Signatures. |
nonce | The Unix time, in milliseconds, at which the request was signed. It's part of the signed message. |
Payload
| Field | Type | Description |
|---|---|---|
request_id | string | A unique identifier of this webhook request. |
total_count | integer | The number of events in the batch (events). |
created_date | string | When the webhook request was created, as MM/DD/YYYY HH:MM:SS. |
events | array of object | The events in this batch. |
events[].id | string | The unique identifier of the event. Use it to detect events you already processed. |
events[].event_type | string | The type of event. One of event_points_earned. |
events[].data | object | The event's data. |
events[].data.member_info (optional) | object | The member_info object of the event's data. Which fields are present depends on the event. |
events[].data.member_info.id (optional) | string | The internal ID generated by TrueLoyal. |
events[].data.member_info.first_name (optional) | string | The first name of the member. |
events[].data.member_info.last_name (optional) | string | The last name of the member. |
events[].data.member_info.email_address (optional) | string | The email address of the member. |
events[].data.member_info.address (optional) | object | |
events[].data.member_info.address.city (optional) | string | Member's city. |
events[].data.member_info.address.country (optional) | string | Member's country. |
events[].data.member_info.address.line2 (optional) | string | The member address. |
events[].data.member_info.address.line1 (optional) | string | The member address. |
events[].data.member_info.address.state (optional) | string | Member's state. |
events[].data.member_info.address.postal_code (optional) | string | Member's postal code. |
events[].data.member_info.phone_number (optional) | string | The phone number of the member. |
events[].data.member_info.member_id (optional) | string | The unique identifier of the member defined by an Admin. |
events[].data.member_info.member_status (optional) | string | The current status of the member- ‘active’ , ‘blocked’, ‘opted_out’. ‘active’ member is the one accumulating loyalty points and has access to rewards and earning opportunities. ‘blocked’ member is prohibited from participating in the program. ‘opted_out’ member is the one who has chosen to opt out of the loyalty program. |
events[].data.member_info.member_tags (optional) | array or string | The tags assocaited with a member. |
events[].data.member_info.number_of_purchases (optional) | integer | The number of purchases made by a member. |
events[].data.member_info.number_of_redemptions (optional) | integer | The number of redemptions made by a member. |
events[].data.member_info.birthdate (optional) | string | Birthdate of the loyalty member. Expected date format: MM/DD/YYYY or MM/DD Irrespective of the year passed, 1904 will be set as a default value. |
events[].data.member_info.churn_status (optional) | string | |
events[].data.member_info.enrollment_date (optional) | string | The date on which the member joined the loyalty program. |
events[].data.member_info.last_modified_date (optional) | string | The most recent date on which a member's profile was updated. |
events[].data.member_info.first_purchase_date (optional) | string | The first purchase date of the member. |
events[].data.member_info.instagram_handle (optional) | string | The instagram handle of the member. |
events[].data.member_info.last_purchase_date (optional) | string | The last purchase made by a member. |
events[].data.member_info.anniversary_date (optional) | string | The anniversary date of the member. Expected date format: MM/DD/YYYY or MM/DD In case, where a year has not been passed the default year will be set as 1904. |
events[].data.member_info.twitter_handle (optional) | string | The twitter handle of the member. |
events[].data.member_info.preferred_language (optional) | string | The preferred language of the member. |
events[].data.member_info.deprecated_fields (optional) | object | |
events[].data.member_info.deprecated_fields.user_id (optional) | string | |
events[].data.member_info.tier_info (optional) | object | |
events[].data.member_info.tier_info.tier_qualification_units (optional) | integer | |
events[].data.member_info.tier_info.current_period_start (optional) | string | The start date of the current tier cycle. |
events[].data.member_info.tier_info.loyalty_tier_name (optional) | string | The name of the current tier. |
events[].data.member_info.tier_info.qualified_points (optional) | integer | The qualified points for tier calculation. |
events[].data.member_info.tier_info.loyalty_tier_id (optional) | string | The unique tier ID stored in TrueLoyal. |
events[].data.member_info.tier_info.current_period_end (optional) | string or null | The end date of current tier cycle. |
events[].data.member_info.tier_info.qualifid_points (optional) | integer | |
events[].data.member_info.lifetime_points_earned (optional) | integer | The total points earned in a member's account since he joined the program. |
events[].data.member_info.lifetime_points_expired (optional) | integer | The total points expired from a member's account since he joined the program. |
events[].data.member_info.available_points (optional) | integer | The avaliable points of the member. |
events[].data.member_info.points_onhold (optional) | integer | |
events[].data.member_info.lifetime_points_deducted (optional) | integer | The total points deducted from a member's account since he joined the program. |
events[].data.member_info.lifetime_points_redeemed (optional) | integer | The total points redeemed from a member's account since he joined the program. |
events[].data.member_info.number_of_referral_purchase (optional) | integer | |
events[].data.member_info.number_of_referral_share (optional) | integer | |
events[].data.member_info.referral_URL (optional) | string | The unique referral url of the member. |
events[].data.member_info.custom_attributes (optional) | object | |
events[].data.member_info.custom_attributes.Nationality (optional) | string | |
events[].data.member_info.custom_attributes.City_Name (optional) | string | |
events[].data.member_info.custom_attributes.Marital_Status (optional) | string | |
events[].data.member_info.custom_attributes.Income_Source (optional) | string | |
events[].data.member_info.custom_attributes.Age_In_Years (optional) | string | |
events[].data.member_info.custom_attributes.Gender_Identity (optional) | string | |
events[].data.member_info.custom_attributes.Graduation_Date (optional) | string | |
events[].data.member_info.custom_attributes.Number of purchases (optional) | integer | |
events[].data.member_info.custom_attributes.Favourite Destination (optional) | string | |
events[].data.member_info.custom_attributes.Last traveled (optional) | string | |
events[].data.member_info.custom_attributes.Gender (optional) | string | |
events[].data.member_info.custom_attributes.List of favourite place (optional) | array of string | |
events[].data.member_info.custom_attributes.Review date (optional) | string | |
events[].data.member_info.custom_attributes.traveled destination (optional) | string | |
events[].data.member_info.custom_attributes.Preferences (optional) | string | |
events[].data.member_info.custom_attributes.Subscription Plan (optional) | string | |
events[].data.member_info.custom_attributes.Active Camera (optional) | integer | |
events[].data.member_info.revenue (optional) | integer | |
events[].data.member_info.aov (optional) | number or null | |
events[].data.member_info.deleted_date (optional) | null | |
events[].data.member_info.referral_code (optional) | string | The unique referral code of the member. |
events[].data.transaction_info (optional) | object | The transaction_info object of the event's data. Which fields are present depends on the event. |
events[].data.transaction_info.id (optional) | string | The unique internal ID generated by TrueLoyal. |
events[].data.transaction_info.transaction_type (optional) | string | The type of transaction- award, redeem or deduct. |
events[].data.transaction_info.member_id (optional) | string | The unique identifier of the member defined by an Admin. |
events[].data.transaction_info.transaction_attributes (optional) | object | |
events[].data.transaction_info.transaction_attributes.order_id (optional) | string | The unique ID associated with the placed order. This is system defined transaction attribute for "made_a_purchase" activity. |
events[].data.transaction_info.transaction_attributes.coupon_code (optional) | string | The coupon code used for the purchase of the product. This is system defined transaction attribute for "made_a_purchase" activity. |
events[].data.transaction_info.transaction_attributes.reason (optional) | string | The reason for making transaction. |
events[].data.transaction_info.transaction_attributes.tags (optional) | array or string | |
events[].data.transaction_info.transaction_attributes.products (optional) | array of object | |
events[].data.transaction_info.transaction_attributes.products[].product_id (optional) | string | |
events[].data.transaction_info.transaction_attributes.products[].product_price (optional) | string | |
events[].data.transaction_info.transaction_attributes.products[].product_title (optional) | string | |
events[].data.transaction_info.transaction_attributes.products[].product_category (optional) | string | |
events[].data.transaction_info.transaction_attributes.products[].product_quantity (optional) | string | |
events[].data.transaction_info.transaction_attributes.products[].product_url (optional) | string or null | |
events[].data.transaction_info.transaction_attributes.products[].is_excluded (optional) | boolean | |
events[].data.transaction_info.transaction_attributes.products[].bonus_multiplier (optional) | integer | |
events[].data.transaction_info.transaction_attributes.products[].product_points_per_quantity (optional) | integer | |
events[].data.transaction_info.transaction_attributes.products[].product_image_url (optional) | string | |
events[].data.transaction_info.transaction_attributes.source_of_redemption (optional) | string | |
events[].data.transaction_info.transaction_attributes.pow_01 (optional) | null | |
events[].data.transaction_info.transaction_attributes.order_subtotal (optional) | integer | |
events[].data.transaction_info.transaction_attributes.order_total (optional) | integer | |
events[].data.transaction_info.transaction_attributes.coupons (optional) | string | |
events[].data.transaction_info.transaction_attributes.currency (optional) | string | |
events[].data.transaction_info.approver_details (optional) | object | |
events[].data.transaction_info.approver_details.approver_id (optional) | null | |
events[].data.transaction_info.approver_details.approver_name (optional) | string | |
events[].data.transaction_info.approved_date (optional) | string | The date and time on which the transaction will be approved. |
events[].data.transaction_info.last_modified_date (optional) | string | The most recent date on which a transaction was updated. |
events[].data.transaction_info.created_date (optional) | string | The date and time on which the transaction was created. |
events[].data.transaction_info.award_info (optional) | object | These data are system-defined for award transactions. |
events[].data.transaction_info.award_info.activity_id (optional) | string | The unique ID of the activity assigned by TrueLoyal. |
events[].data.transaction_info.award_info.activity_name (optional) | string | The activity name stored with TrueLoyal. |
events[].data.transaction_info.award_info.points_status (optional) | string | The status of the points- 'pending', 'approved', 'rejected', 'auto_approved', 'auto_rejected', 'expired' or 'exhausted.' |
events[].data.transaction_info.award_info.points (optional) | integer | The number of points awarded for performing the activity. |
events[].data.transaction_info.points_expiration_date (optional) | string | The date and time when points expire. |
events[].data.transaction_info.auto_approval_date (optional) | string | The date and time on which the transaction will be auto-approved. It can be configured through the Admin Console > Activities > Settings > Approval Type. This is a system-defined field for award transactions. |
events[].data.transaction_info.reward_info (optional) | object | These data are system-defined for reward transactions. |
events[].data.transaction_info.reward_info.reward_id (optional) | string | The unique reward ID assigned by TrueLoyal. |
events[].data.transaction_info.reward_info.reward_name (optional) | string | The name of the reward stored in TrueLoyal. |
events[].data.transaction_info.reward_info.points_status (optional) | string | The status of the points- 'redeemed,' redemption_pending' or 'redemption_cancelled.' |
events[].data.transaction_info.reward_info.points (optional) | integer | The number of points redeemed by the member. |
events[].data.transaction_info.reward_info.coupon_code (optional) | string | The coupon code used for redemption. |
events[].data.transaction_info.reward_info.reward_link (optional) | null | The link to flexi reward. Instead of asking members to choose from a fixed set of rewards, loyalty points can be used as a currency and members can redeem any number of points they have from their account for a corresponding discount on their transactions. |
events[].data.transaction_info.deduct_info (optional) | object | These data are system-defined for deduct transactions. |
events[].data.transaction_info.deduct_info.points_status (optional) | string | The status of the points- 'redeemed,' redemption_pending' or 'redemption_cancelled.' |
events[].data.transaction_info.deduct_info.points (optional) | integer | The number of points redeemed by the member. |
events[].data.transaction_info.expiry_info (optional) | object | |
events[].data.transaction_info.expiry_info.points_status (optional) | string | The status of the points- 'redeemed,' redemption_pending' or 'redemption_cancelled.' |
events[].data.transaction_info.expiry_info.points (optional) | integer | The number of points redeemed by the member. |
Example
{
"request_id": "638706181f4a31001225c480",
"total_count": 2,
"events": [
{
"id": "6387061987c5ca4b159b8377",
"event_type": "event_points_earned",
"data": {
"member_info": {
"id": "63805bc5d34967000d6a2c7f",
"first_name": "Anna",
"last_name": "Scott",
"email_address": "annascott286@gmail.com",
"address": {
"city": "Palo Alto",
"country": "US",
"line2": "530 Lytton Ave",
"line1": "Suite #200",
"state": "CA",
"postal_code": "94301"
},
"phone_number": "+1-6507017134",
"member_id": "annascott46778",
"member_status": "active",
"member_tags": "earnedpoints",
"number_of_purchases": 13,
"number_of_redemptions": 4,
"birthdate": "07/16/1986 00:00:00",
"enrollment_date": "11/25/2022 00:00:00",
"last_modified_date": "11/30/2022 00:00:00",
"first_purchase_date": "11/25/2022 00:00:00",
"instagram_handle": "www.instagram.com/anna",
"last_purchase_date": "11/30/2022 00:00:00",
"anniversary_date": "12/06/2014 00:00:00",
"twitter_handle": "www.twitter.com/anna",
"preferred_language": "English",
"deprecated_fields": {
"user_id": "abgjdyo2"
},
"tier_info": {
"tier_qualification_units": 100,
"current_period_start": "03/01/2022 00:00:00",
"loyalty_tier_name": "Silver",
"qualifid_points": 13,
"loyalty_tier_id": "zrl_silver",
"current_period_end": "02/28/2023 23:59:59"
},
"referral_code": "TES7GQL4",
"lifetime_points_earned": 514116,
"lifetime_points_expired": 0,
"available_points": 485762,
"points_onhold": 10,
"lifetime_points_deducted": 0,
"lifetime_points_redeemed": 28354,
"number_of_referral_purchase": 0,
"number_of_referral_share": 0,
"referral_URL": "https://zinrelo.com/ref/TES7GQL4",
"custom_attributes": {
"City_Name": "Paris",
"Marital_Status": "Married",
"Income_Source": "Service",
"Age_In_Years": "45",
"Gender_Identity": "Female",
"Graduation_Date": "15/12/1989 00:00:00"
},
"revenue": 13,
"aov": null,
"deleted_date": null
},
"transaction_info": {
"id": "63805bc7d34967000c755c8d",
"transaction_type": "award",
"member_id": "annascott46778",
"transaction_attributes": {
"order_id": "order11990845",
"coupon_code": "3199",
"reason": "earnedpoints",
"tags": "pointsawarded",
"products": [
{
"product_id": "prod21",
"product_price": "10",
"product_title": "Shoes",
"product_category": "Puma,shkoes,adi!@#",
"product_quantity": "1",
"product_url": "http://www.website.com/product1.html",
"is_excluded": false,
"bonus_multiplier": 0,
"product_points_per_quantity": 10,
"product_image_url": "https://nyoobserver.files.wordpress.com/2014/03/walking-stick.jpg"
},
{
"product_id": "prod1m",
"product_price": "10",
"product_title": "Stick",
"product_category": "mugs,cups,sale",
"product_quantity": "1",
"product_url": "http://www.website.com/product1.html",
"is_excluded": false,
"bonus_multiplier": 0,
"product_points_per_quantity": 10,
"product_image_url": "https://nyoobserver.files.wordpress.com/2014/04/walking-stick.jpg"
},
{
"product_id": "prod2m",
"product_price": "10",
"product_title": "Stick",
"product_category": "mugs,cups,sale, floor, refresh",
"product_quantity": "1",
"product_url": "http://www.website.com/product1.html",
"is_excluded": false,
"bonus_multiplier": 0,
"product_points_per_quantity": 10,
"product_image_url": "https://nyoobserver.files.wordpress.com/2014/03/walking-stick.jpg"
}
]
},
"approver_details": {
"approver_id": null,
"approver_name": "System"
},
"approved_date": "11/30/2022 07:28:23",
"last_modified_date": "11/30/2022 07:28:23",
"created_date": "11/30/2022 06:08:07",
"award_info": {
"activity_id": "made_a_purchase",
"activity_name": "Purchase on website",
"points_status": "approved",
"points": 1
},
"points_expiration_date": "12/07/2022 14:54:58",
"auto_approval_date": ""
}
}
},
{
"id": "6387061987c5ca4b159b8378",
"event_type": "event_points_earned",
"data": {
"member_info": {
"id": "63805bc5d34967000d6a2c7f",
"first_name": "John",
"last_name": "Doe",
"email_address": "johndoe@gmail.com",
"address": {
"city": "Palo Alto",
"country": "US",
"line2": "537 Lytton Ave",
"line1": "Suite #200",
"state": "CA",
"postal_code": "94307"
},
"phone_number": "+1-6507017759",
"member_id": "john.doe23",
"member_status": "active",
"member_tags": "pointsawarded",
"number_of_purchases": 13,
"number_of_redemptions": 4,
"birthdate": "08/26/1986 00:00:00",
"enrollment_date": "11/25/2022 00:00:00",
"last_modified_date": "11/30/2022 00:00:00",
"first_purchase_date": "11/25/2022 00:00:00",
"instagram_handle": "www.instagram.com/john",
"last_purchase_date": "11/30/2022 00:00:00",
"anniversary_date": "12/06/2014 00:00:00",
"twitter_handle": "www.twitter.com/john",
"preferred_language": "English",
"deprecated_fields": {
"user_id": "abgjdyo2"
},
"tier_info": {
"current_period_start": "03/01/2022 00:00:00",
"loyalty_tier_name": "Silver",
"qualified_points": 13,
"loyalty_tier_id": "zrl_silver",
"current_period_end": "02/28/2023 23:59:59"
},
"referral_code": "TES7GQL4",
"lifetime_points_earned": 514116,
"lifetime_points_expired": 0,
"available_points": 485762,
"lifetime_points_deducted": 0,
"lifetime_points_redeemed": 28354,
"referral_URL": "https://zinrelo.com/ref/TES7GQL4",
"number_of_referral_purchase": 0,
"number_of_referral_share": 0,
"custom_attributes": {
"City_Name": "Paris",
"Marital_Status": "Married",
"Income_Source": "Business",
"Age_In_Years": "35",
"Gender_Identity": "Male",
"Graduation_Date": "03/12/2000 00:00:00"
},
"revenue": 13,
"aov": 1.8,
"deleted_date": null
},
"transaction_info": {
"id": "63805f2b04d91e0012341d8f",
"transaction_type": "award",
"member_id": "john.doe23",
"transaction_attributes": {
"reason": "pointearned",
"tags": []
},
"approver_details": {
"approver_id": null,
"approver_name": "System"
},
"approved_date": "11/30/2022 07:28:23",
"last_modified_date": "11/30/2022 07:28:23",
"created_date": "11/25/2022 06:22:35",
"award_info": {
"activity_id": "referral",
"activity_name": "Refer a Friend",
"points_status": "approved",
"points": 9999
},
"points_expiration_date": "12/07/2022 14:54:58",
"auto_approval_date": ""
}
}
}
],
"created_date": "11/30/2022 07:28:24"
}Responses
| Status | Description |
|---|---|
200 | Acknowledges receipt of the events. Return 200 as soon as you receive the request and process the events afterwards, so the request doesn't time out. |
| Other | Any status code other than 200 is a failure: the request is sent again every 5 minutes until your endpoint returns 200 or the maximum number of attempts (5 by default) is reached. Your Customer Success Manager can change these settings. |