Overview
DASHBOARD GUIDE

Monetization

The Monetization dashboard is where you set up paid memberships, donation campaigns, supporter perks, gift codes, and discount coupons — and where you watch the money come in.

Path
DashboardMonetization
Module
monetization
Required permission
monetization.view

Before you start

Monetization talks to Stripe and to your Discord roles. Have these ready before you sit down to configure plans.

  • A Stripe account connected to your SYNTHET workspace.
  • For each subscription plan: an existing Stripe Price ID.
  • The role you want each plan or perk to grant — created in Discord first.
  • A Discord channel where you want to post the storefront and offer embeds.
  • The monetization.view capability (and monetization.manage for editing).

What you'll see

Eight tabs across the top of the page. The first four cover the offer types, then gifting, coupons, revenue, and audit.

Overview
Subscriptions
Donations
Perks
Gifting
Coupons
Revenue
Audit
Overview
MRR, paid members, active plans, and campaign counters; plan distribution chart and recent campaigns.
Subscriptions
Create, edit, hide, or delete recurring plans wired to Stripe Price IDs.
Donations
Toggle donations on, configure campaigns, and add donation tiers and rewards.
Perks
Define what subscribers actually get: role grants, XP boosts, custom badges, channel access.
Gifting
Generate one-time gift tokens for any plan and track their redemption.
Coupons
Issue percentage or fixed-amount discount codes with optional max-uses and expiry.
Revenue
Monthly revenue chart and a plan-distribution breakdown.
Audit
Paginated log of every monetization configuration change, who made it, and when.
Discord embed strip
On the Subscriptions, Donations, and Gifting tabs a yellow strip shows the configured embed channel and a one-click Post to Discord button. Post full store on every tab posts the combined storefront embed to that channel.

Overview tab

The landing tab. It is read-only and built from the other tabs' data.

Stats strip

Four counters: MRR (current monthly recurring revenue in dollars), Paid members (active subscribers across all plans), Active plans (plans with the visibility toggle on), and Campaigns (number of donation campaigns).

Plan distribution chart

A breakdown of which subscription plans your paying members are on. When there are no plans yet the chart is replaced by an empty-state card pointing you at Subscriptions.

Recent campaigns

The three most recent donation campaigns with their progress bars. If donations are off, this card sits empty.

Subscriptions tab

Where you define paid memberships. Each plan is a card with a header, a per-plan stats row, and an actions cluster.

  • The Create plan button at the top right opens the plan dialog.
  • Each plan card shows the plan name, the price and interval, the role granted, the active subscriber count, and the bullet list of perks.
  • Three icon buttons per card: visibility (eye), edit (pencil), delete (trash). Hidden plans are excluded from the storefront embed.

Plan dialog fields

Plan nameText input

Public-facing name. Shown on the storefront and inside Discord embeds.

Example: Supporter

PriceNumber

Numeric price in your Stripe currency. Display only — Stripe enforces the actual amount via the Price ID.

Example: 5

IntervalDropdown

Monthly or yearly billing cadence.

Example: monthly

Role grantRole picker

Discord role assigned for the lifetime of the subscription.

Example: @Supporter

PerksText input

One perk per line. Plain text bullets; rendered on the plan card and embed.

Stripe Price IDText input

Required. The price_xxx identifier from your Stripe dashboard.

Example: price_1OabcDE...

Display price textText input

Optional. Overrides the rendered price ($5/mo) with a custom string for tax-inclusive locales.

Example: £4.99/mo

Donations tab

Two cards: a master donations toggle, and the campaigns list.

Enable donations

A single toggle. When off, the rest of the donations UI hides — and donation links and slash commands stop responding.

Campaigns

Each campaign has a name, a goal amount, an optional deadline, and a status: Active, Paused, Completed, or Cancelled. Campaigns support per-tier rewards (donate $25 to get this role, donate $100 to get a custom badge). A live progress bar appears on the Overview tab and on the Discord embed.

Perks tab

Perks define what subscribers actually receive. They can be referenced from any plan.

Role grant
Adds a Discord role for the lifetime of the subscription.
XP boost
Multiplies leveling XP gain. Pair with the Leveling module.
Custom badge
Renders a small badge on profile cards and in the leaderboard.
Channel access
Unlocks a private channel by giving the subscriber the channel's access role.

