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 NamePurpose
campaignIdUsed 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.

.