Campaign Create Recipe - Discount Basket

📌 Purpose

Discount campaigns are a proven way to incentivize spend and reward customers at the point of purchase. This recipe walks you through setting up a Discount Basket campaign, where a customer receives a fixed monetary discount when they spend a certain amount.

For additional campaign options, visit the Campaigns Create API reference and Campaign Best Practices.

🖼 Recipe Overview

This recipe will help you create a campaign that issues a £10 discount when a customer spends £60 or more, with the following setup:

  • Tagged as an initial offer
  • Limited to 1 use per customer
  • Reward: £10 off when the basket total is at least £60
  • Valid for 14 days from the date the coupon is issued
  • Redeemable at multiple banners and all their stores

Once created, this campaign can be linked to wallet creation flows or triggered manually for selected customers.

📋 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
  • Basket or product qualification to earn the reward

📤 Outputs

After completing this recipe, capture the following output:

Output NamePurpose
campaignIdUsed to create accounts with wallets or retrieve campaign details

📒 Steps

Step 1: Define Your Campaign Setup

This step sets the business rules, including who gets the offer, when, where, how much they must spend, and what they get in return.

  • 1.1 Campaign Name: Select a name for the campaign in the details container e.g. Initial Offer: £10 off £60 spend
  • 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 Discount Basket with a basket qualification (additional types can be found on the Campaign Create Via API page:
    • type: DISCOUNT_BASKET
    • offerType: FIXED_AMOUNT_OFF_BASKET
  • 1.7 Qualification Criteria:
    • Set the offer.qualification.basket.minimumBasketSpend amount as the qualification to get the reward
    • Minimum spend: 6000 (represents £60.00 in lowest 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.
    • Discount amount: 1000 (represents £10.00)

Step 2: Call POST /campaigns

{
	"class": "COUPON",
	"version": 2,
	"status": "ACTIVE",
	"details": {
		"name": "Initial Offer: 10.00 off 60.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": "DISCOUNT_BASKET",
	"offer": {
		"offerType": "FIXED_AMOUNT_OFF_BASKET",
		"qualification": {
			"basket": {
				"minimumBasketSpend": 6000
			},
			"locations": {
				"banner1": {
					"included": null,
					"excluded": null
				},
				"banner2": {
					"included": null,
					"excluded": null
				}
			}
		},
		"reward": {
			"standard": {
				"value": {
					"discountAmount": 1000,
					"percentageAmount": null
				}
			}
		}
	}
}
{
	"id": "101139416",
	"type": "DISCOUNT_BASKET",
	"status": "ACTIVE",
	"class": "COUPON",
	"details": {
		"name": "Initial Offer: 10.00 off 60.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": "101139416",
	"offer": {
		"offerType": "FIXED_AMOUNT_OFF_BASKET",
		"qualification": {
			"basket": {
				"minimumBasketSpend": 6000
			},
			"locations": {
				"banner1": {
					"included": null,
					"excluded": null
				},
				"banner2": {
					"included": null,
					"excluded": null
				}
			},
			"tenders": null,
			"identityTypes": null
		},
		"reward": {
			"standard": {
				"value": {
					"discountAmount": 1000,
					"percentageAmount": null
				}
			}
		},
		"promoId": null
	},
	"version": 2,
	"dateCreated": "2025-06-10T21:29:34+00:00",
	"lastUpdated": "2025-06-10T21:29:34+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 discountAmount
  • 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.