Bazaarvoice Syndication Feature Document

Written By Devin O'Neill ()

Updated at April 17th, 2025

Summary

We, at Annex Cloud, are a leading software company specializing in delivering comprehensive customer loyalty solutions, referral marketing platforms, and customer retention tools. Our core offering, the Loyalty Experience Platform, is a robust cloud-based software suite designed to help businesses cultivate and nurture customer loyalty. Through our platform, companies can effectively manage loyalty programs, incentivize repeat purchases, and personalize customer experiences to foster long-term engagement and brand loyalty.

The integration of Annex Cloud loyalty with BazaarVoice provides a comprehensive solution for rewarding customers based on moderated reviews.

Annex Cloud retrieves the latest moderated data from BazaarVoice. When a customer purchases a product, they typically write a review on the retailer's website. This review data is sent to BazaarVoice using their available APIs, after which Annex Cloud pulls the moderated data from BazaarVoice.

Annex Cloud then validates customers' loyalty and awards points based on the approved moderated data.

Pre-requisites

  1. Client's conversation API key - To retrieve member data.
  2. Client's shared secret API key - To decrypt email addresses.

Configuration with Annex Cloud

Site Administrator Instructions:

  • Enable the Ratings and Review action. 
    • Navigate to the Actions section.
    • Select Create new Action.
    • From the list of available actions, choose Ratings and Reviews.
    • Enter the number of points that members will earn for completing this action.
    • Save the advanced settings.

Configuration in Bazaarvoice Admin 

You need to follow the following process before sending the members' data to the Annex Cloud database to award points.

  • Log in to BazaarVoice’s instance.
  • Select the Workbench option from the menu, as shown below:
  • Choose one of the two available options from the drop-down list: annexcloud (STAGING) or annexcloud (PRODUCTION).
  • Navigate through the instance to check the Dashboards, Reports, Alerts, and Resources. The administrator can create and manage reports, analyze content trends, and view key performance indicators. Below is an image of what BazaarVoice's staging environment looks like:
  • To manage content, click the Content tab and select Ratings & Reviews in the Manage Content section.
  • After clicking on Ratings & Reviews, all members' ratings and reviews will be displayed as illustrated in the image below.
  • The administrator has the option to approve or reject each review. Additionally, the administrator can respond to the review and, if needed, email the review to multiple stakeholders.
  • The administrator can view a member's review in detail by clicking the Show Detail icon, as shown in the image below.
  • The image below shows the review selected above in detail.

Annex Cloud Configuration to Pull the Moderated Data 

  1. You can use this method to retrieve members' data from the Bazaarvoice conversation API by providing the following details:
{ 
    "Limit": 10, 
    "Offset": 0, 
    "Total Results": 68, 
    "Locale": "en_US", 
    "Results": [ 
        { 
            "Id": "46082471", 
            "CID": "173ba849-6e4a-5d9a-b76f-fdbef8c81af6", 
            "SourceClient": "test-annexcloud", 
            "LastModeratedTime": "2023-04-04T11:00:02.000+00:00", 
            "LastModificationTime": "2023-04-04T11:00:02.000+00:00", 
            "ProductId": "demo-product-1", 
            "AuthorId": "me439vw65lljz6fdkvmfrwotf", 
            "ContentLocale": "en_US", 
            "IsFeatured": false, 
            "TotalInappropriateFeedbackCount": 0, 
            "TotalClientResponseCount": 0, 
            "TotalCommentCount": 0, 
            "Rating": 5, 
            "IsRatingsOnly": true, 
            "TotalFeedbackCount": 0, 
            "TotalNegativeFeedbackCount": 0, 
            "TotalPositiveFeedbackCount": 0, 
            "ModerationStatus": "APPROVED", 
            "SubmissionId": "r210553_1__16806059bEVJERkpKo", 
            "SubmissionTime": "2023-04-04T10:58:36.000+00:00", 
            "UserNickname": "jimmy sinek", 
            "UserEmailAddress": "0eGkCOLTAjRxwM38N8Qg/p7Z7ruhbxjJfcQKxzURlHs=", 
            "ReviewText": null, 
            "SecondaryRatingsOrder": [], 
            "AdditionalFields": {}, 
            "Badges": {}, 
            "Photos": [], 
            "InappropriateFeedbackList": [], 
            "ProductRecommendationIds": [], 
            "ContextDataValues": {}, 
            "Pros": null, 
            "SecondaryRatings": {}, 
            "UserLocation": null, 
            "CommentIds": [], 
            "IsSyndicated": false, 
            "AdditionalFieldsOrder": [], 
            "CampaignId": null, 
            "Title": null, 
            "ContextDataValuesOrder": [], 
            "Helpfulness": null, 
            "TagDimensions": {}, 
            "RatingRange": 5, 
            "BadgesOrder": [], 
            "IsRecommended": null, 
            "ClientResponses": [], 
            "Cons": null, 
            "TagDimensionsOrder": [], 
            "Videos": [] 
        } 
] 
}
  1. The following conditions must be set to take the data:
    • ModerationStatus = APPROVED (Equal To) 
    • LastModeratedTime != TodaysDate (Not Equal To) 

