SE Subscriptions is a membership and subscription billing component for Joomla. It lets you sell subscription plans, take payment by Stripe, PayPal, or offline bank transfer, gate content behind a paywall, and give customers a proper sign-up page and account dashboard — all styled to match your site, not a generic add-on look.
SE Subscriptions User Guide
Version 1.10.34 — for Joomla 5 and 6
What is SE Subscriptions?
SE Subscriptions is a membership and subscription billing component for Joomla. It lets you sell subscription plans, take payment by Stripe, PayPal, or offline bank transfer, gate content behind a paywall, and give customers a proper sign-up page and account dashboard — all styled to match your site, not a generic add-on look.
The package installs several extensions together from one ZIP:
- com_sesubscriptions — the main component (admin + site)
- plg_sesubpayment_stripe — Stripe payment gateway
- plg_sesubpayment_paypal — PayPal payment gateway
- plg_sesubpayment_offline — bank transfer / manual payment gateway
- plg_authentication_sesubemail — lets anyone log in with their email address instead of a separate username
- plg_task_sesubscriptions — scheduled task: expires overdue subscriptions, sends reminder emails
- plg_system_sesubscriptions — paywall teaser rendering, login safety-net, sends subscribers to their dashboard after logging in
Installation
- In Joomla admin, go to System > Install > Extensions.
- Upload the
pkg_sesubscriptions_vX.zip file.
- Joomla installs the component and every plugin above in one step, and automatically enables the ones the component can't function without (the system plugin, task plugin, and Offline gateway) so a fresh install works immediately without you having to hunt through System > Plugins first.
- Go to System > Manage > Plugins and confirm "SE Subscriptions - Email Login" is enabled — this one isn't auto-force-enabled, so it's worth checking.
- Go to System > Scheduled Tasks and confirm a task using "SE Subscriptions - Maintenance" exists and is enabled. If not, add one and set it to run daily.
License
SE Subscriptions has a free tier and a Pro tier, activated with a license key issued through SE24 Media's licensing system.
- Free tier: full access to plans, paywall rules, custom fields, CSV import/export, the Sign-Up Page and Customer Dashboard, and the complete checkout flow using free plans and the Offline gateway. Stripe and PayPal stay hidden on checkout.
- Pro tier: everything in Free, plus Stripe and PayPal.
Even on the Free tier, activating a key is worth doing — it's what keeps the extension receiving updates automatically through Joomla's Update system.
To activate:
- Go to Components > SE Subscriptions > License (a dedicated page in the sidebar, separate from Options).
- Enter your license key and click Activate License.
- Use Check License any time to confirm the current tier and expiry without changing anything.
If Stripe/PayPal aren't showing on checkout, check this page first — that's almost always a licensing issue, not a plugin or configuration one.
Configuration (Options)
Components > SE Subscriptions > Options — General / Paywall / Invoices / Payment Gateways / Permissions.
General
- Default Currency (ISO), Currency Symbol
- Reminder Days — days before expiry to email a reminder, non-recurring plans only (recurring plans renew automatically, so no reminder is needed). Comma-separated for multiple stages, e.g.
14,7,1.
- Terms Article ID — optional article ID for your subscription terms.
Paywall
- Enable Teaser Paywall — off by default. When on, articles covered by a Paywall Rule show a truncated teaser with a subscribe call-to-action.
- Default Teaser Length (words), Fade Out Teaser Text, Fade Height, Call-to-Action Heading / Text / Image / Alignment — see the Paywall Rules section below for how individual rules interact with these site-wide defaults.
Invoices
- Invoice Number Prefix, First Invoice Number, Company Details (shown top-left on every invoice, one line per row), Invoice Footer.
Payment Gateways
A read-only status dashboard — not a duplicate settings screen. It shows each gateway's actual state (Live / Test / Sandbox / Not configured / Disabled), read directly from that gateway's own plugin settings, with an Edit button that jumps straight there. This can never drift out of sync with reality because it doesn't store anything of its own — it's just a faster way to see where things stand than opening System > Plugins three separate times.
Plans
Components > SE Subscriptions > Plans
- Price / Currency
- Recurring — bills automatically via Stripe or PayPal until cancelled. Non-recurring is a single payment for a fixed duration.
- Duration / Duration Unit — day/week/month/year, or:
- Fixed Date — every subscriber expires on the same calendar date regardless of signup date. If you choose Fixed Date, you must also set the date — leaving it blank doesn't expire the plan instantly, it deliberately falls back to behaving like Lifetime instead, which can be confusing if that wasn't intended. Not available for recurring plans.
- Lifetime — never expires.
- Trial Days — free trial period, recurring plans only.
- Joomla User Groups — assigned to the subscriber while active; use standard Joomla ACL against these groups to restrict content.
A plan priced at £0 (and not mid-trial) skips payment entirely on checkout — no gateway picker, no coupon box, just a "Get Started Free" button that activates the account immediately, whether the plan is recurring or not.
Access Levels
Click Create Access Level on a saved plan to auto-generate a Joomla Access Level from that plan's groups, for restricting other ACL-aware extensions. Stays in sync automatically when you edit the plan's groups; Re-sync Now is only needed if someone edited the Access Level manually elsewhere.
The Sign-Up Page
This is the actual checkout experience customers see, and it needs a menu item — the view has no default landing page of its own.
Creating the menu item: New Menu Item > Menu Item Type > "Checkout / Sign-Up Page." Two things to set:
- Plan(s) (Details tab) — pick one plan for a dedicated link to that exact plan (e.g. for an email campaign), or pick several to show a plan-picker strip at the top of the page letting the visitor choose. This field lives in the menu item's params, not its link/URL — that's a deliberate choice, since Joomla's router can only handle a single value on a menu item's actual link.
- Design tab — Primary Colour, Button Text Colour, Page/Card Background, Card Border, Body/Heading Text Colour, Corner Radius, Google Font, Body/Heading Font Weight. Leave any colour field blank to inherit your template's own styling instead.
- Page Text tab — custom heading (defaults to the plan's title) and an optional subheading.
What the page actually does:
- For a guest, account fields (Full Name, Email, Password, Confirm Password) appear directly in the same form as payment — no separate registration page, no redirect. Submitting creates the account, activates it, logs the customer in, and continues straight to payment in one step.
- Login is by email address — there's no separate username field anywhere in this flow.
- A small "Already have an account? Log in" link is available for returning customers, which sends them to their dashboard afterward rather than back to this page.
- An optional Company Name field appears for every plan (not just paid ones) — if filled in, it's saved on the subscription and printed on the customer's invoice.
- A Coupon box appears for non-recurring, non-free plans, with an Apply button that checks the code and updates the displayed total immediately, without reloading the page. The server always re-validates at final submit regardless, so the live preview can never disagree with what's actually charged.
The Customer Dashboard
Also needs its own menu item: New Menu Item > Menu Item Type > "Customer Dashboard." Same Page Text / Design tabs as the Sign-Up Page.
Shows:
- Every subscription the customer has, as its own card: plan name, status badge, price, renewal date (or "Lifetime" / "No expiry date set" if the plan has no defined end), Company Name if one was set, and Cancel Renewal / Change Plan buttons where applicable
- A table of invoices with PDF download links
- A "View Plans" button, always visible, so an existing customer can easily add another plan
Logging in sends subscribers here automatically. Any login on the site — the dashboard's own login link, a generic login module in a sidebar, a plain Login menu item — sends an account with at least one subscription straight to this dashboard, rather than wherever they happened to be browsing. The one exception is a login that's already mid-checkout (e.g. clicked "Already have an account?" from the Sign-Up Page) — that one still returns to finish the purchase, since overriding it there would be actively unhelpful.
Custom Fields
Components > SE Subscriptions > Custom Fields
Add extra questions to the sign-up form (e.g. "Shirt Size," "Membership Number") — Text, Text Area, Dropdown List, or Checkbox, applied to a specific plan or all plans, optionally required. Answers appear on the subscription record and in CSV export/import. Don't change a field's Internal Name once subscribers have answered it — that orphans their existing answers.
Coupons
Components > SE Subscriptions > Coupons — Percentage or Fixed Amount, restricted to specific plans or all, with a usage limit and validity window. Non-recurring plans only — coupons currently never reduce a recurring plan's price (a recurring plan priced at £0 is handled by the plan itself being free, not by a coupon).
Payment Gateways
PayPal
- Mode: Sandbox (testing) or Live — a real, working toggle right on the plugin screen.
- Client ID / Secret — the plugin won't offer itself on checkout at all until both are filled in, regardless of license tier or enabled status. Get sandbox credentials from developer.paypal.com > Apps & Credentials (with the Sandbox/Live toggle set to match your Mode setting), or live credentials the same way with that toggle switched.
- Webhook — create one in the PayPal developer dashboard pointing to:
https://yoursite.com/index.php?option=com_sesubscriptions&task=payment.notify&gateway=paypal (adjust the path if Joomla isn't installed at your domain root) with events: PAYMENT.SALE.COMPLETED, BILLING.SUBSCRIPTION.ACTIVATED, BILLING.SUBSCRIPTION.CANCELLED, BILLING.SUBSCRIPTION.EXPIRED, BILLING.SUBSCRIPTION.SUSPENDED. PayPal gives you a Webhook ID — paste it into the plugin. Test-mode and live-mode webhooks are registered separately in PayPal's dashboard; make sure you've added one under whichever mode you're actually using.
- At checkout, a Sandbox transaction is completed by logging into
sandbox.paypal.com with a sandbox personal account (auto-created for you under Sandbox > Accounts), not your real PayPal login.
Stripe
- No separate mode toggle — it's live or test based entirely on which Secret Key you paste in:
sk_test_... for test mode, sk_live_... for live.
- Webhook Secret required for recurring billing — from Developers > Webhooks in your Stripe dashboard, pointing to the same style of URL:
.../index.php?option=com_sesubscriptions&task=payment.notify&gateway=stripe with events checkout.session.completed, invoice.paid, customer.subscription.deleted.
- Test with card 4242 4242 4242 4242, any future expiry, any CVC.
Offline / Bank Transfer
- Payment Instructions shown to the customer after they choose it.
- Stays Pending until you manually activate it. Use the Subscriptions list's dedicated Activate button rather than opening the record and just changing the Status dropdown to Active — the button correctly calculates the billing period; a plain edit-and-save does not, and can leave a subscription active with no defined expiry.
What a webhook actually is, briefly
It's a URL on your site that Stripe/PayPal call directly, independent of whether a customer is looking at your site — this is how a renewal (which happens automatically, days or weeks after anyone last visited) gets recorded. Without it, a one-off payment still completes fine via the browser return, but recurring renewals and cancellations initiated from inside PayPal/Stripe never reach your site.
Email Login
Any visitor — customers created through this component or accounts from anywhere else on the site — can log in by typing their email address into the normal username field, on any login form. This is handled by a dedicated authentication plugin, so it works everywhere, not just on pages this component controls.
Paywall Rules
Components > SE Subscriptions > Paywall Rules — only enforced when Enable Teaser Paywall is on in Options.
- Category rule paywalls every article in a category; an Article rule always overrides a category rule for that one article, letting you carve out a free article in a paid category or vice versa.
- Required Plan determines who sees the full article vs. the teaser.
- Teaser Words overrides the site-wide default for that one rule; 0 uses the site default.
- The "Subscribe" link shown to a locked-out visitor automatically finds and links to whichever Sign-Up Page menu item actually offers the required plan, so it always lands somewhere properly styled and configured — not an orphaned, unstyled page.
Subscriptions (Admin)
Components > SE Subscriptions > Subscriptions
- Activate (toolbar button on the list) — correctly calculates and sets the billing period. Prefer this over opening a record and changing Status by hand.
- Expire, Export CSV, Import CSV (bulk-create from a spreadsheet; matching column names to Custom Fields' internal names saves those as answers; tick "Create Joomla users if not found" to auto-create accounts for unmatched emails).
Transactions & Invoices
Components > SE Subscriptions > Transactions
- Create Invoice on demand for a transaction; Generate Missing Invoices bulk-creates for anything completed that doesn't have one yet.
- Send — emails the invoice PDF straight to the customer as an attachment, using your site's normal mail settings. This is separate from the customer downloading it themselves from their dashboard.
- Every invoice includes the customer's Company Name if they set one at sign-up.
Gift Links
Components > SE Subscriptions > Gift Links — unlocks one specific paywalled article for anyone who opens the link, no subscription required. Set the Article, an optional Expiry, and a private Note (never shown to the visitor). The shareable link is generated on first save.
Scheduled Maintenance
The task plugin should run daily (System > Scheduled Tasks). Each run expires overdue subscriptions and sends reminder emails per the Reminder Days setting. Renewal Grace Period (hours) (default 48, set on the task itself) keeps a recurring subscription active past its end date for that long, giving the gateway's renewal webhook time to arrive before treating it as lapsed. As a safety net, the system plugin also expires overdue non-recurring subscriptions at login time in case the scheduled task hasn't run recently.
Lifecycle Emails
Sent automatically, using placeholders {NAME}, {PLAN}, {EXPIRY}, {SITE}, {URL}:
- Welcome — subscription becomes active
- Renewed — successful automatic renewal
- Reminder — ahead of expiry, non-recurring plans, per Reminder Days
- Expired — subscription lapses
- Cancelled — auto-renewal cancelled (access continues until the current period ends)
- Upgraded — plan switched
Translations
Fully translated into English, Spanish, French, German, Portuguese, Dutch, and Italian, across admin and site.
Quick Troubleshooting
- Stripe/PayPal missing from checkout — check Components > SE Subscriptions > License, not the plugin settings first; this is almost always a Pro-tier licensing issue. If License already shows Pro, then check the specific gateway plugin has both its API credentials actually filled in.
- "Plan(s)" field empty when creating a Sign-Up Page or Dashboard menu item — turn on System > Global Configuration > Debug System and reopen the field; the underlying error will now be shown instead of hidden.
- A subscriber has no expiry date despite being active — check it was activated via the Subscriptions list's Activate button, not by editing the record and changing Status directly. Also check the plan's Duration Unit isn't set to Fixed Date with no date filled in.
- A guest can't complete sign-up / gets sent back to a login page after registering — check Global Configuration > Users > New User Registration Group points at a real, non-deleted group, and that group's Site Login permission isn't set to Denied.
- Recurring subscriptions aren't renewing/expiring correctly — check the gateway's webhook is configured (see Payment Gateways above) under the correct test/live mode, and check the Scheduled Task is enabled and running.
- Offline subscriptions stuck as Pending — expected; manually Activate from the Subscriptions list once payment is confirmed.
- Paywall not showing — check Enable Teaser Paywall is on, and a Paywall Rule actually covers the article or its category.
- A subscriber's custom field answers went missing — don't change a Custom Field's Internal Name after subscribers have already answered it.