Rule parameters
marketer-tunableMoney rules first, then the conditions that decide who qualifies. Every offer stores the settings it was produced under, so a change never rewrites history.
What a deal can cost
The hard ceiling for any offer, any fan, any strategy.
The price incentive for a fan with no ticket history in soft inventory.
Only in soft or medium inventory. Hot sections get a perk instead.
Auto-approve eligible offers
Off by default. With a ceiling of 0, only no-discount offers (reminders, group perks, concierge) are sent automatically; a discount offer still waits for a person. Every auto-approval re-checks consent, the global cap, the high-demand guard, the copy validator, and the frequency cap. The send is marked auto in the queue and the audit log.
Inventory pressure
At or above this sell-through, no price discount is allowed.
Between this and high demand, inventory is neither scarce nor distressed.
Above this sell-through, a first-time fan no longer qualifies for the discount.
Zeroes any discount on hot inventory even if a strategy asks for one.
Who qualifies
At or above this party size, a group bundle can be proposed.
At or above this, the fan gets the loyalty treatment.
At or above this 12-month shop spend, the fan gets the loyalty treatment.
When a guest email matches no profile, create one with the checkout's consent.
Timing & frequency
Same fan and same match inside this window is one intent.
A fan who received an offer is not eligible again inside this window.
Younger carts are deferred, not treated as abandoned.
Measurement & copy
Off uses the curated, human-written templates only. On asks the provider for a short rationale for the marketer; the fan copy stays human-written.
Planning assumption for the projected win-back KPI only. It never decides an offer.
AI rationale provider
The model writes only the marketer's rationale. Fan copy is always the curated template. The offer, discount, channel, and audience are decided in code.
Promo redemption seam
single-use checkThe ticketing system is the real authority on redemption. This endpoint exercises the ledger this service keeps: a code is bound to one sent offer and a second redemption is rejected. Try it twice with the same code.
Stored as one JSON row in app_settings under the key engine, merged over the code defaults and validated with a strict schema. Each offer keeps a snapshot of the effective values.