If you run an Emby server for a club, a shared household or a small community, you already know the awkward part is not the streaming — it is the bookkeeping. Someone has to remember who paid, chase renewals and decide what to do when a card expires. Cashier moves that work to Stripe and to Emby itself: a visitor signs up, picks a plan, pays, and the account is enabled when Stripe confirms the payment. When a renewal fails, the account is suspended — never deleted — until the invoice is paid.
This tutorial walks through the setup the way I did it on my own box, with the settings that actually matter and the traps I hit. It assumes you are charging for legal, self-hosted media — more on that below.
Before you start
Content rights. Cashier charges your users through your own Stripe account. You alone are responsible for holding the rights to the content or service you charge for — the films, series or channels on your server. MediaLab Works only provides the software and is not a party to your sales. Stripe may close or restrict an account that charges for content without the rights; see Stripe's restricted businesses list. Keep your library to content you own or are licensed to use.
Prerequisites:
- Emby Server 4.10.1 or newer (Linux, Windows or Docker).
- The Registration plugin 1.10 or newer, installed and licensed. Cashier uses its sign-up page, its e-mail settings and its accounts; without it, Cashier shows the reason on its page.
- A Stripe account (free to open; Stripe charges its own fee per payment) and your server reachable over HTTPS, for the customer page and the Stripe webhook.
- A MediaLab Works license for Cashier: an active subscription, a lifetime license within its update window, or the free 30-day trial.
Step 1 — Install the plugin
- Sign in to your MediaLab Works account, open Licenses and download the plugin DLL.
- Copy it into the Emby plugins folder and restart Emby Server:
- Linux (package):
/var/lib/emby/plugins/ - Docker: the
pluginsfolder inside your Emby config volume - Windows:
%AppData%\Emby-Server\programdata\plugins\
- Linux (package):
- Open Cashier in the Emby dashboard menu, click Open License page, paste your license key and activate it — or enter your e-mail to start the trial or buy a license. The plugin binds the key to this server and shows the license as Active.
The license is checked once a day and at every Emby start. Without internet the plugin keeps working for 7 days after the last successful check, then stops until it can check again. If you ever need to go back, the same page can install an update or roll back to the previous version; restart Emby afterward.
Step 2 — Set up Registration first
Cashier leans on Registration for the sign-up page, the accounts and the e-mail server. In Registration, set its public address and its e-mail server before you touch Cashier, otherwise customer e-mails have nowhere to go. Then open Cashier: the top of the page tells you whether Stripe and Registration are connected.
Step 3 — Connect Stripe
On the Stripe tab:
- In Stripe, go to Developers → API keys and create a restricted key with write access to Products, Prices, Checkout Sessions, Customer portal, Customers, Subscriptions and Webhook Endpoints, and read access to Events and Invoices. The standard secret key works too.
- Paste it and click Save and test.
Start with a test key (sk_test_… / rk_test_…) and the card 4242 4242 4242 4242. Get the whole flow right in test mode before a single real customer sees the page.
Step 4 — Settings: service name and public address
On the Settings tab, set the service name shown to customers and in Stripe, and the public server address (for example https://emby.example.com). That address is used for the return from Stripe, the payment links and the webhook.
Then go back to Stripe and click Create the webhook automatically. Without a public address Cashier still works — it reads the events from Stripe every few minutes — but the webhook makes activation feel instant.
Step 5 — Define your plans
On the Plans tab, review each plan: monthly or yearly, the number of simultaneous streams (1 to 4 by default), and its price. A plan for 2 devices lets the account play on two screens at the same time. Also set the currency, the free trial days for the first subscription, the grace days after a failed payment (3 by default), and optionally promotion codes, billing address and Stripe Tax.
Click Save and push to Stripe: the product and prices are created in your Stripe account. Two behaviors are worth knowing:
- A changed price creates a new Stripe price; existing subscribers keep theirs until they change plan.
- A disabled plan is no longer offered.
Step 6 — E-mails and the selling switch
Still on Settings, choose which e-mails go to customers — reminder before the next invoice (and how many days before), failed payment, receipt, suspension, access restored — and your own notifications (every payment, failed payments). Decide whether playback above the plan limit is stopped. Then turn on Selling is on.
The customer page lives at /emby/Cashier/Page on your Emby address, and new accounts from Registration are sent there automatically.
Step 7 — Test the whole cycle
With the test key in place:
- Sign up through Registration, pick a plan and pay with the test card. The account should be enabled with the plan's stream limit.
- Open the customer page: plans, current subscription, next payment and a Manage subscription button that opens the Stripe customer portal (card, invoices, plan change, cancellation).
- Let a test payment fail and watch the grace period, the e-mails and the suspension, then pay the invoice and confirm the account comes back.
How payment replaces approval
An account created through Registration stays disabled until Stripe confirms the payment; then it is enabled with the plan's stream limit. That is the whole model: payment is the approval. Non-payment suspends, never deletes — after a failed payment the account stays active for the grace period while Stripe retries, then it is disabled; paying the invoice enables it again. Deleting long-suspended accounts is optional and off by default.
A suspended account cannot sign in, so it gets a signed payment link valid for 7 days, by e-mail or from you. On a TV, the customer page shows a QR code so the customer pays from a phone and the TV continues by itself.
Admin tabs
Everything is in the Emby dashboard: Subscribers (access, plan, renewal date; copy or e-mail the payment link, exempt from paying, suspend, reactivate, remove, open in Stripe), Payments (latest invoices and outcome), Plans, Stripe, Settings and Log (every change of state). Require payment from an existing account adds an account you created earlier; it stays suspended until it pays. Administrator accounts are never touched, and switching selling off keeps every account as it is.
Tips and troubleshooting
- "Registration: missing, too old or stopped" — install or update Registration to 1.10 or newer, check its license, restart Emby.
- Payments do not activate accounts quickly — the webhook cannot reach the server. Check that the public address is reachable over HTTPS from the internet. Cashier reconciles with Stripe every 15 minutes; Check Stripe now in Subscribers does it at once.
- No e-mails to customers — check the e-mail server settings in Registration.
- "Selling is off or not configured" — the key is missing, the plans were not pushed to Stripe, or the switch in Settings is off.
- Over-limit playback is not stopped on Emby Web 4.10 — the "Stop" command is ignored there; the real protection is the native simultaneous-stream limit. Plan Guard takes over watching if installed.
- License lapses — Cashier stops: no new paid sign-ups and no account changes, but nothing is deleted. Stripe events from the meantime are read as soon as the license is valid again.
Conclusion
Cashier keeps the boring part of a club server boring: plans by simultaneous streams, Stripe Checkout on Stripe's own pages so card data never reaches your server, payment that activates and non-payment that suspends. Set it up in test mode first, keep your content rights in order, and renewals mostly take care of themselves. The full reference is in the user guide; for anything else, see the knowledge base, the FAQ or contact us.