Campaign Create Recipe - Quest
📌 Purpose
The Quest campaign enables gamification and a reward of points and an optional coupon when the customer completes objectives. Objectives are the redemption of coupons in their wallet. When a quest coupon account is added to the wallet, an account for each campaign objective is also added.
To earn the points reward, customers must redeem the required amount of objectives. At least one objective is needed, and a minimum can be set to a value less than the number of objectives if needed.
For more campaign options, refer to the Campaigns Create API reference and Campaign Best Practices.
🖼 Recipe Overview
This recipe will show you the steps to create a campaign that rewards the customer with a coupon for a free coffee after completing 10 transactions purchasing a qualifying product. The campaign will have the following setup:
- Qualification: redemption of three coupon accounts (objectives)
- Reward: 750 points
- Redeemable at one banner and all stores within it
- All objectives are required to be redeemed to get the reward
📋 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
- Product UPCs associated to the banner unit
- Three campaigns created. See Campaign Recipes for more information on how to setup your campaigns.
📤 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: Define Your Campaign Setup
This step defines which products qualify for the offer, where it's valid, how many stamps are in a single rotation, and the campaign timeline.
- 1.1 Campaign Name: Select a name for the campaign in the details container e.g. Get 750 points after redeeming three coupons
- 1.2 Campaign timing: Define the startDate and endDate
- 1.3 Redemption Period: In rules.start and rules.expiry, set the coupon expiry dates expiry the same date as the campaign end date
- 1.4 Redemption Locations: In partners.redemption, add the unitId for any banners where the coupon can be redeemed
- 1.5 Select the appropriate type and offerType for a Quest campaign (additional types can be found on the Campaign Create Via API page:
- type: QUEST
- offerType: QUEST_FIXED_POINTS
- 1.6 Use the banners incomingIdentifier as the key for offer.qualification.locations
- 1.8 Setup the relationships object with the campaignIds in the objective.campaign array
- 1.7 Product Reward:
- Set the reward.standard.points object to include the schemeId to issue the points against and the points creditAmount
Step 2: Call POST /campaigns
{
"type": "QUEST",
"status": "ACTIVE",
"class": "COUPON",
"details": {
"name": "Get 750 points after redeeming three coupons",
"alternativeName": "",
"description": "",
"alternativeDescription": "",
"printerMessage": null,
"screenMessage": null,
"tags": [],
"startDate": "2025-08-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"mode": "TARGETED"
},
"settings": {
"tokenProvider": "EES",
"tokenFormat": "000000001",
"walletEnabled": true,
"issuanceMethod": null,
"accountClientType": "OFFER",
"defaultAccountClientState": "LOADED"
},
"partners": {
"creation": [],
"redemption": [
{
"partner": "220673",
"redemptionLimit": null
}
]
},
"rules": {
"creation": {
"campaignLimit": null,
"consumerLimit": 1,
"consumerLimitActive": null,
"windows": {
"active": false
}
},
"verification": {
"lock": false,
"lockOnVerify": true
},
"redemption": {
"campaignLimit": null,
"couponLimit": 1,
"windows": {
"active": false
},
"dates": {
"exclusion": {
"active": false
}
}
},
"refund": {
"refundable": true,
"unredeemable": false
},
"expiry": {
"type": "AFTER_CREATION",
"valueType": "DAY",
"value": "60",
"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": {
"objective": {
"campaign": [
{
"campaignId": "101161654"
},
{
"campaignId": "101476655"
},
{
"campaignId": "101490139"
}
]
}
},
"offer": {
"offerType": "QUEST_FIXED_POINTS",
"qualification": {
"locations": null,
"product": null,
"basket": null,
"globalProductRestrictions": {
"enabled": true
}
},
"reward": {
"basket": null,
"product": null,
"standard": {
"value": null,
"points": {
"schemeId": "101161519",
"creditAmount": 750,
"multiplierValue": null
}
}
}
},
"version": 2
}{
"id": "101490156",
"type": "QUEST",
"status": "ACTIVE",
"class": "COUPON",
"details": {
"name": "Get 750 points after redeeming three coupons",
"alternativeName": "",
"description": "",
"alternativeDescription": "",
"printerMessage": null,
"screenMessage": null,
"tags": [],
"startDate": "2025-08-01T00:00:00+00:00",
"endDate": "2025-12-31T23:59:00+00:00",
"mode": "TARGETED"
},
"settings": {
"tokenProvider": "EES",
"tokenFormat": "000000001",
"walletEnabled": true,
"issuanceMethod": null,
"accountClientType": "OFFER",
"defaultAccountClientState": "LOADED"
},
"partners": {
"creation": [],
"redemption": [
{
"partner": "220673",
"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": 1,
"allowOverride": null,
"allowAccountOverride": null,
"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": {
"refundable": true,
"unredeemable": false
},
"locations": null,
"expiry": {
"type": "AFTER_CREATION",
"valueType": "DAY",
"value": "60",
"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": {
"objective": {
"campaign": [
{
"campaignId": "101161654",
"dateCreated": "2025-08-22T15:05:33+00:00"
},
{
"campaignId": "101476655",
"dateCreated": "2025-08-22T15:05:33+00:00"
},
{
"campaignId": "101490139",
"dateCreated": "2025-08-22T15:05:33+00:00"
}
]
}
},
"reference": "101490156",
"offer": {
"offerType": "QUEST_FIXED_POINTS",
"qualification": {
"locations": null,
"product": null,
"basket": null,
"globalProductRestrictions": {
"enabled": true
},
"tenders": null,
"identityTypes": null
},
"reward": {
"basket": null,
"product": null,
"standard": {
"value": null,
"points": {
"schemeId": "101161519",
"creditAmount": 750,
"multiplierValue": null
}
}
},
"promoId": null
},
"version": 2,
"dateCreated": "2025-08-22T15:05:33+00:00",
"lastUpdated": "2025-08-22T15:05:33+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
- Objectives are set with three distinct campaigns
- Redemption banners are correctly listed by unitId and incomingIdentifier
- Create a coupon account to test and validate the coupon can be issued
- Redeem each of the three coupon account objectives to verify the 750 points are added to the wallet as expected
🔧 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 4 hours ago