Only data with an approved moderation status will be retrieved.

  1. After applying the conditions mentioned above, extract the encoded email from the filtered data. Use the client decryption code to decode it and verify whether the member’s email address is opted in. If the customer is not opted in, their data cannot be retrieved.

API to Retrieve Member details

This API method is used to fetch all the information for a loyalty member by passing the unique ID of the member.

  • Method- GET: /users/{{memberId}}
  • Function Location In Extension- ANNEXCLOUDV3SERVICE 

Response:

Upon providing the unique member ID in the request body, the following parameters will be displayed in the response:

Field Type Description Example
id string Displays the unique ID of the loyalty member. jacklee2023
email string Displays the email address of the loyalty member. jacklee2023@gmail.com
 
firstName string Displays the first name of the loyalty member. John
lastName string Displays the last name of the loyalty member. Deo
zipCode string Displays the zip code of the loyalty member's residence. 51750
optInStatus string

Displays the opt-in status as YES for opt-in or NO for opt-out.

The default opt-in status is YES.

YES
status string

Displays the loyalty member’s status as active or inactive.

By default, it is active and can be changed to inactive as per the client’s request.

ACTIVE
phone string Displays the phone number of the loyalty member. 123-123-4567
birthDate string Displays the date of birth of the loyalty member in yyyy-MM-dd format. 1989-12-11
anniversaryDate string Displays the loyalty member's anniversary date, which can be their birthdate, the date they joined the loyalty program or marriage date in yyyy-MM-dd format. 2023-12-11
userProfileImageUrl string Displays the image URL for the loyalty member's profile picture. https://www.socialannex.com/public/manageoptionsdesign16/images/product_landing/loyalty-hover.png
 
createDate string Displays the date and time in yyyy-MM-dd’T’HH:mm:ssZ format on which the loyalty member was created. 2021-08-08 07:00:12
updateDate string Displays the date and time in yyyy-MM-dd’T’HH:mm:ssZ format on which the loyalty member was updated. 2022-08-08 07:00:12
totalSpendCurrency integer Displays the total currency spent by the loyalty member. 134
extendedAttribute object Displays the extended user attributes that are established in your program configuration. User role, location, and uid.

Sample Positive Response:

Status code  Response 
200 

An example of a positive response is: 

"id": "user@domain.com", 

"email": "user@domain.com", 

"firstName": "John", 

"lastName": "Doe", 

"zipCode": "90002", 

"optInStatus": "YES", 

"status": "ACTIVE", 

"phone": "123-123-4567", 

"birthDate": "2018-04-01T00:00:00-0700", 

"anniversaryDate": "2018-04-01T00:00:00-0700", 

"userProfileImageUrl": "https://www.socialannex.com/public/manageoptionsdesign16/images/product_landing/loyalty-hover.png", 

"createDate": "2018-04-01T00:00:00-0700", 

"updateDate": "2018-04-01T00:00:00-0700", 

"totalSpendCurrency": "150", 

"extendedAttribute": ["KEY1": "VALUE1", "KEY2": "VALUE2"] 

  • ErrorCode: This attribute is shown only when an API request fails and indicates the type of error that occurred during the request.
  • ErrorMessage: When an API request fails, this attribute explains the reason for the failure, providing more information about the error.
 

Sample Error Response: 

Status code  Response 
AC1002 / AC1005 

"errorCode": "AC1002", 

"errorMessage": "Request Not Authorized" 

 
 

If Data is not found!! 

"errorCode": "AC1005", 

"errorMessage": "No data found" 

Process to Award Points to Members

If a member is found in the above API, points are awarded to them using the APIs listed below.

Method  URL 
POST  /points 

To Award Points

Field Type Presence Description Example
id string Required Enter the unique ID for the member. johan19.sa@gmail.com
 
actionId string Required Enter the unique action ID of the action for which points are being awarded to the member. For example, the action ID for manual credit is 100. 100
activity string Required Enter credit in the activity field to indicate that the points are awarded to the member’s account. credit
credit integer Required Enter the number of points credited to the member’s account for performing the action. 435
campaignId integer Optional Enter the campaign ID of the campaign associated with the points. (The campaign ID needs to be entered only if the points being awarded are associated with campaign benefits.) 12345
orderId string Optional Enter the loyalty member's order ID. A12345
reason string Optional Enter the reason for crediting points to the member’s account. bonus

To Redeem Rewards

id string Required Enter the unique ID for the member. johan19.sa@gmail.com
 
rewardId string Required Enter the specific reward ID that the member wants to claim or redeem. The reward should be configured in the site admin. 121
activity string Required Enter debit in the activity field to indicate that the member is redeeming their points. debit
orderId string Optional Enter the loyalty member's order ID. A12345
reason string Optional Enter the reason for deducting points from the member’s account. points redeemed for discount
source string Optional Enter the source from where the member performed the transaction. For example, Web or App. web

To Redeem Custom Points

Field Type Presence Description Example
id string Required Enter the unique ID for the member. johan19.sa@gmail.com
 
