Skip to content

Loyalty memberships and CSV enrollment

Manage who belongs to each tier from Loyalty → Tiers, customer tools, packs, CSV, or auto-enroll—when Loyalty is enabled.

Import enrollments dialog on a tier, with CSV file picker, sample template link, and the action/customer_id/tag_uid/reference/validity_days/expires_at column list

How a membership works

Each customer has at most one membership per loyalty program.

ConceptMeaning
MembershipStable link: customer ↔ program (keeps history across periods)
PeriodCurrent validity window (started_at → expires_at; blank expiry = open-ended)
TierCurrent level on the ladder (higher rank = higher tier)
Statusactive (period in force), scheduled (starts in the future), expired / inactive

Scheduled memberships (future started_at, e.g. ticket valid_from) can still receive pack reward grants; redeeming those benefits usually waits until the member is active.

Ways to enroll

SourceTypical useDowngrade allowed?
Pack (Catalog → Packs → Loyalty tier)Check-in / Box Office / ticket applyNo — keeps higher tier
Dashboard / CSV / adminManual enroll, bulk import, customer toolsYes — admin can move to a lower tier
Auto-enroll (program setting)First wallet activity → base tierDoes not change an already-active tier

Pack expiry for the membership (validity days / end date on the pack, or ticket line valid_to) is separate from pack entitlement expiry (credits/accesses).

Validity (how long the period lasts)

When starting or extending a period, Opera picks an end date in this order:

  1. Pack Membership end date and/or Membership validity (days) if set on the pack
  2. Else ticket/order line valid_to when the pack came from a catalog order
  3. Else program defaults (rolling days and/or season end)
  4. Else no expiry (open-ended)

If both a fixed end date and rolling days are set, the earlier of the two wins.

Collisions: pack or enrollment vs existing membership

When someone is already a member and another enroll happens (another pack, CSV row, admin enroll), Opera resolves by tier rank and source.

Summary matrix

Current stateIncoming enrollResultValidity / period
No membership / expiredAny tierEnrolled or re-enrolledNew period with resolved expiry
Active, same tierSame tier again (e.g. second same pack)ExtendedCurrent period ended; new period starts now with new expiry
Active, lower tierHigher-rank tierUpgradedTier changes on the same period — expiry is not reset by the upgrade
Active, higher tierLower-rank tier via packKept higherNo tier change, no period change
Active, higher tierLower-rank via admin/CSVDowngradedTier changes on the same period — expiry unchanged
ActiveAuto-enroll base tierNo changeActive members are left alone

Upgrade (Silver → Gold)

Example: guest is Silver; a Gold pack is applied.

  • Membership becomes Gold.
  • Current membership period (and its end date) continues.
  • Pack validity days / end date do not replace the existing period end on upgrade.
  • Tier-upgrade rules/rewards may fire (subject to caps such as once per customer).
  • Pack-bundled loyalty rewards on that pack are still issued when the membership is grantable.

To give Gold and a longer membership window, use a same-tier Gold pack again after upgrade (extension), or set a longer period via admin / a dedicated extension pack at the same tier.

Downgrade (Gold → Silver)

ChannelBehavior
PackIgnored for tier — guest stays Gold (kept_higher). Pack credits/accesses and pack loyalty rewards can still apply.
Admin / CSVAllowed — guest becomes Silver on the same period (expiry unchanged).

Validity extension (same tier again)

Example: guest is already Gold until 1 June; another Gold pack (or admin enroll to Gold) is applied with 30 validity days.

  • Outcome: extended.
  • Previous period is closed; a new period starts at application time.
  • New expires_at comes from the pack / ticket / program rules above (e.g. now + 30 days).

This is the supported way to renew or lengthen membership without changing tier.

Pack without a tier (rewards only)

A pack can grant loyalty rewards without selecting a tier. If the guest has no grantable membership, side effects that need a member may be skipped; prefer attaching a tier (or ensure they are already members) when bundling rewards.

Enroll from the UI

  1. Open your event in Dashboard.
  2. Open Loyalty → Tiers (or the customer loyalty tools).
  3. Select the tier and enroll the customer or tag.

You can also bulk-enroll from the Customers area when Loyalty is on for the event. Admin enrollments may downgrade.

CSV enrollment (per tier)

Prepare a UTF-8 CSV with these headers:

ColumnDescription
actionenroll or end
customer_idCustomer id when known
tag_uidTag UID to enroll
referenceAlternate reference when used
validity_daysOptional membership length in days
expires_atOptional explicit expiry
  1. Open the tier’s enrollment / import action in Dashboard.
  2. Upload the CSV.
  3. Review results for skipped, upgraded, downgraded, or extended rows.

CSV enroll into a tier uses the same collision rules as admin (downgrade allowed). Ending (action=end) closes the active membership period.

Ending membership

Ending a membership (UI, CSV end, or admin) closes the current period. Benefits that depend on an active member stop; historical periods and tier assignments remain for support and reporting.