Campaign Create Recipe - Points Fixed
📌 Purpose
Fixed points campaigns are an effective way to reward customers for hitting a spend threshold. This recipe shows how to create a campaign that grants a set number of loyalty points when a customer spends a minimum amount.
For broader use cases and guidance, refer to the Campaigns Create API reference and Campaign Best Practices.
🖼 Recipe Overview
You will create a targeted campaign that issues 500 loyalty points when a customer spends £30.00 or more, with the following setup:
- Tagged as an initial offer for easy reference
- Limited to 1 use per customer
- Redeemable at multiple banners and all their stores
- Coupon expires 14 days after being issued
- Points are credited to the customer’s loyalty account using a defined scheme
Once live, this campaign can be issued at wallet creation or manually triggered as part of a customer journey.
📋 Prerequisites
- Access to the Eagle Eye API platform
- Your company unit’s clientId and secret
- Active 3-level unit hierarchy (Company > Banner > Store)
- unitId and incomingIdentifier for all redemption partners (banners)
- Start and end dates for the campaign period
- Defined basket or product-level qualification (in this recipe, basket spend)
📤 Outputs
After completing this recipe, capture the following output:
| Output Name | Purpose |
|---|---|
| campaignId | Used to create accounts with wallets or retrieve campaign details |
📒 Steps
Step 1: Prepare the request payload
- 1.1 Campaign Name: Select a name for the campaign in the details container e.g. Initial Offer: 500 points when you spend £30
- 1.2 Campaign timing: Define the startDate and endDate
- 1.3 Tag as an initial offer for new wallets created: Add initialOffers as a tag in details.tags
- 1.4 Redemption Period: In rules.start and rules.expiry, set the coupon expiry dates expiry to 14 days after creation
- 1.5 Redemption Locations: In partners.redemption, add the unitId for any banners where the coupon can be redeemed
- 1.6 Select the appropriate type and offerType for Points Fixed with a basket qualification (additional types can be found on the Campaign Create Via API page:
- type: POINTS_FIXED
- offerType: FIXED_POINTS_BASKET
- 1.7 Qualification Criteria:
- Set the offer.qualification.basket.minimumBasketSpend amount as the qualification to get the reward
- minimumBasketSpend: 3000 (equivalent to £30.00 in smallest denomination)
- 1.8 Use the banners incomingIdentifier as the key for offer.qualification.locations
- 1.9 Reward:
- Set the reward.standard.value.discountAmount as the reward the customer will receive.
- creditAmount: 500 points
- schemeId: your active loyalty program scheme
Step 2: Call POST /campaigns
{
"class": "COUPON",
"version": 2,
"status": "ACTIVE",
"details": {
"name": "Initial Offer: 500 points when you spend 30.00",
"alternativeName": null,
"description": null,
"alternativeDescription": null,
"printerMessage": null,
"screenMessage": null,
"tags": [
"initialOffers"
],
"startDate": "2025-06-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:59+00:00",
"mode": "TARGETED"
},
"settings": {
"tokenProvider": null,
"tokenFormat": null,
"walletEnabled": true,
"accountClientType": "OFFER",
"defaultAccountClientState": "UNLOADED"
},
"rules": {
"creation": {
"campaignLimit": null,
"consumerLimit": 1,
"consumerLimitActive": null
},
"verification": {
"lock": false,
"lockOnVerify": true
},
"redemption": {
"campaignLimit": null,
"allowAccountOverride": true
},
"start": {
"type": "IMMEDIATELY",
"valueType": null,
"value": null,
"date": null
},
"expiry": {
"type": "AFTER_CREATION",
"valueType": "DAY",
"value": "14",
"date": null
}
},
"partners": {
"redemption": [
{
"partner": "151926",
"redemptionLimit": null
},
{
"partner": "151930",
"redemptionLimit": null
}
]
},
"windows": {
"creation": [],
"redemption": []
},
"type": "POINTS_FIXED",
"offer": {
"offerType": "FIXED_POINTS_BASKET",
"qualification": {
"basket": {
"minimumBasketSpend": 3000,
"minimumUnits": null
},
"locations": {
"banner1": {
"included": {
"locationIdentifiers": null,
"locationTags": null
},
"excluded": {
"locationIdentifiers": null,
"locationTags": null
}
},
"banner2": {
"included": {
"locationIdentifiers": null,
"locationTags": null
},
"excluded": {
"locationIdentifiers": null,
"locationTags": null
}
}
}
},
"reward": {
"standard": {
"value": null,
"coupons": null,
"points": {
"schemeId": "100128379",
"creditAmount": 500
}
}
}
}
}{
"id": "101139352",
"type": "POINTS_FIXED",
"status": "ACTIVE",
"class": "COUPON",
"details": {
"name": "Initial Offer: 500 points when you spend 30.00",
"alternativeName": null,
"description": null,
"alternativeDescription": null,
"printerMessage": null,
"screenMessage": null,
"tags": [
"initialOffers"
],
"startDate": "2025-06-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:59+00:00",
"mode": "TARGETED"
},
"settings": {
"tokenProvider": "EES",
"tokenFormat": "000000001",
"walletEnabled": true,
"issuanceMethod": null,
"accountClientType": "OFFER",
"defaultAccountClientState": "UNLOADED"
},
"partners": {
"creation": [],
"redemption": [
{
"partner": "151926",
"redemptionLimit": null
},
{
"partner": "151930",
"redemptionLimit": null
}
]
},
"rules": {
"creation": {
"campaignLimit": null,
"consumerLimit": 1,
"consumerLimitActive": null,
"windows": {
"active": false
}
},
"adjudication": {
"excludedProducts": null
},
"verification": {
"lock": false,
"lockOnVerify": true
},
"redemption": {
"maxRedemptionsPerPeriod": null,
"campaignLimit": null,
"couponLimit": null,
"allowOverride": null,
"allowAccountOverride": true,
"maximumAccountUsage": null,
"maximumDiscountableRelatedContents": null,
"maximumAccountsPerTransaction": null,
"windows": {
"active": false
},
"dates": {
"exclusion": {
"active": false
}
},
"timeBetweenRedemptions": null,
"timeBetweenStamps": null,
"allowMultipleRedeem": null,
"isHiddenFromRelatedWallets": false,
"redeemableOutsideOwningWalletWithIdentity": false,
"redeemableOutsideOwningWalletWithoutIdentity": false
},
"refund": [],
"locations": null,
"expiry": {
"type": "AFTER_CREATION",
"valueType": "DAY",
"value": "14",
"date": null
},
"start": {
"type": "IMMEDIATELY",
"valueType": null,
"value": null,
"date": null
},
"graceAmount": null,
"useLocalTime": null,
"maxCreditsPerPeriod": null
},
"windows": {
"creation": [],
"redemption": []
},
"dates": {
"redemption": {
"redemption": [],
"exclusion": []
}
},
"relationships": null,
"reference": "101139352",
"offer": {
"offerType": "FIXED_POINTS_BASKET",
"qualification": {
"basket": {
"minimumBasketSpend": 3000,
"minimumUnits": null
},
"locations": {
"banner1": {
"included": {
"locationIdentifiers": null,
"locationTags": null
},
"excluded": {
"locationIdentifiers": null,
"locationTags": null
}
},
"banner2": {
"included": {
"locationIdentifiers": null,
"locationTags": null
},
"excluded": {
"locationIdentifiers": null,
"locationTags": null
}
}
},
"tenders": null,
"identityTypes": null
},
"reward": {
"standard": {
"value": null,
"coupons": null,
"points": {
"schemeId": "100128379",
"creditAmount": 500
}
}
},
"promoId": null
},
"version": 2,
"dateCreated": "2025-06-10T20:45:01+00:00",
"lastUpdated": "2025-06-10T20:45:01+00:00"
}✅ Business Readiness Checklist
Use these steps to validate the setup of your scheme:
- Retrieve the campaign via GET /campaigns/campaignId to validate setup
- Start and end dates are set as expected
- Tag is correctly set to "initialOffers"
- Coupon expiry is set to 14 days after creation
- Spend qualification logic is correct (basket spend)
- Redemption banners are correctly listed by unitId and incomingIdentifier
- Reward setup reflects the correct creditAmount and linked to the correct schemeId
- Create a coupon account to test and validate the coupon can be issued
🔧 Troubleshooting Tips
Issue | Possible Cause & Resolution |
|---|---|
400 Bad Request | Check all required fields, including description and alternativeDescription. These can be null but must be present. |
Invalid redemption partner | Confirm each unitId is correct and belongs to a valid redemption partner under your company’s clientId. Use GET /units/unitId to verify. |
.
Updated about 5 hours ago
