Loyalty API - NCR Reward Combos
Contents
Overview
This document explains how Loyalty API endpoints must be used with Reward combos for NCR point of sale system.
Identify
When a guest scans an identification code on a POS or Kiosk, they may pre-select offers or rewards. For Rewards, NCR expects use to provide them w/ a new field called eligibleDiscounts
that tells their system which item needs to be marked as free.
Note: This field is completely optional, it helps the cashier register a reward at an earlier step, but we can still provide this property for any of the subsequent update calls.
Example Request
{
"identifier": "$digitCode or $loyaltyId",
"posVendor": {
"matchingId": "$smgCode",
"operator": "$operatorId",
"posType": "$posVendorName",
"storeId": "$rbiStoreId",
"terminal": "$terminalNumber",
"transactionId": "$posTransactionId"
}
}
Example Response
{
"balances": [
{
"amount": 14464,
"currency": "points"
}
],
"eligibleDiscounts": [
{
"details": {
"displayName": "some display name",
"type": "REWARD or OFFER"
},
"productId": "$benefitPlu",
"referenceId": "$loyaltyIncentiveId"
}
],
"loyaltyUser": {
"created": "2021-08-10T12:18:39.180Z",
"id": "$loyaltyUserId",
"name": "$loyaltyUserName"
},
"order": [
{
"name": "Whopper",
"productId": "$incentivePlu",
"referenceId": "00"
}
],
"transactionId": "$loyaltyTransactionId"
}
Â
Update (Pending)
NCR will call us with two update calls. The first one will send a status of PENDING
. This first call will have appliedDiscounts
with no referenceId
(engine id which will later use to apply the discount on our side). If the user pre-selected a reward prior to identifying OR the cart contains an upsize plu, NCR expects us to return an eligibleDiscounts
field that points to the entry being discounted, the pointer used is the orderReferenceId
. The orderReferenceId
must match the referenceId
of the cart entry that needs to be discounted from the request body.
For combos, NCR will provide all the combo slots in the appliedDiscounts
array. Each entry will have a comboId
(the combo document plu) and comboInstanceId
which will be unique identifier for us to group all of the slots for one particular combo entry.
Example request
{
"channel": "Restaurant",
"created": "2021-05-04T13:39:47Z",
"loyaltyId": "$loyaltyUserId",
"serviceMode": "$serivceMode",
"status": "PENDING",
"transactionDetails": {
"currency": "USD",
"appliedDiscounts": [
{
"comboId": "$comboPlu",
"comboInstanceId": "$uniqueIdPerCombo",
"details": {
"displayName": "WHOPPER Meal",
"type": "REWARD"
},
"orderReferenceId": "1",
"productId": "9088",
"referenceId": ""
},
{
"comboId": "$comboPlu",
"comboInstanceId": "$uniqueIdPerCombo",
"details": {
"displayName": "WHOPPER",
"type": "REWARD"
},
"orderReferenceId": "2",
"productId": "110",
"referenceId": ""
},
{
"comboId": "$comboPlu",
"comboInstanceId": "$uniqueIdPerCombo",
"details": {
"displayName": "REGULAR FRIES ML",
"type": "REWARD"
},
"orderReferenceId": "3",
"productId": "713",
"referenceId": ""
},
{
"details": {
"displayName": "REGULAR COKE",
"type": "REWARD"
},
"comboInstanceId": "$uniqueIdPerCombo",
"comboId": "$comboPlu",
"orderReferenceId": "4",
"productId": "400102",
"referenceId": ""
}
],
"order": [
{
"name": "Meal selection",
"price": 0,
"productId": "9088",
"productType": "product",
"quantity": 1,
"referenceId": "6",
"tax": 0
},
{
"name": "WHOPPER",
"price": 6.49,
"productId": "110",
"productType": "product",
"quantity": 1,
"referenceId": "7",
"tax": 0
},
{
"name": "REGULAR FRIES ML",
"price": 2.39,
"productId": "713",
"productType": "product",
"quantity": 1,
"referenceId": "8",
"tax": 0
},
{
"name": "REGULAR COKE",
"price": 2.82,
"productId": "400102",
"productType": "product",
"quantity": 1,
"referenceId": "9",
"tax": 0
}
],
"payments": [
{
"amount": 500,
"type": "CREDIT",
"ccToken": "$panToken"
},
{
"amount": 400,
"type": "CASH"
},
{
"amount": 1000,
"type": "SUBTOTAL"
},
{
"amount": 300,
"type": "DISCOUNTS"
},
{
"amount": 200,
"type": "TAXES"
}
],
"posVendor": {
"matchingId": "$smgCode",
"operator": "$operatorId",
"posType": "$posVendorName",
"storeId": "$rbiStoreId",
"terminal": "$terminalNumber",
"transactionId": "$posTransactionId"
}
},
"transactionId": "$loyaltyTransactionId"
}
Example response
Â
Update (Claimed)
NCR will call us with two update calls. The second call will send a status of CLAIMED
which will include any appliedDiscounts
for rewards / upsizes that was given to the user. Unlike the first call, these entries will contain a referenceId
for us to reconcile with the customer’s preselected rewards.
Example request
Example response
Â