API late March 2026 improvements
Additional API features, improvements and fixes that shipped to production in late March 2026, on top of the earlier mid-March 2026 release.
- Added a new composable campaign type that combines configurable reward-handling behaviour (
independentorrandom_draw, for example competition-draw rewards), reward methods with their own restrictions, usage limits and usage costs, and voucher-style rewards. Composable campaigns can also be triggered viainteract-campaignfor scratch-card-style flows. - Added a
rewards_handling_behaviourfield (independent/random_draw) on composable campaigns. - Added a
usage_costrestriction on composable campaigns so that a wallet balance is deducted per interaction. - Added
usage_limitandselectionfields on reward methods, including competition-style random-draw weighting. - Added reward-method-level restrictions (
currency,business,basket_item) so that spend-context restrictions can be applied directly to a reward method. - Added an
honour_voucherreward-method type withhonour_codeconfiguration. - Added member-number-range fields to chain endpoint responses.
- Added a chain-level setting that controls how long after a user is created a
referral_codecan still be applied to trigger referral-campaign rewards. - Added a new
auth/apply-referral-codeendpoint so that an existing user can submit a referral code after signup (within the chain's configured submission window). - Added explicit
is_defaultcreate and alter handling to loyalty campaigns, with the API enforcing that only one active default loyalty campaign can exist per chain. - Changed loyalty-level-change side effects so they are only triggered for the campaign that owns the progress entry, preventing duplicate side effects when a chain has multiple active loyalty campaigns.
- Improved database performance for voucher and voucher-distribution reporting through additional database indexes.
- Fixed
min_earn_quantityhandling for fixed-monetary and quantity-unit basket campaigns so that an emptymin_earn_quantityno longer triggers a type error, and a submitted value of0is preserved rather than silently coerced to1. - Fixed
claim-basketso that campaign barcode assignments are preloaded consistently withadd-basket, ensuring only items matching a campaign's barcode-assignment list qualify for rewards. - Fixed
delete-voucherandexpire-voucherso they no longer delete or expire a voucher that has already been redeemed (previously this could incorrectly restore wallet balance for wallet-campaign vouchers).