Billing
Who this guide is for: Tenant admins and managers who manage the subscription, payment methods, and invoices for your EmbayLMS portal.
Overview
The billing page lets you see your current plan and usage, change plans, manage the cards on file, review live invoices, set your billing contact, and cancel.
Payment processing and the subscription itself are handled by Stripe. EmbayLMS never sees or stores your full card number — card fields are rendered inside Stripe-hosted iframes, and only the brand, last four digits, and expiry are retained for display. This keeps the platform within PCI DSS SAQ A scope.
How billing works (ADR-016): Stripe Billing is the system of record for your subscription, plan, renewal date, and invoices. The billing page reads this data live from Stripe, so changes appear immediately. HubSpot is used only as a one-way CRM mirror for our sales/success teams — it is not part of your billing.
Prerequisites
- Admin or Manager role on the tenant
- A valid credit or debit card to put on file for paid plans
- Your finance team’s billing email and PO number, if your organization requires them
1 — Who can access billing
Billing is visible to users with the Admin or Manager role. Learners and other roles are redirected away from the page.
To give someone billing access, grant them the Admin or Manager role under Admin Panel → Users → [user] → Roles. See the User Management guide.
2 — Viewing your plan and usage
Navigate to Admin Panel → Settings → Billing. The top card shows:
- Plan name and a status pill (
active,trialing,past_due, orcancelled) - Price — charged per active user per month, in CAD (Free plans show “Free”; Enterprise shows “Custom”)
- Active users this month — anyone who signed in at least once during the current billing month. On the Free plan a usage bar shows this against the plan’s cap.
- Licensed users — the total number of users provisioned in your tenant
- Active courses — published courses, shown against your plan’s course limit (the Free plan includes 3 active courses; paid plans are unlimited)
- Storage — content storage used by your course files (SCORM packages, videos, documents), shown against your plan’s storage limit (Free 1 GB, Starter 10 GB, Growth 50 GB, Enterprise unlimited)
- What’s included — the capabilities advertised for your current plan
Below that, two cards show your billing cycle (monthly or annual) and next renewal date. If Stripe has not yet reported a value, the field reads “Not available” rather than showing a placeholder.
Active users vs. licensed users: You are billed on active users this month, not on the total number of accounts. Provisioning extra accounts that never sign in does not increase your bill.
Free plan limits ARE enforced (PRD §7.6, 2026-07-04): on the Free plan, adding a 6th active user — by create/invite, CSV import, self-registration, or reactivating a deactivated account — is blocked with an upgrade prompt. Deactivating a user frees a seat immediately. Paid plans stay uncapped: they price on a smooth per-active-user curve (§7.6), so creating users, sending invites, and enrolling learners are never blocked; any committed seat band is a billing quantity only, with overage surfaced (usage bar + “over” indicator), not enforced.
The storage limit IS enforced: uploading a file that would push you past your plan’s storage cap is blocked with an upgrade prompt — on every plan with a cap, not just Free. Existing content is never deleted; deleting or replacing large course files frees space.
The course limit IS enforced: on the Free plan, publishing a 4th active course is blocked with an upgrade prompt. Courses that are already published are never taken down by the limit — it applies only when you activate another course (including scheduled publishes, which wait until a slot frees up or you upgrade). Archiving or deleting a published course frees a slot immediately.
2b — Plan-locked features (lock icons in the menu)
Some features are included only from a specific plan:
| Feature | Included from |
|---|---|
| Custom branding | Starter |
| Certificates | Starter |
| SSO / SAML | Starter |
| API access | Growth |
| Advanced automations (recurring assignments) | Growth |
| SCIM provisioning | Enterprise |
When your plan does not include a feature, the admin panel shows it as locked:
- Lock icon in the left menu — menu entries for locked features (for example SCIM Provisioning on a Starter plan) show a small padlock. Hovering the entry shows which plan unlocks it.
- Upgrade screen instead of the page — opening a locked feature shows a “not included in your plan” screen naming the plan that includes the feature, with a View plans & upgrade button that takes admins to this billing page. Managers who reach a locked page are asked to contact their administrator instead, since only admins can change the plan.
- Upgrade prompts on blocked actions — actions blocked by a usage limit (adding a user past the Free cap, publishing a course past the course limit, uploading past the storage limit) show the same upgrade prompt inline.
Locked features never lose data: anything you configured while on a higher plan (for example an IdP connection set up during a trial) is kept and works again as soon as the plan includes the feature.
Not seeing locks you expect? Feature locks apply once your organization has a subscription record. If your portal predates plan enforcement, features remain available until a plan is assigned — your account manager can confirm your status.
3 — Changing your plan
The plan cards mirror the public pricing page: each plan lists its price and included features, and your current plan is highlighted.
- Navigate to Admin Panel → Settings → Billing.
- Find the plan you want in the plan cards.
- Click the plan’s button and confirm the change in the dialog.
What happens depends on the direction of the change:
| Change | When it takes effect | Billing |
|---|---|---|
| Upgrade (e.g. Starter → Growth) | Immediately | Stripe charges a prorated amount for the rest of the current period; the new features are available at once |
| Upgrading from Free to a paid plan | Immediately, once a card is on file | A secure Stripe-hosted card form opens in-page to collect your card. When you confirm, your existing subscription moves up to the paid plan and Stripe charges the prorated amount right away. |
| Downgrade (e.g. Growth → Starter) | At the end of the current period | You keep your current features until then; the lower price applies on renewal. A notice shows the effective date. |
| Downgrade to Free | At the end of the current period | Your subscription stays in place but moves to the $0 Free plan on renewal — it is not cancelled. |
| Enterprise | — | The button routes you to contact sales rather than self-serve checkout |
A scheduled downgrade can be undone before it takes effect by selecting your current plan again.
How the Free plan is billed. Every workspace — including Free — has exactly one Stripe subscription for its whole life; the Free plan simply sits on a $0 price. Upgrading changes that subscription’s price rather than starting a new one, so your billing history stays continuous. (Tenants that signed up directly on a paid plan during their free trial start their subscription when they first add a card.)
Free trial length. Paid plans start with a 1-month (30-day) free trial — no credit card required. If the trial ends before a card is on file, paid-plan features are locked until you add one; add a card at any time during the trial to continue without interruption.
4 — Managing payment methods
The Payment methods section is an in-app manager backed by Stripe. Card fields are Stripe-hosted — your card number never touches EmbayLMS.
See the cards on file. Each saved card shows its brand, last four digits, and expiry. The card used for renewals is marked Default.
Add a card.
- Click Add card.
- Enter the card details in the Stripe-hosted form.
- Click Save card. The card is verified with Stripe (a SetupIntent) and added to your saved cards.
Set the default. Click Make default on any saved card. Future renewals charge that card.
Remove a card. Click Remove on a card you no longer need. You cannot remove the only card on file for an active paid subscription — add a replacement first.
If a renewal payment fails, the status pill turns to
past_due. Add or set a working default card; Stripe automatically retries the charge.
5 — API usage
If your plan includes an API quota, the API usage section shows your current month’s call count against the included monthly quota (or “unlimited”). A usage bar turns red if you exceed the limit. To manage or rotate API keys, see the REST API guide.
6 — Viewing and downloading invoices
The Invoices section lists your invoices live from Stripe — date, amount, currency, and status.
- Click Download PDF on any invoice to open the Stripe-hosted invoice PDF.
- Invoices are issued and finalized by Stripe on each renewal and plan change (including prorated charges).
If Stripe is temporarily unavailable, the page falls back to the locally mirrored invoice records so you still see your history.
7 — Billing contact and PO number
The Billing contact section shows the email Stripe uses for billing notices and the PO number printed on your invoices. Both are read-only until you click Edit.
- Click Edit.
- Update the billing email and/or PO number.
- Click Save. The email is written back to the Stripe customer, so receipts and dunning emails go to the right place. The PO number applies to invoices issued after you save it.
8 — Cancelling your subscription
Cancellation is available on paid plans only (there is nothing to cancel on Free).
- In the Cancel subscription section, click Cancel subscription.
- Choose a reason (optional detail box) — this helps us improve.
- Review the impact summary, including when access ends and the data-retention timeline.
- Click Confirm cancellation.
Your subscription is scheduled to cancel at the end of the current billing period — you keep access until then. While a cancellation is pending, the page shows the effective date and a Keep plan button to reactivate before it takes effect.
For what happens to your data after access ends, see the Data Retention guide.
Configuration Reference
| Setting | Location | Description | Default |
|---|---|---|---|
| Plan | Settings → Billing → plan cards | Current plan; change via upgrade/downgrade | Per signup |
| Payment method | Settings → Billing → Payment methods | Cards on file; add / set default / remove | None (required for paid) |
| Billing email | Settings → Billing → Billing contact | Stripe billing-notice email | Signup admin email |
| PO number | Settings → Billing → Billing contact | PO number printed on invoices | None |
| Cancellation | Settings → Billing → Cancel subscription | Schedules cancel at period end | Not cancelled |
Troubleshooting
I don’t see the Billing page Billing is limited to the Admin and Manager roles. Ask an existing admin to grant you one of those roles.
“Could not start the upgrade” / “Could not open billing” Billing is not fully configured for this environment. This is a platform-side configuration issue (Stripe keys) — contact EmbayLMS support; there is nothing to fix in your tenant.
The add-card or checkout form is blank The Stripe form is blocked from loading. Disable any script/content blocker for this site and reload. If it persists, contact support with a screenshot of the browser console.
My plan change / new card isn’t reflected yet The page reads live from Stripe, so changes normally appear immediately. If a value still shows “Not available,” reload the page; Stripe occasionally takes a few seconds to report the renewal date after a change.
Payment failed / status shows past_due
Open Payment methods, add a working card and set it as default. Stripe retries the charge automatically once a valid card is on file.