POS Connect Best Practices: Adjudication
Overview
This documentation will cover:
- Adjudication Integration Flow
- Types of rewards
- Point in Time Adjudication
- Locking
- Adjudication use case with sample JSON payloads
- Minimum recommended fields for the Wallet Open API request
References
- Visit High-Level POS integration flow for when the Adjudication flow is invoked in a consumer's POS journey.
- Visit Wallet Open API Documentation for a complete list of request and response fields along with definitions.
Adjudication Integration Flow
When a consumer is ready to check out at a POS, Wallet Open API call is made to Eagle Eye AIR. The calling application provides all the pieces of information that the POS connect adjudication engine needs including basket items with monetary value, transaction location, loyalty identifier etc. In response the calling application receives results of the adjudication from Eagle Eye to inform the consumer of the offers to be applied, rewards to be received, points balances if any, and other loyalty information.
This API call is made synchronously and can be made one or more times if necessary. Scenarios when this API call needs to be made more than once:
- Basket Items are modified and adjudication has to be performed another time before transaction is committed
- In an e-commerce scenario, this API call is made when a consumer is ready to check-out and views their cart, rather than each time an item is added or removed from the cart. Our clients prefer this method as it reduces unnecessary network traffic, which can slow down the calling application and impact consumer experience.
- When offers need to be excluded or included and re-adjudication is required before transaction is committed
Reward types
A consumer can get 3 types of rewards as part of POS Connect adjudication:
- Points from Base Earn and Offers
- Discounts from Offers
- Alternative Rewards from Offers
- Tender coupon that can be applied towards the payment of a transaction
- Bounceback coupon for future use
- Zero-reward campaigns
- Progressions on a stamp card, quest or continuity offer
The following sections will highlight components of the Wallet Open request and response that are relevant for adjudicating each type of reward in AIR.
Points Rewards
Base Earn Points
This is the type of reward where points are awarded to points account(s) for the loyalty scheme. Points are worth a monetary value that a consumer can collect. Base Earn points are awarded based on a total qualified basket spend for e.g. For e.g. 10 points for every $1.00 spent on the overall purchase regardless of offers.
Request
To enable Base Earn points adjudication, the following field must be true in the Wallet Open request:
options.analyseBasket.enabled = true
Response
The following fields in the response will contain results for base earn adjudication:
- Total value of base earn points can be found here:
analyseBasketResults.basket.summary.results.points.earn - Total of all points given from offers and base earn can be found here:
analyseBasketResults.basket.summary.results.points.totalPointsGiven - Base points earned by scheme can be found here:
analyseBasketResults.basket.summary.adjudicationResults.balances.currentwhereresourceType = SCHEME, andtype = earn - Base earn points by item can be found here:
analyseBasketResults.basket.contents.[x].contributionResults.valuewhereinstanceIdstarts with scheme ID before-
Points from offers
This is the type of reward where points are awarded to points account(s) for the loyalty scheme. Points are worth a monetary value that a consumer can collect. Points are be awarded for redeeming an offer when qualification criteria are met.
Request
To enable adjudication of points offers, the following field must be true in the Wallet Open request:
options.analyseBasket.enabled = true
The above option is sufficient for adjudicating targeted offers and base earn. If open offers are required to be adjudicated, then the following option should be enabled in addition:
options.analyseBasket.includeOpenOffers = true
Response
The following fields in the response will contain results for adjudication of points offers:
- Total value of points from offers can be found here:
analyseBasketResults.basket.summary.results.points.credit - Total value of all points from offers and base earn can be found here:
analyseBasketResults.basket.summary.results.points.totalPointsGiven - Breakdown of points by item and campaign can be found here:
analyseBasketResults.basket.contents.[x].contributionResults.valuewhereinstanceIdstarts with campaign ID before-for a points reward campaignanalyseBasketResults.basket.contents.[x].adjudicationResults.valuewhereresourceType = CAMPAIGNandresourceIdprovides the campaign ID for which the points are rewarded.
Note:type = createRedeemindicates anOPENcampaign, whereastype = redeemindicates aTARGETEDcampaign for which a coupon already exists.
Discount Rewards
This type of reward will reduce the monetary value of the basket or product resulting in discounts. Discount reward is given for redeeming a discount offer when qualification criteria are met.
Request
To enable adjudication of discount offers, the following field must be true in the Wallet Open request:
options.adjustBasket.enabled = true
The above option is sufficient for adjudicating targeted offers. If open offers are required to be adjudicated, then the following option should be enabled in addition:
options.adjustBasket.includeOpenOffers = true
Response
The following fields in the response will contain results for adjudication of discount offers:
- Total value of discounts from all campaigns can be found here:
analyseBasketResults.basket.summary.totalDiscountAmount.promotions - Total basket value after applying all loyalty discounts can be found here:
analyseBasketResults.basket.summary.totalBasketValue
Note: this value is used to calculate base earn reward - Discount information for an item for each campaign can be found here:
- Value of item before discount:
analyseBasketResults.basket.contents.[x].totalUnitCost - Value of item after discount:
analyseBasketResults.basket.contents.[x].totalUnitCostAfterDiscount
Note: this field does not appear in the response for an item where a discount campaign was not applicable - Breakdown of discount by item and campaign can be found here:
- Total discount from all campaigns:
analyseBasketResults.basket.contents.[x].itemUnitDiscount
Note: this field does not appear in the response for an item where a discount campaign was not applicable - Discount per campaign:
analyseBasketResults.basket.contents.[x].adjustmentResults.valuewhereresourceType = CAMPAIGNandresourceIdprovides the campaign ID for which discount rewarded.
Note:type = createRedeemindicates anOPENcampaign, whereastype = redeemindicates aTARGETEDcampaign for which a coupon already exists.
- Total discount from all campaigns:
- Value of item before discount:
Alternative Rewards
Alternative type of rewards vary in nature and are different from points and discounts. These are also given for redeeming a discount offer when qualification criteria are met. Some examples of an alternative rewards are as follows:
- Bounceback coupon for future use
- Zero-reward campaigns
- Progressions on a stamp card, quest or continuity offer
- Tender coupon that can be applied towards the payment of a transaction
Request
To enable adjudication of offers for alternative, the following field must be true in the Wallet Open request:
options.analyseBasket.enabled = true
The above option is sufficient for adjudicating targeted offers and base earn. If open offers are required to be adjudicated, then the following option should be enabled in addition:
options.analyseBasket.includeOpenOffers = true
Response
The following fields in the response will contain results for adjudication of offers with alternative rewards:
analyseBasketResults.basket.contents.[x].adjudicationResults.valuewhereresourceType = CAMPAIGNandresourceIdprovides the campaign ID for which the points are rewarded.
Note 1:type = createRedeemindicates anOPENcampaign, whereastype = redeemindicates aTARGETEDcampaign for which a coupon already exists.
Note 2:valuewill be0if there are no discounts or points, but a coupon is awarded- In the case of a bounceback reward where a coupon is created for a future purchase, information can be found in the following areas within the response:
analyseBasketResults.basket.contents.[x].qualifiesResults[].instanceIdwhereinstanceIdstarts with campaign ID before-for a campaign for which a bounceback coupon is awardedanalyseBasketResults.basket.contents.[x].adjudicationResults[]whereresourceType = CAMPAIGNandresourceIdprovides the campaign ID for which a bounceback coupon is awarded
Note:type = createRedeemindicates anOPENcampaign, whereastype = redeemindicates aTARGETEDcampaign for which a coupon already exists.
Point in Time Adjudication
Eagle Eye AIR works in UTC time zone as we have clients world wide. Although Gemma is checking out at 8 pm EST local time on November 3rd 2024, it would be 1 am UTC on November 4th 2024. This would impact adjudication results if offers were to expire end of day November 3rd 2024. Many EE clients operate in multiple global timezones. Daylight savings time changes also add further complexity. Eagle Eye AIR provides the flexibility for the calling application to inform the adjudication engine of the local time and timezone where the transaction is taking place. To utilize this functionality, the following header field needs to be provided in the Wallet Open Request:
X-POSCONNECT-TRANSACTION-DATETIME
In the above example, the value of this field would be populated as follows:
2024-11-03T20:00:00-05:00
Locking
Within the Wallet Open request, it is recommended to enable locking so that eligible coupons can be locked against a wallet transaction in a consumer's wallet while the transaction is in progress. This can be done by passing the following in the request:
lock: true
Our clients prefer to do this for a couple of reasons:
- To prevent fraud and double dipping of the same coupon - when more than one transactions are attempted in parallel (online and/or in store) and adjudication of the same coupon could occur in more than one transaction during the small window between adjudication and settle.
- To reserve coupons against a transaction until it's settled - in an E-commerce scenario a transaction is created when order is placed and is settled when all items are fulfilled or shipped. A transaction could remain active for multiple days until it is settled. During this time, eligible coupons adjudicated for an ACTIVE transaction should not be applicable towards another transaction.
Adjudication Use Case
Gemma shops at A Fabulous Retailer
Gemma goes to store 111 at "A Fabulous Retailer" one fine Sunday, November 3rd 2024. She is ready to check out 7 items in her basket totalling $70.00 at 8 pm EDT (Eastern Daylight Time):
- 2 bottles of lemonades for $10.00 each
- 1 container of coffee for $10.00
- 1 bottle of soap for $10.00
- 1 bag of carrots for $10.00
- 1 frozen pizza for $10.00
- 1 bottle of wine for $10.00
Gemma's wallet contains these targeted coupons that are available for use for the following campaigns:
-
Campaign ID 100560017 - Buy coffee and get 500 points for each
Note: this campaign is unredeemable
-
Campaign ID 100560020 - Buy carrots for $1
-
Campaign ID 100561823 - Buy a t-shirt and get 600 points
The following open offers are available to all loyalty members:
- Campaign ID: 100561737 - Buy Lemonade and get 300 points for each
- Campaign ID: 100560999 - Buy Pizza and get a coupon for Campaign ID 100560832 that awards 1000 points for spending $10
- Campaign ID: 100560018 - Buy Soap for $2.00 off
- Campaign ID: 100586807 - Spend $70.00 and get $7.00 off
- Campaign ID: 100561855 - Buy Skimmed Milk for $2.00 off
Adjudication is requested for Gemma's basket
When Gemma checks out at POS, the following Wallet Open request and response are produced.
Wallet Transaction Reference
referencefor each wallet transaction should should be a unique string. It is recommended to populate this string using<YYYYMMDDHHMMS>-<storeNo>-<laneNumber>-<transactionNo>for e.g.20241103080000-111-01-1111so that a transaction can easily be tracked back to it's source for troubleshooting an issue.
Wallet Open
Expand to see payload example
{
"identity": {
"identityValue": "9e019e5f70fa6011cee015afa5febb0b"
},
"reference": "20241103080000-111-01-1111",
"lock": true,
"location": {
"incomingIdentifier": "111",
"parentIncomingIdentifier": "AFabulousRetailer"
},
"options": {
"adjustBasket": {
"includeOpenOffers": true,
"enabled": true
},
"analyseBasket": {
"includeOpenOffers": true,
"enabled": true
}
},
"basket": {
"type": "STANDARD",
"summary": {
"totalItems": 6,
"totalBasketValue": 7000
},
"contents": [
{
"upc": "245874",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 2000,
"totalUnitCost": 2000,
"description": "Lemonade",
"itemUnitCount": 2
},
{
"upc": "245875",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Coffee",
"itemUnitCount": 1
},
{
"upc": "245884",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Soap",
"itemUnitCount": 1
},
{
"upc": "245886",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Carrot",
"itemUnitCount": 1
},
{
"upc": "245868",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Pizza",
"itemUnitCount": 1
},
{
"upc": "245872",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Wine",
"itemUnitCount": 1
}
]
}
}{
"analyseBasketResults": {
"basket": {
"type": "ENRICHED",
"summary": {
"totalItems": 6,
"totalBasketValue": 5900,
"results": {
"points": {
"spend": 0,
"debit": 0,
"refund": 0,
"totalPointsTaken": 0,
"earn": 490,
"credit": 1100,
"totalPointsGiven": 1590,
"totalMonetaryValue": 0
},
"tiers": null
},
"totalDiscountAmount": {
"promotions": 1100
},
"adjudicationResults": [
{
"resourceType": "SCHEME",
"resourceId": "1743751",
"instanceId": "1743751-1",
"success": null,
"type": "earn",
"value": null,
"balances": {
"current": 490
},
"isRefundable": true,
"isUnredeemable": false,
"relatedAccountIds": [],
"targetedAccountId": "4129041987",
"targetedWalletId": "216992780",
"totalMatchingUnits": null,
"playOrderPosition": 3
},
{
"resourceType": "CAMPAIGN",
"resourceId": "100560999",
"instanceId": "100560999-1",
"success": null,
"type": "createRedeem",
"value": 0,
"balances": null,
"isRefundable": true,
"isUnredeemable": false,
"relatedAccountIds": [],
"targetedAccountId": null,
"targetedWalletId": "216992780",
"totalMatchingUnits": null,
"playOrderPosition": 5,
"totalRewardUnits": 0
}
]
},
"contents": [
{
"upc": "245874",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 2000,
"totalUnitCost": 2000,
"description": "Lemonade",
"itemUnitCount": 2,
"contributionResults": [
{
"instanceId": "1743751-1",
"value": 200
},
{
"instanceId": "100561737-1",
"value": 600
}
],
"adjudicationResults": [
{
"resourceType": "CAMPAIGN",
"resourceId": "100561737",
"instanceId": "100561737-1",
"success": null,
"type": "createRedeem",
"value": 600,
"balances": null,
"isRefundable": true,
"isUnredeemable": false,
"relatedAccountIds": [],
"targetedAccountId": null,
"targetedWalletId": "216992780",
"totalMatchingUnits": 1,
"playOrderPosition": 6,
"totalRewardUnits": 2
},
{
"resourceType": "CAMPAIGN",
"resourceId": "100561737",
"instanceId": "100561737-1",
"success": null,
"type": "credit",
"value": null,
"balances": {
"current": 600
},
"isRefundable": true,
"isUnredeemable": false,
"relatedAccountIds": [],
"targetedAccountId": "4129041987",
"targetedWalletId": "216992780",
"totalMatchingUnits": null,
"playOrderPosition": 6
}
],
"qualifiesResults": [
{
"instanceId": "100561737-1",
"totalMatchingUnits": 1,
"totalMatchingSpend": 1,
"totalOverallMatchingSpend": null
}
]
},
{
"upc": "245875",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Coffee",
"itemUnitCount": 1,
"contributionResults": [
{
"instanceId": "1743751-1",
"value": 100
},
{
"instanceId": "100560017-1",
"value": 500
}
],
"adjudicationResults": [
{
"resourceType": "CAMPAIGN",
"resourceId": "100560017",
"instanceId": "100560017-1",
"success": null,
"type": "redeem",
"value": 500,
"balances": null,
"isRefundable": true,
"isUnredeemable": false,
"relatedAccountIds": [
"4129041984"
],
"targetedAccountId": "4129041984",
"targetedWalletId": "216992780",
"totalMatchingUnits": 1,
"playOrderPosition": 4,
"totalRewardUnits": 0
},
{
"resourceType": "CAMPAIGN",
"resourceId": "100560017",
"instanceId": "100560017-1",
"success": null,
"type": "credit",
"value": null,
"balances": {
"current": 500
},
"isRefundable": true,
"isUnredeemable": false,
"relatedAccountIds": [
"4129041984"
],
"targetedAccountId": "4129041987",
"targetedWalletId": "216992780",
"totalMatchingUnits": null,
"playOrderPosition": 4
}
],
"qualifiesResults": [
{
"instanceId": "100560017-1",
"totalMatchingUnits": 1,
"totalMatchingSpend": 1,
"totalOverallMatchingSpend": null
}
]
},
{
"upc": "245884",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 800,
"totalUnitCost": 1000,
"description": "Soap",
"itemUnitCount": 1,
"qualifiesResults": [
{
"instanceId": "100560018-1",
"totalMatchingUnits": 1,
"totalMatchingSpend": 1,
"totalOverallMatchingSpend": null
}
],
"adjustmentResults": [
{
"resourceType": "CAMPAIGN",
"resourceId": "100560018",
"instanceId": "100560018-1",
"relatedAccountIds": [],
"success": null,
"type": "createRedeem",
"multiItem": [
"245884"
],
"value": 200,
"isUnredeemable": false,
"targetedAccountId": null,
"targetedWalletId": "216992780",
"totalMatchingUnits": 1,
"playOrderPosition": 2,
"totalRewardUnits": 1,
"totalDiscountAmount": 200
}
],
"itemUnitDiscount": 200,
"contributionResults": [
{
"instanceId": "1743751-1",
"value": 80
}
]
},
{
"upc": "245886",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 100,
"totalUnitCost": 1000,
"description": "Carrot",
"itemUnitCount": 1,
"qualifiesResults": [
{
"instanceId": "100560020-1",
"totalMatchingUnits": 1,
"totalMatchingSpend": 1,
"totalOverallMatchingSpend": null
}
],
"adjustmentResults": [
{
"resourceType": "CAMPAIGN",
"resourceId": "100560020",
"instanceId": "100560020-1",
"relatedAccountIds": [
"4129041985"
],
"success": null,
"type": "redeem",
"multiItem": [],
"value": 900,
"isUnredeemable": false,
"targetedAccountId": "4129041985",
"targetedWalletId": "216992780",
"totalMatchingUnits": 1,
"playOrderPosition": 1,
"totalRewardUnits": 1,
"totalDiscountAmount": 900
}
],
"itemUnitDiscount": 900,
"contributionResults": [
{
"instanceId": "1743751-1",
"value": 10
}
]
},
{
"upc": "245868",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Pizza",
"itemUnitCount": 1,
"contributionResults": [
{
"instanceId": "1743751-1",
"value": 100
}
],
"qualifiesResults": [
{
"instanceId": "100560999-1",
"totalMatchingUnits": 1,
"totalMatchingSpend": 1,
"totalOverallMatchingSpend": null
}
]
},
{
"upc": "245872",
"itemUnitCost": 1000,
"salesKey": "SALE",
"totalUnitCostAfterDiscount": 1000,
"totalUnitCost": 1000,
"description": "Wine",
"itemUnitCount": 1
}
],
"analysedDateTime": "2025-02-14T20:56:20+00:00"
},
"discount": [
{
"accountId": "4129041985",
"walletId": "216992780",
"type": "ECOUPON",
"clientType": "OFFER",
"campaignId": "100560020",
"campaignName": "NS POS Connect Demo Targeted Unlimited - Carrots for $1",
"offerId": "1435365",
"offerName": "VARIABLE_AMOUNT_OFF_PRODUCTS",
"reward": {
"basket": null,
"pointSpendRates": [],
"product": {
"AFabulousRetailer": {
"collections": [
{
"maximumNumberOfUnits": 1,
"minimumNumberOfUnits": 1,
"points": null,
"products": {
"allRequired": false,
"excluded": {
"skus": [],
"items": []
},
"included": {
"groups": null,
"items": [
"245886"
],
"skus": [],
"tags": null
}
},
"value": {
"interval": null,
"standard": {
"allFree": false,
"discountAmount": null,
"finalAmount": 100,
"percentageAmount": null
}
}
}
],
"logicalOperator": "OR"
}
},
"standard": null,
"treatAs": null
}
},
{
"accountId": null,
"walletId": "216992780",
"type": "ECOUPON",
"clientType": "OFFER",
"campaignId": "100560018",
"campaignName": "NS POS Connect Demo Open - Soap for $2 off",
"offerId": "1435363",
"offerName": "FIXED_AMOUNT_OFF_PRODUCTS",
"reward": {
"basket": null,
"pointSpendRates": [],
"product": {
"AFabulousRetailer": {
"collections": [
{
"maximumNumberOfUnits": 1,
"minimumNumberOfUnits": 1,
"points": null,
"products": {
"allRequired": false,
"excluded": {
"skus": [],
"items": []
},
"included": {
"groups": null,
"items": [
"245884"
],
"skus": [],
"tags": null
}
},
"value": {
"interval": null,
"standard": {
"allFree": false,
"discountAmount": 200,
"finalAmount": null,
"percentageAmount": null
}
}
}
],
"logicalOperator": "OR"
}
},
"standard": null,
"treatAs": null
}
}
],
"points": [
{
"resourceType": "SCHEME",
"resourceId": "1743751",
"walletId": "216992780",
"operationType": "earn",
"value": 490,
"accountId": "4129041987",
"relatedSchemeId": "1743751",
"details": null,
"totalMatchingUnits": null
},
{
"resourceType": "CAMPAIGN",
"resourceId": "100560017",
"operationType": "credit",
"value": 500,
"relatedSchemeId": "1743751",
"accountId": "4129041987",
"walletId": "216992780",
"details": {
"appliedAnalyseBasketType": "FIXED_POINTS_PRODUCTS"
}
},
{
"resourceType": "CAMPAIGN",
"resourceId": "100561737",
"operationType": "credit",
"value": 600,
"relatedSchemeId": "1743751",
"accountId": "4129041987",
"walletId": "216992780",
"details": {
"appliedAnalyseBasketType": "VARIABLE_POINTS_PRODUCTS"
}
}
],
"unusedAccounts": [
{
"resourceType": "ACCOUNT",
"resourceId": "4129041986",
"reasonMessage": "Basket did not match qualifier",
"reasonCode": "QNM1"
}
]
},
"wallet": {
"walletId": "216992780",
"friendlyName": null,
"status": "ACTIVE",
"type": "CONSUMER",
"state": "DEFAULT",
"meta": null,
"dateCreated": "2025-02-14T20:52:22+00:00",
"lastUpdated": "2025-02-14T20:52:22+00:00",
"relationships": null
},
"identity": {
"identityId": "187998556",
"walletId": "216992780",
"type": "CUSTOMER_ID",
"friendlyName": null,
"value": "9e019e5f70fa6011cee015afa5febb0b",
"safeValue": null,
"secret": null,
"dates": {
"start": "2025-02-14T20:52:22+00:00",
"end": null
},
"meta": null,
"state": "DEFAULT",
"status": "ACTIVE",
"dateCreated": "2025-02-14T20:52:22+00:00",
"lastUpdated": "2025-02-14T20:52:22+00:00",
"mobileWallet": "https://sb.uk.mypass.is/identity/142378/216992780/187998556/401a653392caf1245a9f7ccbd64afc3f71dececb62f2bcc8e14f57e09e47a6bb"
},
"accounts": [
{
"accountId": null,
"walletId": "216992780",
"campaignId": "100560018",
"campaign": {
"campaignId": 100560018,
"campaignTypeId": 117,
"campaignMode": "OPEN",
"campaignName": "NS POS Connect Demo Open - Soap for $2 off",
"accountTypeId": 1,
"startDate": "2024-01-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"status": "ACTIVE",
"sequenceKey": null,
"reference": "100560018",
"relationships": [],
"dateCreated": "2024-10-28T15:45:06+00:00",
"lastUpdated": "2024-10-28T15:57:10+00:00"
},
"type": "ECOUPON",
"clientType": "OFFER",
"status": "ACTIVE",
"state": null,
"dates": {
"start": "2025-02-14T20:56:20+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": null,
"dateCreated": "2025-02-14T20:56:20+00:00",
"lastUpdated": "2025-02-14T20:56:20+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": null,
"mobileWallet": null,
"enriched": {
"token": null,
"qualifier": null,
"reward": {
"offerId": "1435363",
"offerName": "CAMPAIGN OFFER (auto) v2",
"posReference": null
},
"custom": null,
"restrictions": {},
"redemptionWindows": {},
"enrichmentType": "COUPON",
"campaignName": "NS POS Connect Demo Open - Soap for $2 off",
"campaignReference": "100560018"
}
},
{
"accountId": null,
"walletId": "216992780",
"campaignId": "100560999",
"campaign": {
"campaignId": 100560999,
"campaignTypeId": 58,
"campaignMode": "OPEN",
"campaignName": "NS POS Connect Demo Alternative Reward Open - Buy Pizza and get a coupon",
"accountTypeId": 1,
"startDate": "2024-01-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"status": "ACTIVE",
"sequenceKey": null,
"reference": "100560999",
"relationships": [],
"dateCreated": "2024-10-28T18:54:19+00:00",
"lastUpdated": "2024-10-28T18:54:50+00:00"
},
"type": "ECOUPON",
"clientType": "OFFER",
"status": "ACTIVE",
"state": null,
"dates": {
"start": "2025-02-14T20:56:20+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": null,
"dateCreated": "2025-02-14T20:56:20+00:00",
"lastUpdated": "2025-02-14T20:56:20+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": null,
"mobileWallet": null,
"enriched": {
"token": null,
"qualifier": null,
"reward": {
"offerId": "1435580",
"offerName": "CAMPAIGN OFFER (auto) v2",
"posReference": null
},
"custom": null,
"restrictions": {},
"redemptionWindows": {},
"enrichmentType": "COUPON",
"campaignName": "NS POS Connect Demo Alternative Reward Open - Buy Pizza and get a coupon",
"campaignReference": "100560999"
}
},
{
"accountId": null,
"walletId": "216992780",
"campaignId": "100561737",
"campaign": {
"campaignId": 100561737,
"campaignTypeId": 114,
"campaignMode": "OPEN",
"campaignName": "NS POS Connect Demo Open - Get 300 pts for each Lemonade",
"accountTypeId": 1,
"startDate": "2024-01-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"status": "ACTIVE",
"sequenceKey": null,
"reference": "100561737",
"relationships": [],
"dateCreated": "2024-10-28T20:08:48+00:00",
"lastUpdated": "2024-10-30T17:33:39+00:00"
},
"type": "ECOUPON",
"clientType": "OFFER",
"status": "ACTIVE",
"state": null,
"dates": {
"start": "2025-02-14T20:56:20+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": null,
"dateCreated": "2025-02-14T20:56:20+00:00",
"lastUpdated": "2025-02-14T20:56:20+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": null,
"mobileWallet": null,
"enriched": {
"token": null,
"qualifier": null,
"reward": {
"offerId": "1435726",
"offerName": "CAMPAIGN OFFER (auto) v2",
"posReference": null
},
"custom": null,
"restrictions": {},
"redemptionWindows": {},
"enrichmentType": "COUPON",
"campaignName": "NS POS Connect Demo Open - Get 300 pts for each Lemonade",
"campaignReference": "100561737"
}
},
{
"accountId": "4129041984",
"walletId": "216992780",
"campaignId": "100560017",
"campaign": {
"campaignId": 100560017,
"campaignTypeId": 102,
"campaignMode": "RESTRICTED",
"campaignName": "NS POS Connect Demo Targeted Unlimited - Buy Coffee and get 500 pts",
"accountTypeId": 1,
"startDate": "2024-01-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"status": "ACTIVE",
"sequenceKey": null,
"reference": "100560017",
"relationships": [],
"dateCreated": "2024-10-28T15:40:13+00:00",
"lastUpdated": "2024-12-24T17:10:07+00:00"
},
"type": "ECOUPON",
"clientType": "OFFER",
"status": "LOCKED",
"state": "LOADED",
"dates": {
"start": "2025-02-14T20:52:23+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": null,
"dateCreated": "2025-02-14T20:52:23+00:00",
"lastUpdated": "2025-02-14T20:52:23+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": null,
"mobileWallet": null,
"enriched": {
"token": null,
"qualifier": null,
"reward": {
"offerId": "1435362",
"offerName": "CAMPAIGN OFFER (auto) v2",
"posReference": null
},
"custom": null,
"restrictions": {},
"redemptionWindows": {},
"enrichmentType": "COUPON",
"campaignName": "NS POS Connect Demo Targeted Unlimited - Buy Coffee and get 500 pts",
"campaignReference": "100560017"
}
},
{
"accountId": "4129041985",
"walletId": "216992780",
"campaignId": "100560020",
"campaign": {
"campaignId": 100560020,
"campaignTypeId": 117,
"campaignMode": "RESTRICTED",
"campaignName": "NS POS Connect Demo Targeted Unlimited - Carrots for $1",
"accountTypeId": 1,
"startDate": "2024-01-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"status": "ACTIVE",
"sequenceKey": null,
"reference": "100560020",
"relationships": [],
"dateCreated": "2024-10-28T15:46:47+00:00",
"lastUpdated": "2024-12-24T17:12:14+00:00"
},
"type": "ECOUPON",
"clientType": "OFFER",
"status": "LOCKED",
"state": "LOADED",
"dates": {
"start": "2025-02-14T20:52:23+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": null,
"dateCreated": "2025-02-14T20:52:23+00:00",
"lastUpdated": "2025-02-14T20:52:23+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": null,
"mobileWallet": null,
"enriched": {
"token": null,
"qualifier": null,
"reward": {
"offerId": "1435365",
"offerName": "CAMPAIGN OFFER (auto) v2",
"posReference": null
},
"custom": null,
"restrictions": {},
"redemptionWindows": {},
"enrichmentType": "COUPON",
"campaignName": "NS POS Connect Demo Targeted Unlimited - Carrots for $1",
"campaignReference": "100560020"
}
},
{
"accountId": "4129041986",
"walletId": "216992780",
"campaignId": "100561823",
"campaign": {
"campaignId": 100561823,
"campaignTypeId": 102,
"campaignMode": "RESTRICTED",
"campaignName": "NS POS Connect Demo Targeted - Buy t-shirt and get 600 pts",
"accountTypeId": 1,
"startDate": "2024-01-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"status": "ACTIVE",
"sequenceKey": null,
"reference": "100561823",
"relationships": [],
"dateCreated": "2024-10-28T20:17:26+00:00",
"lastUpdated": "2024-12-24T17:11:02+00:00"
},
"type": "ECOUPON",
"clientType": "OFFER",
"status": "ACTIVE",
"state": "LOADED",
"dates": {
"start": "2025-02-14T20:52:23+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": null,
"dateCreated": "2025-02-14T20:52:23+00:00",
"lastUpdated": "2025-02-14T20:52:23+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": null,
"mobileWallet": null,
"enriched": {
"token": null,
"qualifier": null,
"reward": {
"offerId": "1435727",
"offerName": "CAMPAIGN OFFER (auto) v2",
"posReference": null
},
"custom": null,
"restrictions": {},
"redemptionWindows": {},
"enrichmentType": "COUPON",
"campaignName": "NS POS Connect Demo Targeted - Buy t-shirt and get 600 pts",
"campaignReference": "100561823"
}
},
{
"accountId": "4129041987",
"walletId": "216992780",
"campaignId": "1743751",
"campaign": {
"campaignId": 1743751,
"campaignTypeId": 7,
"campaignMode": "OPEN",
"campaignName": "Retail Points",
"accountTypeId": 7,
"startDate": "2023-01-01T00:00:00+00:00",
"endDate": "9999-12-30T23:59:00+00:00",
"status": "ACTIVE",
"sequenceKey": null,
"reference": "RETAILPOINTS",
"relationships": [],
"dateCreated": "2023-11-28T18:27:32+00:00",
"lastUpdated": "2024-12-24T19:58:16+00:00"
},
"type": "POINTS",
"clientType": "RETAILPOINTS",
"status": "ACTIVE",
"state": "LOADED",
"dates": {
"start": "2025-02-14T20:52:23+00:00",
"end": "2038-01-19T03:14:07+00:00"
},
"meta": null,
"dateCreated": "2025-02-14T20:52:23+00:00",
"lastUpdated": "2025-02-14T20:53:27+00:00",
"overrides": [],
"balances": {
"current": 25000,
"usable": 25000,
"locked": 0,
"lifetime": 25000,
"lifetimeSpend": 0,
"lifetimeSpendValue": 0,
"pending": 0
},
"relationships": null,
"mobileWallet": null,
"enriched": {
"tierMembership": null,
"properties": {
"allowNegativeBalance": {
"enabled": true
},
"autotopup": {
"defaultFunding": [],
"enabled": false,
"reasonCodes": null
},
"credit": {
"defaultFunding": [],
"enabled": false,
"reasonCodes": null
},
"debit": {
"defaultFunding": [],
"enabled": false,
"reasonCodes": null
},
"details": {
"alternativeDescription": "",
"alternativeName": "",
"description": "",
"printMessage": "",
"screenMessage": ""
},
"earn": {
"defaultFunding": [],
"enabled": false,
"reasonCodes": null
},
"earnRates": {
"OnboardingPlayground": {
"default": {
"description": null,
"maximumQuantityPerProduct": null,
"name": null,
"product": null,
"rates": [
{
"amount": 10,
"bonus": null,
"ceiling": null,
"floor": null,
"offset": 0,
"step": 100
}
],
"reference": null,
"roundPoints": {
"active": false
},
"type": "STANDARD"
}
},
"OnboardingPlayground-AFabulousRetailer": {
"default": {
"description": null,
"maximumQuantityPerProduct": null,
"name": null,
"product": {
"collections": [
{
"products": {
"allRequired": false,
"excluded": {
"groups": null,
"items": [
"245872"
],
"skus": null,
"tags": null
},
"included": null
}
}
],
"logicalOperator": "OR"
},
"rates": [
{
"amount": 10,
"bonus": null,
"ceiling": null,
"floor": null,
"offset": 0,
"step": 100
}
],
"reference": null,
"roundPoints": {
"active": false
},
"type": "STANDARD"
}
}
},
"exchange": {
"defaultFunding": [],
"enabled": false,
"reasonCodes": null
},
"expiryPoints": {
"enabled": true,
"rule": {
"periodCount": 120,
"periodType": "MONTH",
"rounding": "ABSOLUTE",
"type": "CUTOFFDATE"
},
"useLegacyRefundableBalanceAfter": false
},
"goodwill": {
"defaultFunding": [],
"enabled": false,
"reasonCodes": null,
"restrictions": [
{
"period": "",
"singleValue": 0,
"transactions": 0,
"value": 0
}
]
},
"householdSharing": {
"enabled": true
},
"lock": null,
"pointsLimit": {
"exceed": false,
"limit": null,
"perPeriodRestrictions": null
},
"redemptionRates": {
"OnboardingPlayground": [
{
"bonus": 0,
"ceiling": 500000,
"floor": 10000,
"pointsBack": 0,
"rate": 0.1,
"step": 10000
}
]
},
"spend": {
"defaultFunding": [],
"enabled": false,
"reasonCodes": null
}
},
"pointsExpiry": null,
"enrichmentType": "POINTS",
"schemeName": "Retail Points",
"schemeReference": "RETAILPOINTS"
}
}
],
"additionalEntities": null,
"walletTransactions": [],
"accountTransactions": [],
"basketAdjudicationResult": null,
"spendAdjudicationResults": null,
"transactionCapabilities": {
"loyalty": {
"spend": true,
"earn": true
}
}
}These actions have taken place in EE AIR:
1. A wallet Transaction in ACTIVE status is created for Gemma's purchase. Expand to see payload.
{
"walletTransactionId": "445192109",
"parentWalletTransactionId": "0",
"walletId": "216993229",
"reference": "20241103080000-111-01-1112",
"transactionDateTime": "2025-02-14T22:02:51+00:00",
"transactionDateTimeOffset": "+00:00",
"identityId": "187999451",
"identity": null,
"type": "SETTLE",
"status": "ACTIVE",
"meta": null,
"state": "ORIGINAL",
"expiryDate": null,
"accounts": [
{
"accountId": "4129043113",
"accountTransactionId": "0"
},
{
"accountId": "4129043112",
"accountTransactionId": "0"
}
],
"basket": {
"contents": null,
"summary": null,
"payment": null
},
"channel": "api",
"location": {
"storeId": null,
"storeParentId": null
},
"dateCreated": "2025-02-14T22:02:51+00:00",
"lastUpdated": "2025-02-14T22:02:51+00:00"
}2. Eligible targeted coupons are in LOCKED status. Expand to see payload.
{
"accountId": "4129043112",
"walletId": "216993229",
"campaignId": "100560017",
"type": "ECOUPON",
"clientType": "OFFER",
"status": "LOCKED",
"state": "LOADED",
"dates": {
"start": "2025-02-14T22:00:14+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": [],
"dateCreated": "2025-02-14T22:00:14+00:00",
"lastUpdated": "2025-02-14T22:02:51+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": [],
"mobileWallet": "https://sb.uk.mypass.is/a/4129043112/b02bd8d353d7bd8"
},
{
"accountId": "4129043113",
"walletId": "216993229",
"campaignId": "100560020",
"type": "ECOUPON",
"clientType": "OFFER",
"status": "LOCKED",
"state": "LOADED",
"dates": {
"start": "2025-02-14T22:00:14+00:00",
"end": "2025-12-31T23:59:00+00:00"
},
"meta": [],
"dateCreated": "2025-02-14T22:00:14+00:00",
"lastUpdated": "2025-02-14T22:02:51+00:00",
"overrides": [],
"balances": {
"available": 0,
"refundable": 0
},
"relationships": [],
"mobileWallet": "https://sb.uk.mypass.is/a/4129043113/8e349b49c20656e"
}Which Fabulous rewards will Gemma receive?
As a result of EE AIR adjudication, Gemma will receive the following rewards for being a Fabulous loyalty member!
- Total Points Reward: 1690
- Base Earn Reward: 490 points
- Total value of qualified products after discounts: 4900 cents x 0.1 base earn rate
- Points Rewards: 1100 points
- 600 points for redeeming the open Lemonade offer
- 500 points for redeeming the targeted Coffee offer
- Base Earn Reward: 490 points
- Discount Reward: $11.00
- $9.00 off Carrots and redeeming the targeted Carrot offer
- $2.00 off Soap and redeeming the open Soap offer
- Alternative Rewards: A coupon
- A coupon for future use for redeeming the open Pizza offer that will award 1000 points for spending $10
Product ExclusionsGlobal Product Restrictions configured on AIR Dashboard have kicked in, therefore Wine is excluded from the adjudication of all campaigns. Scheme configurations have also kicked in and Wine is also excluded from base earn calculation.
Minimum Recommended Fields for Wallet Open API
Below is a list of minimum recommended fields for the Wallet Open API for a typical POS Connect integration. Refer to Wallet Open API documentation for field definitions and additional attributes, should they be required.
Request
Expand to see the list of minimum recommended fields
Header
| Field | Recommended |
|---|---|
| X-POSCONNECT-TRANSACTION-DATETIME | yes |
Body
| Field | Recommended |
|---|---|
| identity | yes |
| identity.identityValue | yes |
| reference | yes |
| location | yes |
| location.incomingIdentifier | yes |
| location.parentIncomingIdentifier | yes |
| basket | yes |
| basket.type | yes |
| basket.summary | yes |
| basket.summary.totalItems | yes |
| basket.summary.totalBasketValue | yes |
| basket.contents | yes |
| basket.contents.upc | yes |
| basket.contents.saleskey | yes |
| basket.contents.description | yes |
| basket.contents.itemUnitCost | yes |
| basket.contents.itemUnitCount | yes |
| basket.contents.totalUnitCost | yes |
| basket.contents.totalUnitCostAfterDiscount | yes |
| lock | yes |
| options | yes |
| options.adjudicatePointsSpend | yes; pass as true |
| options.adjudicatePointsSpend.enabled | yes; pass as true |
| options.adjudicatePointsSpend.includeOpenOffers | yes; pass as true |
| options.adjustBasket | yes; pass as true |
| options.adjustBasket.enabled | yes; pass as true |
| options.adjustBasket.includeOpenOffers | yes; pass as true |
| options.analyseBasket | yes; pass as true |
| options.analyseBasket.enabled | yes; pass as true |
| options.analyseBasket.includeOpenOffers | yes; pass as true |
Default Options
- Although
includeOpenOffersis recommended to betrue, if open offers are not in scope and open campaigns do not exist, then these will not be adjudicated.- Although
adjudstBasketis recommended to be enabled, if discount offers are not in scope and campaigns with discount rewards do not exit then these will not be adjudicated.- Although
analyseBasketis recommended to be enabled, if points offers are not in scope and campaigns with points rewards do not exit then these will not be adjudicated.- Although
adjudicatePointsSpendis recommended to be enabled, if the loyalty program does not offer points reward, then the result of the adjudication can be ignored.
Updated about 4 hours ago
Visit the below pages to learn about:
- High level POS Connect integration
- How to settle a POS Connect transaction