activity string Required Enter debit in the activity field to indicate that the member is redeeming their custom points. debit
orderId string Optional Enter the loyalty member's order ID. A12345
debit integer Required Enter the number of points debited from the member’s account for redeeming custom points by performing the redemption action. 121
reason string Optional Enter the reason for removing points from the member’s account to redeem custom points. custom points redeemed for discount
source string Optional Enter the source from where the member performed the transaction. For example, Web or App. web

To Award or Deduct Custom Points from a member’s account.

Custom points are not predefined in the system; instead, they are set and managed based on specific member-defined criteria or rules. These points can be awarded or deducted according to custom parameters.

Field Type Presence Description Example
id string Required Enter the unique ID for the member. johan19.sa@gmail.com
 
actionId string Required Enter the unique action ID for which you are awarding or deducting custom points for the member. For example, the action ID for manual credit or debit is 100. 100
activity string Required Enter the name of the action to either award or deduct custom points. In this case, the action name is either credit (if awarding) or debit (if deducting). credit or debit
orderId string Optional

Enter the loyalty member's order ID.

In order to associate points with an activity involving both credit and debit, the member’s order ID needs to be entered.

A12345
credit or debit integer Required Enter the number of custom points that will be credited to the member’s account or debited from the member’s account. 435
reason string Optional Enter the reason for awarding custom points to the member’s account or deducting custom points from the member’s account. bonus

Sample Request: 

Response: 

This provides a successful response detailing the points added or redeemed from the member's account.

id string Displays the unique ID of the member. johan19.sa@gmail.com
 
actionId integer Displays the unique action ID of the action for which the member is being awarded points. 100
activity string Displays credit when points are awarded to the member’s account. credit
credit integer Displays the number of points credited into the member’s account for performing the action. 50
pointsAwarded integer Displays the number of points awarded to the member’s account for performing the action. 50
reason string Displays the reason for awarding points to the member’s account. bonus
updatedUserTier string Displays the member’s updated tier after the points are awarded to the member’s account. gold
updatedAvailablePoints integer Displays the updated number of available points in the member’s account after points have been awarded. 4545
updatedLifetimePoints integer Displays the updated total number of points the member has earned in their lifetime with the loyalty program after points have been awarded. 7860

 

To give points: 
{ 
  "id": "user@domain.com", 
  "actionId": "100", 
  "activity": "CREDIT", 
  "reason": "aj Bonus" 
  "credit": "50" 
} 
To redeem points: 
{ 
  "id": "user@domain.com", 
  "rewardId": "111", 
  "activity": "DEBIT", 
  "orderId": "OD001", 
  "reason": "claim" 
  "source": "web" 
}  
To redeem custom points: 
{ 
  "id": "user@domain.com", 
  "activity": "DEBIT", 
  "orderId": "OD001", 
  "debit": "500", 
  "reason": "used for purchase" 
  "source": "web" 
} 
To award custom points: 
{ 
  "id": "user@domain.com", 
  "actionId": "100", 
  "activity": "CREDIT", 
  "credit": "50", 
  "reason": "bonus" 
} 
To deduct custom points: 
{ 
  "id": "user@domain.com", 
  "actionId": "100", 
  "activity": "DEBIT", 
  "orderId": "OD001", 
  "debit": "50", 
  "reason": "adjustment" 
}

Response:

Status code  Response 
200 

To Award Points:

"id": "johan28.sa@gmial.com", 

"actionId": 100, 

"activity": "CREDIT", 

"credit": 50, 

"pointsAwarded": 50, 

"reason": "aj Bonus", 

"updatedUserTier": "Gold", 

"updatedAvailablePoints": "7561", 

"updatedLifetimePoints": "7561" 

 
 

To Redeem Points:

"id": "user@domain.com", 

"rewardId": "111", 

"activity": "DEBIT", 

"orderId": "OD001", 

"debit": "500", 

"reason": "claim", 

"updatedUserTier": "Gold", 

"updatedAvailablePoints": "4545", 

"updatedLifetimePoints": "7860" 

 
 

To Redeem Custom Points:

"id": "user@domain.com", 

"activity": "DEBIT", 

"orderId": "OD001", 

"debit": "500", 

"reason": "used for purchase", 

"updatedUserTier": "Gold", 

"updatedAvailablePoints": "4545", 

"updatedLifetimePoints": "7860" 

 
 

To Award Custom Points:

"id": "user@domain.com", 

"actionId": "100", 

"activity": "CREDIT", 

"credit": "50", 

"reason":"bonus", 

"updatedUserTier": "Gold", 

"updatedAvailablePoints": "4545", 

"updatedLifetimePoints": "7860" 

 
 

To Deduct Custom Points:

"id": "user@domain.com", 

"actionId": "100", 

"activity": "DEBIT", 

"orderId": "OD001", 

"debit": "50", 

"reason":"adjustment", 

"updatedUserTier": "Gold", 

"updatedAvailablePoints": "4545", 

"updatedLifetimePoints": "7860" 

Sample Error Response: 

Status code  Response 
AC1002 

 "errorCode": "AC1002", 

 "errorMessage": "Request Not Authorized" 

Functional Flow Diagram