Saltar al contenido principal

Legal Pages

The platform ships three public legal pages for every tenant and a per-campaign terms-of-participation mechanism for consent capture in loyalty and raffle flows.

Public pages

Three URLs are served by the platform on the public site:

  • /legal/privacy — Privacy Policy.
  • /legal/terms — Terms of Service.
  • /legal/cookies — Cookies Policy.

The three pages share a navigation shell so a visitor can flip between them with one click. They're linked from the public landing footer.

The Cookies page documents four categories of cookies the platform uses:

  1. Strictly necessary — session, CSRF, locale.
  2. Analytics — Google Analytics 4 (opt-in via the cookie banner).
  3. Preference — UI choices (opt-in via the cookie banner).
  4. Third-party — Google, Meta, Stripe (opt-in via the cookie banner).

Campaign terms (per-campaign T&C)

When a member participates in a campaign — registers, claims an instant-win, enters a raffle — you may need to record their explicit consent to a specific terms version (e.g. "Spring 2026 raffle terms v3").

The platform models this as a terms version per campaign:

  • A campaign has zero or more versions of its terms.
  • One version can be active at a time.
  • A MemberConsent row is written whenever the accept_terms action runs in a conversation flow — tying that member to the active version.

The active version can be linked from anywhere via a public URL:

GET /api/public/legal-terms/{campaignSlug}
GET /api/public/legal-terms/{campaignSlug}/{version}

Both URLs are anonymous — participants can read the legal bases before registering, no account required. The admin Copy public link button gives you the URL to drop in flows, emails, or QR codes.

Step-by-step

The three public pages are seeded from default templates the first time the tenant goes live. To customise the content:

  1. Go to Organization → Legal pages (host admin) or Settings → Legal (tenant admin).
  2. Open Privacy, Terms, or Cookies.
  3. Edit the content. The platform uses a Mustache renderer, so you can include placeholder variables for tenant name, address, contact email, etc.
  4. Save. The public URL updates immediately.

Create a campaign terms version

  1. Open the campaign.
  2. Go to Legal → Terms versions and click New version.
  3. Enter the version label (e.g. v1.0) and the body.
  4. Set the version to Active. (You can keep older versions around for audit.)
  5. The public link is shown — copy it into your conversation flow or landing page.

In the conversation flow, add the accept_terms action at the point where the contact agrees to participate. The platform looks up the campaign's currently-active terms version and writes a MemberConsent row pinning the member to that version.

Limits and gotchas

  • Active version is enforced. accept_terms throws if no terms version is active for the campaign. Create and activate the version before launching the flow.
  • Old consents stay tied to the version that was active when they were signed. Even if you publish v4 next month, last month's consents remain on v3 — which is correct for legal evidence.
  • Public URLs are anonymous and indexable unless you add a noindex directive yourself. If your terms are sensitive, gate them behind the member portal instead.
  • The Mustache renderer is sandboxed. You can't run arbitrary code in templates, only substitute named variables.