Per-perk fields

Perk nameText input

Public name. Shown on storefront cards.

Example: VIP voice access

TypeDropdown

One of role grant, xp boost, custom badge, or channel access.

ValueText input

The configuration string for the chosen type — a role ID, a multiplier, a badge image URL, or a channel ID.

Example: 1.5

Required tierText input

The plan name this perk belongs to. Leave blank to make the perk available across every paid plan.

Example: Gold

Gifting tab

Generate one-time tokens that gift a paid plan to another member.

Enable gifting

A toggle and one numeric field. Gift message max length caps how many characters the giver can write on the gift card.

Generate gift tokens

Pick a plan, pick a quantity (1 to 100), click Generate. A new card appears below with the codes; click any code to copy it.

Token table

Three columns: Code, Plan, Status (active, redeemed, or expired). The empty state suggests generating a batch.

Coupons tab

Discount codes a member can paste at Stripe checkout.

Per-coupon fields

CodeText input

Auto-uppercased. This is exactly what the member types.

Example: LAUNCH25

Discount typeDropdown

Percentage off, or fixed amount off.

Discount valueNumber

The percent (0 to 100) or the fixed amount in your Stripe currency.

Example: 25

Max usesNumber

How many times the code can be redeemed in total. 0 means unlimited.

Example: 500

Expiry dateText input

Optional date. Past-dated coupons render as 'Expired' on the list.

Example: 2026-12-31

Three-stat coupon row
Each coupon card shows uses (current / max), status, and expiry, so you can scan the list for codes that are still in flight.

Revenue tab

A two-card analytics view: the monthly revenue chart and the plan-distribution breakdown.

Reference series in this build
The monthly revenue chart currently renders a fixed 12-month reference series so the layout stays stable while live billing data is wired up. The plan-distribution chart pulls from your actual subscriber counts.

Audit tab

A flat audit log of every change made on this page.

What's recorded

Per entry: actor name, action verb (for example plan.create or coupon.delete), the metadata keys touched, and a short timestamp. The header strip shows the total entry count; pagination kicks in at 50 rows per page.

Common tasks

1

Launch your first paid tier

The minimum end-to-end flow: plan → role → embed.

  • In Stripe, create a Product and a recurring Price. Copy the price_ ID.
  • In Discord, create the role you want subscribers to receive (for example @Supporter) and place it below SYNTHET's bot role so SYNTHET can assign it.
  • Open Subscriptions and click Create plan. Fill in name, price, interval, role grant, perks, and the Stripe Price ID. Save.
  • Pick the embed channel in the yellow Discord strip and click Post subscriptions.
2

Run a fundraiser

Donations don't require Stripe Prices; they just need the master toggle on.

  • Open Donations and turn on Enable donations.
  • Click Create campaign. Give it a name, a goal amount, and a deadline. Add tiers like "$10 — name in credits" or "$50 — supporter role".
  • Switch back to the embed strip and click Post donations so members can find the campaign in Discord.
  • When you hit the goal, switch the campaign status to Completed so the embed updates.
3

Issue a launch coupon

Use a one-shot percentage coupon to drum up signups.

  • Open Coupons and click Create coupon.
  • Code: LAUNCH25. Type: Percentage. Value: 25.
  • Cap it: max uses 500, expiry two weeks out.
  • Save. The coupon shows up in your subscribers' Stripe checkout flow immediately.

Troubleshooting

Plan won't save: 'Stripe Price ID is required'
Stripe Price IDs are mandatory because they're how Synthet links back to billing. If you don't have one yet, create the Product and Price in Stripe first, then come back here.
Subscriber didn't get the role
Two usual causes: the Discord role sits above SYNTHET's bot role (Discord won't let a lower role assign a higher one — drag the SYNTHET role above), or the plan's role grant field is empty. Open the plan, set the role, and click Save plan; existing subscribers get the role on next renewal or you can manually grant it.
Embed won't post: no embed channel set
The yellow strip's Post button stays disabled until you pick a channel from the dropdown on the same row. Pick one; it auto-saves and the button activates.
Audit log says action 'forbidden'
The actor was missing the monetization.manage capability. Open RBAC, find their role, and grant the capability — or move them onto a template role that already includes it.