Earning rules
Go to Loyalty → Earning Rules to define how contacts accumulate points.
Scope: brand vs outlet (Shape B)
Earning rules are a multi-row scoped substrate — a workspace can have many rules, each scoped to either the whole brand or a specific outlet. The list shows a scope badge on every row; a scope filter above the table narrows the view (All tiers / Brand defaults / This outlet). The create / edit dialog asks where the rule should apply.
| Scope | Where it applies | Where you author it |
|---|---|---|
Brand (location_id is null) | Every outlet under this brand, unless an outlet-scoped rule overrides | Loyalty workspace page with the chip strip on “All outlets” — the brand-tier card mounts above the workspace list |
Outlet (specific location_id) | Only that outlet | Same page with the chip strip narrowed to one outlet |
The chip strip’s ?location= URL state is the scope picker — there is no separate /dashboard/defaults route.
Rule types
Purchase-based
Award points proportional to purchase value:
- Rate — points per unit of currency (e.g., 1 point per ₹100 spent)
- Qualifying events — which purchase events count (
order_completedby default) - Exclusions — exclude specific product categories or discount orders
Event-based
Award points when a contact performs a specific action:
- Event name — any tracked event (e.g.,
review_submitted,referral_link_shared,profile_completed) - Points — fixed amount per event
- Cooldown — prevent gaming (e.g., max 1 review reward per day)
Referral-based
Award points when a referred contact converts:
- Referrer reward — points for the person who referred
- Referee reward — points for the new contact (welcome bonus)
- Qualifying event — what the referee must do (first purchase, signup, etc.)
Manual
Award points via the admin UI or API — useful for customer service gestures, contest prizes, or migration from another loyalty platform.
Tier multipliers
If you have tiers configured, earning rules can apply multipliers:
- Bronze: 1x (base rate)
- Silver: 1.5x
- Gold: 2x
A Gold member spending ₹1,000 earns 20 points instead of 10 (at 1 point per ₹100 base).
One-time retrofit note (historical rules)
In May 2026 we corrected two pre-existing bugs on the earning-rule substrate: CREATE was not stamping workspace_id (every rule silently went to brand tier), and LIST hid brand-tier rows from workspace operators. After the fix, every rule that existed before the sweep shows as “Brand default” in the new scope badge column — there’s no way to recover the operator’s original intent for those rows.
If you ran a multi-outlet chain on the old behaviour and want certain rules to be outlet-specific:
- Filter the table by Brand defaults
- Identify any rule whose intent was “this outlet only”
- Deactivate the brand-tier rule
- Re-create the rule at the correct scope via the dialog
Rules created after the sweep land at the scope you pick in the dialog.